Flume是什么
- Flume是流式日志采集工具,Flume提供对数据进行简单处理并且写到各种数据接受方的能力,Flume提供从本地文件(spooling directory source)、实时日志(taildir、exec)、REST消息、Thrift、Avro、Syslog、Kafka等数据源上收集数据的能力。
Flume能干什么
- 提供从固定目录下采集日志信息到目的地(HDFS、HBase、Kafka)能力。
- 提供实时采集日志信息(taildir)到目的地的能力。
- Flume支持级联(多个Flume对接起来),合并数据的能力。
- Flume支持按照用户定制采集数据的能力。
Flume架构
- Flume基础架构:Flume可以单节点直接采集数据,主要应用于集群内数据。

- Flume多Agent架构:Flume可以将多个节点连接起来,将最初的数据源经过收集,存储到最终的存储系统中。主要应用于集群外的数据导入到集群内。

Flume多Agent合并

Flume架构图

基本概念-Source
- Source负责接收events或通过特殊机制产生events,并将events批量放到一个或多个Channels。
- 有驱动和轮询2种类型的Source。
- 驱动型Source:是外部主动发送数据给Flume,驱动Flume接受数据。
- 轮询Source:是Flume周期性主动去获取数据。
- Source必须至少和一个Channel关联。

基本概念-Channel
- Channel位于Source和Sink之间,Channel的作用类似队列,用于临时缓存进来的events,当Sink成功地将events发送到下一跳的Channel或最终目的,events从Channel移除。
- Channels支持事务,提供较弱的顺序保证,可以连接任何数量的Source和Sink。
- 不同的Channel提供的持久化水平也是不一样的:
- Memory Channel:不会持久化。
- File Channel:基于WAL(预写式日志Write-Ahead Log)实现。
- JDBC Channel:基于嵌入式Database实现。
- MemoryChannel:消息存放在内存中,提供高吞吐,但不提供可靠性;可能丢失数据。
- FileChannel:对数据持久化;但是配置较为麻烦,需要配置数据目录和checkpoint目录;不同的FileChannel均需要配置一个checkpoint目录。
- JDBCChannel:内置的derby数据库,对event进行了持久化,提供高可靠性;可以取代同样具有持久特性的FileChannel。
基本概念-Sink
- Sink负责将events传输到下一跳或最终目的,成功完成后将events从Channel移除。
- Sink必须作用于一个确切的Channel。

Flume支持采集日志文件
- Flume支持将集群内的日志文件采集并归档到HDFS、HBase、Kafka上,供上层应用对数据分析、清洗数据使用

Flume支持多级级联和多路复制
- Flume支持将多个Flume级联起来,同时级联节点内部支持数据复制。

Flume级联消息压缩、加密
- Flume级联节点之间的数据传输支持压缩和加密,提升数据传输效率和安全性。

Flume数据监控

Flume传输可靠性
- Flume在传输数据过程中,采用事务管理方式,保证传输过程中数据不会丢失,增强了数据传输的可靠性,同时缓存在Channel中的数据如果采用FileChannel,进程或者节点重启数据不会丢失。

Flume传输可靠性(failover)
- Flume在传输数据过程中,如果下一跳的Flume节点故障或者数据接受异常时,可以自动切换到另外一路上继续传输。

Flume传输过程中数据过滤
- Flume在传输数据过程中,可以简单的对数据简单过滤、清洗,可以去掉不关心的数据,同时如果需要对复杂的数据过滤,需要用户根据自己的数据特殊性,开发过滤插件,Flume支持第三方过滤插件调用。

Flume操作示例1
- 说明
- 本例子演示Flume通过采集集群内应用(比如网银系统)产生的日志到HDFS上。
- 数据准备
- 在集群某一个节点上创建日志目录/tmp/log_test。
- 该目录作为监控目录mkdir/tmp/log_test。
- 安装Flume客户端
- 登录MRSManager集群管理界面,下载Flume客户端。
- 解压客户端。
- 安装客户端。
- 配置Flume Source

- 配置Flume Channel

- 配置FlumeSink

- 将FlumeAgent的配置文件命名为properties.properties,并上传该配置文件。
- 向监控目录/tmp/log_test生产数据:
mv /var/log/log.11 /tmp/log_test
- 查看数据是否sink到HDFS:
hdfs dfs -ls /tmp/flume_avro
- 此时,log.11已被flume重命名为log.11.COMPLETED,表示已采集成功。
Flume操作示例2
- 说明
- 本例子演示Flume实时采集点击流日志到Kafka,用于后续的实时分析处理。
- 数据准备
- 在集群某一个节点上创建日志目录/tmp/log_click。
- 数据采集到Kafka topic_1028中。
- 配置Flume Source:

- 配置Flume Channel:

- 配置Flume Sink:

- 上传配置文件到Flume。
- 使用Kafka命令查看采集到Kafkatopic_1028的数据。
