Flume 是 Cloudera提供的一个高可用、高可靠的分布式海量日志采集、聚合及传输的系统,它是一种基于流式数据流的简单易用的架构,具体架构图如下,
Flume有两个主要版本-Flume OG和Flume NG。Flume OG(original generation)是Flume的初始版本,属于Cloudera,但随着功能扩展,Flume OG代码工程臃肿,核心组件设计不合理等缺点暴露出来,为解决这些问题,Cloudera对Flume进行了重构,重构后的版本统称为Flume NG(next generation),改动的另一个原因是将Flume纳入Apache下,cloudera Flume改名为Apache Flume。上面的架构图其实是Flume NG的架构图~
下面介绍Flume(Flume-NG)中几个基本概念,
1 Event - Flume中数据传输的基本单元,Flume以事件的形式将数据从源头传送到最终目的。Event由一个字节类型的主体(payload)和一些可选的属性(headers)组成。Event可以是日志数据,avro对象等格式。
2 Agent - Agent是一个JVM进程,其中包含Source、Channel、Sink和其他组件,它利用这些组件将Event从一个节点传输到另一个节点或最终目的。每个节点一个Agent,但一个Agent中可以包含多个Source和Sink。Agent是Flume最小的独立运行单元。
3 Source - Source负责接收Event,并将Event批量的放到一个或多个Channel,有Event驱动或轮询2种类型的Source。
4 Channel - Channel位于Source和Sink之间,用于缓存进来的Event,当Sink成功将Event发送到下一跳的Channel或最终目的,Event从Channel中移除。
5 Sink - Sink负责将Event传输到下一跳或最终目的,成功后Event将从Channel中移除。
6 Client - 生产数据。
Flume提供大量内置的Source、Channel和Sink,不同的类型可以自由组合,组合方式基于用户配置的Flume配置文件,非常灵活。下图是一种可能的配置,具体有哪些内置的Soure、Channel和Sink,可参考官方文档:http://flume.apache.org/FlumeUserGuide.html