Flume是一个高可用,高可靠,分布式的海量日志采集聚合和传输系统,核心是把数据从数据源(source)收集,并把收集的数据发送到目的地(sink),为了保证传输成功,在送到目的地之前会先缓存(channel)数据,在真正到达目的地后,再删除缓存
overview
flume-overviewsources
- avro/thrift/exec/JMS/spooldir/kafka/Netcat/syslog/...
sink
- hdfs/hive/avro/thrift/irc/hbase/elasticsearch/kafka/http/....
channel
- memory/JDBC/kafka/file/pseudo...
当配置source为spooldir时,如果同一个文件被采集两次,flume会抛异常,并停止工作
load-balance
flume-lb通过客户端agent1配置负载均衡策略,三台服务器会负载客户端的日志上传,如果有一台down机,流量由其他两台进行负载
failover/ha
flume-lb通过客户端agent1配置高可用策略,会对三台服务器设置优先级,优先级最高的会take全部traffic,如果down机,会由次优先级的机器take全部traffic
拦截器
flume-difflog用同一个客户端agent读取多个源,通过设置源的头部,可以在服务器agent中区分不同的log,并写入不同的目的地
异常
丢数据
-
事务机制
对于source,一旦事务所有时间传送到channel,会把源标志位已完成,从channel到sink也是类似的
-
at-least-once
保证至少一次提交到sink,会引起重复数据
-
批处理
通过设置源的batchsize,以事务为单位处理时间,一个事务包含多个事件,这有利于提高读源的效率
-
channel
memory channel可以实现高吞吐,但无法保证数据完整性
File channel可以保存到file中,可以保证数据的完整和一致性,但会降低效率
exec tail -f/memory channel会造成数据丢失
数据重复
tailDir source/hdfs sink会存在数据重复,不会丢失数据
网友评论