Kafka与Flume

  Kafka和Flume都是日志系统。Kafka是分布式消息中间件,自带存储,提供push和pull存取数据功能。Flume是管道流方式,分为agent(数据采集器),collector(数据简单处理和写入),storage(存储器)三部分,每一部分都是可以定制的。比如agent采用RPC(Thrift-RPC)、text(文件)等,storage指定用HDFS做。Kafka做日志缓存应该是更为合适的,但是 Flume的数据采集部分做的很好,可以定制很多数据源,减少开发量。目前比较流行Flume+Kafka模式。

  • Kafka是一个非常通用的系统,可以有许多生产者和很多的消费者共享多个主题Topics。相比之下,Flume是一个专用工具被设计为旨在往HDFS,HBase发送数据。它对HDFS有特殊的优化,并且集成了Hadoop的安全特性。所以如果数据被多个系统消费的话,使用Kafka;如果数据被设计给Hadoop使用,使用Flume。
  • Flume可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。Kafka需要外部的流处理系统才能做到。
  • Kafka和Flume都是可靠的系统,通过适当的配置能保证零数据丢失。然而,Flume不支持副本事件。于是,如果Flume代理的一个节点奔溃了,即使使用了可靠的文件管道方式,也将丢失这些事件直到恢复这些磁盘。如果需要一个高可靠行的管道,那么使用Kafka是个更好的选择。

问题:日志处理为什么要同时使用Flume和Kafka,是否可以只用Kafka 不使用Flume?
当时想到的就只用Flume的接口多,不管是输入接口(socket 和 文件)以及输出接口(Kafka/HDFS/HBase等)。考虑到现有系统业务发展,为了后面的灵活扩展,在系统设计时留有一定的扩展性感觉更重要。可能使用Flume+kafka架构相对只使用Kafka会多占用1-2台机器做Flume日志采集,但是为了方便以后日志数据处理方式的扩展,可以采用Flume+kafka架构。

  Flume :管道 ----个人认为比较适合有多个生产者场景,或者有写入Hbase、HDFS和Kafka需求的场景。
  Kafka :消息队列-----由于Kafka是Pull模式,因此适合有多个消费者的场景。

你可能感兴趣的:(Flume)