http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.15.1/FlumeUserGuide.html
简介
Flume
是一个分布式的、可靠的、高可用的海量日志采集、聚合和传输系统。它的数据流模型为Source -> Channel -> Sink
,其事务机制保证消息传递的可靠性。
Event
:消息的基本单位,由header
和body
组成Agent
:JVM 进程,负责将一端外部来源产生的消息转发到另一端外部的目的地Source
:从外部来源读入event
,并写入channel
Channel
:event
暂存组件,source
写入后,event
将会一直保存,直到被Sink
成功消费Sink
:从channel
读入event
,并写入目的地
组件
Source 组件
对接各种外部数据源,将收集到的event
发送到 channel
中,一个 source
可以向多个 channel
发送 event
,Flume
内置非常丰富的 Source
,同时用户可以自定义 Source
Avro Source
Exce Source
Taildir Source
Kafka Source
只能接受新的消息,已存在的消息无法接收
Channel 组件
- 被设计为
event
中转暂存区,存储Source
收集但还没被Sink
消费的event
,为了平衡Source
收集和Sink
读取速度,可视为Flume
内部的消息队列 - 线程安全的并且具有事务性,支持
Source
写失败重复写和Sink
读失败重复读操作
Memory Channel
File Channel
Kafka Channel
Interceptor 拦截器
Timestamp Interceptor
Host Interceptor
Static Interceptor
Sink 组件
Avro Sink
HDFS Sink
Kafka Sink
Selector 选择器
Replicating Channel Selector
Multiplexing Channel Selector
Sink Processor
Load-Balancing Sink Processor
Failover Sink Processor
应用
聚合
将运行在多台机器上的 Flume Agent
聚合到一台机器上。
容错处理
设置 Sink Processors
类型为 failover
,将 channel
有优先级的输出到不同的 Sink
,这样每个 Sink
连接的 Agent
就是不同的数据通道,保证高可用
QA
Flume 优化
- Source
- TailDir
- 增加 filegroup 个数,增加数据采集并行度
- batchSize:Source -> Channel 的个数(参考1万-5万)
- TailDir
- Channel
- Memory
- File
- 多个盘符、磁盘要求高
- capacity:当前 Channel 能存的最大 event
- transactionCapacity:从 Source 取或者输出到 Sink 的event 最大数
- Source/Sink:batchSize 要比 transactionCapacity 小
- Sink
- 多个 Sink 增加吞吐量;但每个 Sink 后会再跟 Agent 进程,增大开销
Flume Agent
必须先保证 failover
,若机器资源还有结余再增加 load_balance
Flume 监控
只监控 channel 的状态即可。
- JMX Reporting
- Ganglia
- JSON Reporting