Flume 主要由三个重要的组件构成:
Source :完成对日志数据的收集,分成transtion 和 even 打入到 channel 中。
Channel :主要提供一个队列的功能,对 source 提供中的数据进行简单的缓存。
Sink:取出 channel 中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。
简单点:
Source:收集信息
Channel:传递信息
Sink:存储信息
关于什么是 flume:http://www.aboutyun.com/thread-7949-1-1.html
关于什么是 flume 三组件:http://www.aboutyun.com/thread-7415-1-1.html
Flume 是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统
Flume 的逻辑结构
Flume 逻辑上分三层架构:
Agent,collector,storage
Agent
用于采集数据,agent 是 flume 中存储数据流的地方,同时 agent 会将产生的数据传输到 collector
Coolector
Collector 的作用是坚多个 agent 的数据汇总后,加载到 storage 中,多个 collector 之间遵循负载均衡规则
Storage
Storage 是存储系统,可以是一个普通 file,也可以是 HDFS,HIVE,Hbase 等。
Master
Master 是管理协调 agent 和 collector 的配置等信息,是 flume 集群的控制器。
在 flume 中,最重要的抽象是 data flow (数据流),data flow 描述了数据从生产,传输、处理并追踪写入目标的一条路径。
补充说明
多个 collector 能够增加日志收集的吞吐量,提高 collector 的有效性能够提高数据的传输速度,数据的收集是可并行的,此外,来自多个 agent 的数据能够分配到多个 collector 上加载。
多collector下agent的划分
前 面的图展示flume节点典型的拓扑结构和数据流,为了可靠的传输,当collector停止运行或是失去与agents的联系的时候,agents将会 存储他们的events在各自的本地硬盘上,这些agents试图重新连接collector,因为collector的宕机,任何处理和分析的数据流都 被阻塞。
当你有多个collector如上图所示,即使在collector宕机的情况下,数据处理仍然能够进行下去,如果 collector b 宕机了,agent a,agent b,ageng e,和agentf会分别继续传送events通过collector a 和collector c,agent c 和agent d 的不得不排在其他agent的后面等待日志的处理直到collector b重新上线。
接下来的配置划分agents在多collector,这个例子是每一个collector由同一个输出的dfs路径和文件的前缀名,聚合所有的日志到同一个目录下
agentA : src |agentE2ESink("collectorA",35853);
agentB : src |agentE2ESink("collectorA",35853);
agentC : src |agentE2ESink("collectorB",35853);
agentD : src |agentE2ESink("collectorB",35853);
agentE : src |agentE2ESink("collectorC",35853);
agentF : src |agentE2ESink("collectorC",35853);
collectorA : collectorSource(35853) |collectorSink("hdfs://...","src");
collectorB : collectorSource(35853) |collectorSink("hdfs://...","src");
collectorC : collectorSource(35853) |collectorSink("hdfs://...","src");
当多个collector写入到相同的存储位置时,你可以设置agent c agent d 当他们的collector出现错误时转向其他的collector,可以分别设置agent c 和agent d 转移到collectora 和collector c 上。
用agents的failover chains。和指向单独的collector(agentSink)类似,failover chains也有三个可靠性的级别agentE2EChain,agentDFOChain, and agentBEChain.
下 面的例子,手动设置失败转移链表用agentE2EChain,有多个失败转移collector的agent的end-to-end的可靠性级 别,agentA默认的将数据发送到collectorAd端口35853,第二个参数在agentA ‘s sink是指定备用的collector。你可以定义任意数量的collector,(至少一个以上)。
agentA : src |agentE2EChain("collectorA:35853","collectorB:35853");
agentB : src |agentE2EChain("collectorA:35853","collectorC:35853");
agentC : src |agentE2EChain("collectorB:35853","collectorA:35853");
agentD : src | agentE2EChain("collectorB:35853","collectorC:35853");
agentE : src |agentE2EChain("collectorC:35853","collectorA:35853");
agentF : src |agentE2EChain("collectorC:35853","collectorB:35853");
collectorA : collectorSource(35853) |collectorSink("hdfs://...","src");
collectorB : collectorSource(35853) |collectorSink("hdfs://...","src");
collectorC : collectorSource(35853) |collectorSink("hdfs://...","src");
注意:这章中,agent[A-F] 和 collector[A-B] 是物理节点的名字
注意:自动失败转移链表功能还不能用在多master的集群。
Flume的特性
• Reliability:Flume提供3中数据可靠性选项,包括End-to-end、Store on failure和Best effort。其中End-to-end使用了磁盘日志和接受端Ack的方式,保证Flume接受到的数据会最终到达目的,但是效率是最差的。Store on failure在目的不可用的时候,数据会保持在本地硬盘,效率会比end-to-end高,但是会出现日志丢失的情况。Best effort不做任何QoS保证,效率最高,日志记录没有保证。
• Scalability:Flume的3大组件:collector、master和storage tier都是可伸缩的。需要注意的是,Flume中对事件的处理不需要带状态,它的Scalability可以很容易实现。
• Manageability:master能够动态管理flume集群节点,多master情况,Flume利用ZooKeeper和gossip,保证配置数据的一致性。
• Extensibility:基于Java,用户可以为Flume添加各种新的功能,如通过继承Source,用户可以实现自己的数据接入方式,实现 Sink的子类,用户可以将数据写往特定目标,同时,通过SinkDecorator,用户可以对数据进行一定的预处理。
注:Flume框架对hadoop和zookeeper的依赖只是在jar包上,并不要求flume启动时必须将hadoop和zookeeper服务也启动。
参考:
http://www.cnblogs.com/yepei/p/4764012.html
Flume 配置文件的参考文档:
http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050443.html
http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050461.html