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由HeaderBody两局部组成,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的故障转移。