Flume OG
Flume OG主要由上图几个组件组成:
Agent、Collector、Master、HDFS
Agent:
主要用于采集数据,通常是由source和sink两部分组成。其中Source用于获取数据,Sink将Source获取的数据传输到Collector。
Collector:
主要用于汇总多个Agent传输的结果数据,将汇总的数据导入后台的存储系统,如HDFS,HBase。与Agent类似,它也由Source用于获取Agent传输的数据,Sink将Source获取的数据传输到存储系统。
Master:
主要用于管理协调Agent和Collector的配置信息,是整个Flume集群的控制器,master平衡集群中各个Collector之间的负载,通知Agent数据流的结果信息,为了防止单点故障,我们通常借助ZooKepper管理多个Master节点。
Flume的容错机制:
Flume支持两种容错的机制
1、存储数据到多个Collector
2、配置备用Collector,当Agent发送数据流到Collector_A,Collector_A挂掉时,数据会发送到备用的Collector_B,如果存储系统故障时,数据会保存到本地的Collector节点上,在存储系统恢复后再发送至存储系统。
Flume NG
Flume NG主要由Event、Client、Agent组成
Event:
它是Flume数据传输的基本单元,它贯穿Flume的整个流程中。它由可选的Header和一个装有数据的ByteArray组成。Header中是由一个个KeyValue对的数据构成的,大小不固定可以扩展。
Client:
主要用于将原始的Log文件包装为一个或多个Event,发送到一个或多个Agent中。
Agent:
主要用于传输数据,由Source、Channel、Sink和其他组件组成。Agent中的各个组件将Event从一个Agent传输到下一个Agent,一直传输到存储系统中。它是Flume的核心,我们可以通过设计不同的Agent来完成各种不同情况的日志收集。Flume用于配置、监控各个Agent。
Agent中的各个组件:
Source:负责接收Event,并将Event放到一个或多个Channel
Channel:在Source和Sink之间,用于缓存Event,当Sink成功后删除缓存的Event,一个Channel可以服务与多个Source和Sink。(Channel可以有多种实现,如:memory、file、JDBC)
Sink:负责针Event传输到下一个Source或存储系统,一个Sink必须对应一个Channel
Interceptor:作用于Source,按照预设的顺序在必要地方装饰和过滤Event
ChannelSelector:作用于Source,通过配置可以从所有Channel中选择一个或多个Channel
SinkProcessor:从个Sink可以构成一个SinkGroup,它可以通过Group中所有Sink实现负载均衡。