Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。
apache flume
1、简介
Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。
2、组件
Agent主要由:source,channel,sink三个组件组成.
Source:从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等Channel:channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memory channel等.
sink:sink将数据存储到集中存储器比如Hbase和HDFS,它从channels消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.
3、HDFS Sink 配置
Flume HDFS Sink应该是非常常用的,其中的配置参数也比较多,
- path : 写入hdfs的路径,需要包含文件系统标识,比如:hdfs://namenode/flume/webdata/可以使用flume提供的日期及%{host}表达式。
- filePrefix : 默认值:FlumeData写入hdfs的文件名前缀,可以使用flume提供的日期及%{host}表达式。
- fileSuffix : 写入hdfs的文件名后缀,比如:.lzo .log等。
- inUsePrefix : 临时文件的文件名前缀,hdfs sink会先往目标目录中写临时文件,再根据相关规则重命名成最终目标文件;
- inUseSuffix : 默认值:.tmp临时文件的文件名后缀。
- rollInterval : 默认值:30hdfs sink间隔多长将临时文件滚动成最终目标文件,单位:秒;如果设置成0,则表示不根据时间来滚动文件;注:滚动(roll)指的是,hdfs sink将临时文件重命名成最终目标文件,并新打开一个临时文件来写入数据;
- rollSize: 默认值:1024当临时文件达到该大小(单位:bytes)时,滚动成目标文件;如果设置成0,则表示不根据临时文件大小来滚动文件;
- rollCount : 默认值:10当events数据达到该数量时候,将临时文件滚动成目标文件;如果设置成0,则表示不根据events数据来滚动文件;
- idleTimeout: 默认值:0当目前被打开的临时文件在该参数指定的时间(秒)内,没有任何数据写入,则将该临时文件关闭并重命名成目标文件;
- batchSize: 默认值:100每个批次刷新到HDFS上的events数量;
- codeC: 文件压缩格式,包括:gzip, bzip2, lzo, lzop, snappy
- fileType: 默认值:SequenceFile文件格式,包括:SequenceFile, DataStream,CompressedStream当使用DataStream时候,文件不会被压缩,不需要设置hdfs.codeC;当使用CompressedStream时候,必须设置一个正确的hdfs.codeC值;
- maxOpenFiles : 默认值:5000最大允许打开的HDFS文件数,当打开的文件数达到该值,最早打开的文件将会被关闭;
- minBlockReplicas : 默认值:HDFS副本数写入HDFS文件块的最小副本数。该参数会影响文件的滚动配置,一般将该参数配置成1,才可以按照配置正确滚动文件。待研究。
- writeFormat : 写sequence文件的格式。包含:Text, Writable(默认)
- callTimeout : 默认值:10000 执行HDFS操作的超时时间(单位:毫秒);
- threadsPoolSize : 默认值:10hdfs sink启动的操作HDFS的线程数。
- rollTimerPoolSize : 默认值:1hdfs sink启动的根据时间滚动文件的线程数。
- kerberosPrincipal : HDFS安全认证kerberos配置;
- kerberosKeytab : HDFS安全认证kerberos配置;
- roundm :默认值:false是否启用时间上的”舍弃”,这里的”舍弃”,类似于”四舍五入”,后面再介绍。如果启用,则会影响除了%t的其他所有时间表达式;
- roundValue : 默认值:1时间上进行“舍弃”的值;
- roundUnit : 默认值:seconds时间上进行”舍弃”的单位,包含:second,minute,hour 示例:a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%Sa1.sinks.k1.hdfs.round = truea1.sinks.k1.hdfs.roundValue = 10a1.sinks.k1.hdfs.roundUnit = minute当时间为2015-10-16 17:38:59时候,hdfs.path依然会被解析为:/flume/events/20151016/17:30/00因为设置的是舍弃10分钟内的时间,因此,该目录每10分钟新生成一个。
- timeZone : 默认值:Local Time时区。
- useLocalTimeStamp : 默认值:flase是否使用当地时间。
- closeTries : 默认值:0hdfs sink关闭文件的尝试次数;如果设置为1,当一次关闭文件失败后,hdfs sink将不会再次尝试关闭文件,这个未关闭的文件将会一直留在那,并且是打开状态。设置为0,当一次关闭失败后,hdfs sink会继续尝试下一次关闭,直到成功。
- retryInterval : 默认值:180(秒)hdfs sink尝试关闭文件的时间间隔,如果设置为0,表示不尝试,相当于于将hdfs.closeTries设置成1.
- serializer : 默认值:TEXT序列化类型。其他还有:avro_event或者是实现了EventSerializer.Builder的类名。