什么是Flume
Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIXtail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
Flume采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知FlumeMaster节点。FlumeMaster间使用gossip协议同步数据。
Flume支持可靠性、伸缩性、配置一致性、扩展性。
可靠性:Flume提供3中数据可靠性选项,包括End-to-end、Storeonfailure和Besteffort。其中End-to-end使用了磁盘日志和接受端Ack的方式,保证Flume接受到的数据会最终到达目的。Storeonfailure在目的不可用的时候,数据会保持在本地硬盘。和End-to-end不同的是,如果是进程出现问题,Storeonfailure可能会丢失部分数据。Besteffort不做任何QoS保证。
伸缩性:Flume的3大组件:collector、master和storagetier都是可伸缩的。需要注意的是,Flume中对事件的处理不需要带状态,它的伸缩性可以很容易实现。
配置一致性:Flume利用ZooKeeper和gossip,保证配置数据的一致性、高可用。同时,多Master,保证Master可以管理大量的节点。
扩展性:基于Java,用户可以为Flume添加各种新的功能,如通过继承Source,用户可以实现自己的数据接入方式,实现Sink的子类,用户可以将数据写往特定目标,同时,通过SinkDecorator,用户可以对数据进行一定的预处理。
Master:用于管理数据流的配置。
Agent:负责收集数据。
Collector:用于对数据进行聚合。
Source:数据源。每一个Agent,Collector都可以有一个数据源。
Sink:输出端。每一个Agent,Collector都可以有一个输出端。
FlumeMaster:可以配置多Master,利用Zookeeper来实现HA。
Flumenode:node对应俩种角色Agent,Collector当集群比较大规模需要配置角色。