一、Flume使用场景:
线上数据一般主要是落地(存储到磁盘)或者通过socket传输给另外一个系统,这种情况下,你很难推动线上应用或服务去修改接口,实现直接向kafka里写数据,这时候你可能就需要flume这样的系统帮你去做传输。
二、Flume的体系架构:
1、source:用于采集数据,souce是产生数据流的地方,同时将source会将数据流传输到channel,这点类似于java io部分的channel。
2、channel:用于桥接sources和sinks,类似于队列。
3、sink:从channel收集数据,将数据写到目标源,可以是下一个source或则HDFS或则HBase。
三、Flume与Kafka的选取:
1、Flume是一种管道流方式,提供很多默认的实现,让用户通过参数部署及扩展API。
2、Kafka:是一种可持久化的分布式消息队列。
3、如果数据被多个系统消费,建议使用kafka,如果数据被设计给Hadoop,使用Flume。
4、Flume可以自定义拦截器对数据屏蔽或过量是很有用的,Kafka需要外部的流处理系统才能做到。
5、Flume不支持副本事件,如果Flume代理节点崩溃了,即使用了可靠的文件管理方式,可以恢复丢失的这些事件。
6、Flume采集数据到Kafka:自定义Flume的sink组件,将数据从channel中取出,通过kafka的producer写入到Kafka中,可以自定义分区。
四、Flume与Kafka采集日志区别:
1、Flume采集日志是通过流的方式直接将日志收集到存储层,而kafka是将数据缓存在kafka集群,待后期可以采集到存储层。
2、Flume采集中间停了,可以采用文件的方式记录之前的日志,而kafka是采用offset的方式记录之前的日志。
更多文章见: