Flume提供了收集,聚集和转移海量日志文件的连接器。同时,Flume使用ZooKeeper来确保配置的一致性和可用性。
Flume具有如下特点:
本处使用的Flume版本为Flume1.2+,即Flume-ng,它的抽象结构可用下图表示:

其中:
Event:传输的单位数据流
Agent:一个JVM进程,管理从外部数据源进入的event至下一站,每个agent由source,channel,sink三部分组成。Flume-ng可以由多个agent组成。
Source:要接受的数据来源
Sink:对应于每个source,是flume-ng的结果路径
Channel:Source与Sink之间的通道,flume-ng通过channel来传输数据。
Flume agent的配置储存在本地配置文件。一个配置文件中可以储存多个agent的信息,此文件中包括了每一个agent的source,sink和channel的属性以及他们的连接方式。
以下为一个配置文件的基本格式:
# 定义agent的source,sink和channels
[Agent].sources = [Source]
[Agent].sinks = [Sink]
[Agent].channels = [Channel1] [Channel2]
# 设置source的channel
[Agent].sources.[Source].channels = [Channel1] [Channel2] ...
# 设置sink的channel
[Agent].sinks.[Sink].channel = [Channel1]
每一个组件(source,sink,channel)都有名称(name),类型(type),以及特定的属性。
比如,一个 Avro源需要hostname(或者IP 地址),以及接收数据的端口号; 一个内存通道(memory channel)可以包含最大的队列大小(“capacity”); 而一个HDFS sink需要文件文件系统的URL,创建文件路径,以及创建频率(“hdfs.rollInterval”)等。
以下为单个组件的基本格式:
#source的配置属性
[Agent].sources.[Source].[someProperty] = [someValue]
#channels的配置属性
[Agent].channel.[Channel].[someProperty] = [someValue]
#sinks的配置属性
[Agent].sources.[Sink].[someProperty] = [someValue]
agent由flume安装目录中bin/下的flume-ng脚本启动,用户需要指定agent名称,配置目录,以及配置文件
$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties