1 定义
Flume是Cloudera提供的一个高可用的,高牢靠的,分布式的海量日志采集、聚合和传输的零碎。Flume基于流式架构,灵便简略。
2 flume根底框架
2.1 Agent
Agent是一个JVM过程,它以事件的模式将数据从源头送至目标。
2.2 Source
Source是负责接收数据到Flume Agent的组件。Source组件能够解决各种类型、各种格局的日志数据,包含avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。
2.3 Sink
Sink一直地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引零碎、或者被发送到另一个Flume Agent。
Sink组件目的地包含hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义。
2.4 Channel
Channel是位于Source和Sink之间的缓冲区。因而,Channel容许Source和Sink运作在不同的速率上。Channel是线程平安的,能够同时解决几个Source的写入操作和几个Sink的读取操作。
Flume自带两种Channel:Memory Channel和File Channel。
Memory Channel是内存中的队列。Memory Channel在不须要关怀数据失落的情景下实用。如果须要关怀数据失落,那么Memory Channel就不应该应用,因为程序死亡、机器宕机或者重启都会导致数据失落。
File Channel将所有事件写到磁盘。因而在程序敞开或机器宕机的状况下不会失落数据。
2.5 Event
传输单元,Flume数据传输的根本单元,以Event的模式将数据从源头送至目的地。Event由Header和Body两局部组成,Header用来寄存该event的一些属性,为K-V构造,Body用来寄存该条数据,模式为字节数组。
2.6 Interceptors
在Flume中容许应用拦截器对传输中的event进行拦挡和解决!拦截器必须实现org.apache.flume.interceptor.Interceptor接口。拦截器能够依据开发者的设定批改甚至删除event!Flume同时反对拦截器链,即由多个拦截器组合而成!通过指定拦截器链中拦截器的程序,event将依照程序顺次被拦截器进行解决!
2.7 Channel Selectors
Channel Selectors用于source组件将event传输给多个channel的场景。罕用的有replicating(默认)和multiplexing两种类型。replicating负责将event复制到多个channel,而multiplexing则依据event的属性和配置的参数进行匹配,匹配胜利则发送到指定的channel!
2.8 Sink Processors
用户能够将多个sink组成一个整体(sink组),Sink Processors可用于提供组内的所有sink的负载平衡性能,或在工夫故障的状况下实现从一个sink到另一个sink的故障转移。