testbook

Flume

Flume

Flume提供了收集,聚集和转移海量日志文件的连接器。同时,Flume使用ZooKeeper来确保配置的一致性和可用性。

Flume具有如下特点:

  • 高可用性:Flume提供了端到端的可靠传输盒本地数据存储选项。
  • 可管理性:通过ZooKeeper保证配置的可用性并使用多个master来管理所有节点。
  • 拓展性:用户可用java语言实现新的方法。

本处使用的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-ng

搭建agent

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

agent由flume安装目录中bin/下的flume-ng脚本启动,用户需要指定agent名称,配置目录,以及配置文件

$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties