flume简介
flume是Cloudera提供的高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。基于流式架构
我下载的最新的flume,为1.9.0版本
1 | flume-ng version |
下载之后修改flume-env.sh中的JAVA_HOME即可
Flume是由一个个的Agent组成的,Flume NG主要由事件源(Source)、通道(Channel)和接收器(Sink)3个组件组成,由3个组件组成一个代理Agent,一个Flume代理可能包括多个事件源、通道和接收器。
名词解释
事件Event
Flume将一个具有有效负荷的字节数据流和可选的字符串属性集称为事件,一个事件由Header和Body两部分组成,Header中存放event的一些属性,Body用于存放该条数据,形式为字节数组,事件是Flume数据传输的基本单位。
事件源Source
事件源就是负责从数据源采集数据将事件发送到一到多个通道中,是数据流入的入口。常见事件源有文件、网络、数据库、kafka等,官网上列举出来了很多的事件源,而且还可以自定义事件源,不过一般情况下不需要进行自定义
通道Channel
通道负责将事件源流入的数据进行聚合、暂存,通常数据在通道停留的时间不会太长,是位于事件源与接收器之间的构件。通道主要包括非持久性通道(如内存通道Memory Channel)与持久化通道(如文件通道File Channel、数据库JDBC Channel)
对于通道来说还有一个通道的选择器,官方提供了两种选择器,Replicating Channel Selector和Multiplexing Channel Selector,默认使用的是replicating,replicating会将sources中发过来的事件发给所有的channel,Multiplexing可以来配置将事件发给某些channel
1 | r1 = |
接收器Sink
接收器负责从通道消费数据,将数据转移到其他存储系统,例如将数据存储到文件、数据库、HDFS、Kafka、HBase等,官网上列举出来了很多的接收器,而且还可以自定义接收器,不过一般情况下不需要进行自定义
sink还有一个sink组的概念