- Flume的核心架构
Flume用于采集数据,把数据从一个地方转移到另外一个地方,同时它还提供一定的高可用性,防止在传输的过程中造成数据丢失,常见的应用场景是把系统产生的日志信息转存到HDFS进行数据分析,如果没有Flume或者其他类似的采集框架,就要手动转移(上传)到HDFS,在一台电脑还算好,要是不同服务器,就要先把日志数据拷贝到移动存储设备里,在从移动设备拷到想要存储的位置,如果这一步不实现自动化的话,显然是增加的不必要的工作量的。
Source是数据源,代表要采集的数据获取位置;Sink(下沉)是最终数据的到达位置,支持各种类型,比如存到HDFS,数据库,HBase,文件系统等等都是可以的;Channel就是传输的通道。这三个构成一个Agent,也就是Flume采集实现的核心。有了Flume,在数据采集这一块,就不用手动转移或者重新写一个自动化的采集程序了,极大减少了工作量。
- Flume快速安装
官网下载Flume后,直接解压到虚拟机,编辑conf/flume-env.sh,添加JAVA_HOME的路径即可完成安装。运行程序为bin/flume-ng
- Source、Sink、Channel的配置使用
Flume作为一个采集框架,其实非常简单,基本就是一些配置文件的设置。Source作为采集源,框架内置了多种实现,甚至可以自定义实现,Sink和Channel也是一样,有内置实现也可自定义实现。Flume入门基本只要掌握好它内置的这些常用组件实现即可。
- 监听网络端口采集数据
现在选择一个案例配置,监听一个网络端口数据(source:netcat),中转到内存(channel:memory),最终打印在控制台(sink:logger)。
# agent取名a1,并定义其source,sink,channel
a1.sources
=
r1
a1.sinks
=
k1
a1.channels
=
c1
# 描述source的各种属性,不同类型其配置是不一样的
a1.sources.r1.type
=
netcat
a1.sources.r1.bind
=
localhost
a1.sources.r1.port
=
44444
# 描述sink的配置
a1.sinks.k1.type
=
logger
# 使用内存作为中转通道
a1.channels.c1.type
=
memory
a1.channels.c1.capacity
=
1000
a1.channels.c1.transactionCapacity
=
100
# 绑定channel到需要的source和sink上,就相当于把它们连接起来
a1.sources.r1.channels
=
c1
a1.sinks.k1.channel
=
c1
启动命令:
bin/flume-ng agent --conf conf --conf-file example.conf --name a1
-Dflume.root.logger=INFO,console
- 采集本地文件夹下的文件获取数据,
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/focus/app/log
a1.sources.r1.fileHeader = true
a1.sinks.k1.type = logger
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1