Skip to content

Flume就是一个用来采集日志数据的系统。它支持在日志系统中定制各类数据发送方,用于收集数据。

Flume三大核心组件

  • Source:数据源,Flume内置支持读取很多种数据源,基于文件、基于目录、基于TCP\UDP端口、基于HTTP、Kafka等等,也可以自定义
  • Channel:临时存储数据的管道,接收Source发送的数据,它分为几种类型
    • Memory Channel:使用内存作为数据的存储;优点是效率高,缺点是可能会丢失数据(断电等情况),且内存有限。
    • File Channel:使用文件来作为数据的存储;优点是数据不会丢失,但速度比内存慢点。
    • Spillable Memory Channel:使用内存和文件作为数据存储,即先把数据存到内存中,如果内存中数据达到阈值再flush到文件中;缺点是仍然存在数据丢失的风险。
  • Sink:从Channel中读取数据并存储到指定目的地;Sink的表现形式有很多如打印到控制台、HDFS、Kafka等,常用的sink组件有:
    • Logger Sink:将数据作为日志处理,可以选择打印到控制台或者写到文件中,主要在测试时使用。
    • HDFS Sink:将数据传输到HDFS中,这个是比较常见的,主要针对离线计算的场景
    • Kafka Sink:将数据发送到kafka消息队列中,这个也是比较常见的,主要针对实时计算场景,数据不落盘,实时传输,最后使用实时计算框架直接处理。

Flume的下载与安装

点击进入下载页面

image-20231008193242374

服务器需要配置jdk环境,上传至/usr/local/soft/目录下,然后进行如下操作

shell
[root@bigdata04 ~]# cd  /usr/local/soft/
[root@bigdata04 soft]# ls
apache-flume-1.11.0-bin.tar.gz  hadoop
[root@bigdata04 soft]# tar -zxvf apache-flume-1.11.0-bin.tar.gz  #解压
[root@bigdata04 soft]# cd apache-flume-1.11.0-bin/conf/
[root@bigdata04 conf]# mv flume-env.sh.template flume-env.sh # 重命名

Flume入门案例

点击进入Flume官方入门文档,我将英文注释改成中文,入门代码示例如下:

properties
# 给三大组件取个名字,a1是agent的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# source组件配置
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0 # 如果想让所有都访问到使用 0.0.0.0
a1.sources.r1.port = 44444

# sink组件配置
a1.sinks.k1.type = logger

# channels组件配置
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 将3个组件关联起来
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

官方文档:sources配置官方文档channel配置官方文档sink配置官方文档(sink包含很多种),然后创建配置文件并执行

properties
[root@bigdata04 conf]# pwd
/usr/local/soft/apache-flume-1.11.0-bin/conf #当前所在目录
[root@bigdata04 conf]# vi example.conf #创建配置文件,将上述文件输入
[root@bigdata04 conf]# cd ..
[root@bigdata04 apache-flume-1.11.0-bin]# nohup bin/flume-ng agent --conf conf --conf-file conf/example.conf --name a1 & 后台运行
[root@bigdata04 apache-flume-1.11.0-bin]# jps
2196 Jps
2074 Application  # 这个就是正在运行的flume进程
[root@bigdata04 apache-flume-1.11.0-bin]# cat flume.log # 查看日志

可以在另一个窗口输入telnet localhost 44444,然后输入任意内容按回车,然后观察日志尾部变化。