Flume

Posted by danner on May 2, 2017

http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.15.1/FlumeUserGuide.html

简介

Flume 是一个分布式的、可靠的、高可用的海量日志采集聚合传输系统。它的数据流模型为Source -> Channel -> Sink,其事务机制保证消息传递的可靠性

  • Event:消息的基本单位,由 headerbody 组成
  • Agent:JVM 进程,负责将一端外部来源产生的消息转发到另一端外部的目的地
    • Source:从外部来源读入 event,并写入 channel
    • Channelevent 暂存组件,source 写入后,event 将会一直保存,直到被Sink 成功消费
    • Sink:从 channel 读入 event,并写入目的地

组件

Source 组件

对接各种外部数据源,将收集到的event 发送到 channel 中,一个 source 可以向多个 channel 发送 eventFlume 内置非常丰富的 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万)
  • 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

参考资料

Flume 1.7 修复文件重命名后重复采集数据