日志采集系统flume和kafka有什么区别及联系,它们分别在什么时候使用,什么时候又可以结合? - 晓鹰的回答 - 知乎
https://www.zhihu.com/question/36688175/answer/68692597
很凑巧,都用过这两个系统。
简言之:这两个差别很大,使用场景区别也很大。
先说flume:
日志采集。线上数据一般主要是落地文件或者通过socket传输给另外一个系统。这种情况下,你很难推动线上应用
或服务去修改接口,直接向kafka里写数据。这时候你可能就需要flume这样的系统帮你去做传输。
对于数量级别,做过单机upd的flume source的配置,100+M/s数据量,10w qps flume就开始大量丢包。因此我们
在搭建系统时,抛弃了flume,自己研发了一套传输系统。但flume设计的source-channel-sink模式还是比较好的,
我们在开发系统时无耻的也抄袭了这种方式。
Kafka:
我个人觉得kafka更应该定位为中间件系统。LinkedIn开发这个东西目的也是这个初衷。可以理解为一个cache系
统。你甚至可以把它理解为一个广义意义的数据库,里面可以存放一定时间的数据。kafka设计使用了硬盘append
方式,获得了非常好的效果。我觉得这是kafka最大的亮点。不同系统之间融合往往数据生产/消费速率不同,这时
候你可以在这些系统之间加上kafka。例如线上数据需要入HDFS,线上数据生产快且具有突发性,如果直接上
HDFS(kafka-consumer)可能会使得高峰时间hdfs数据写失败,这种情况你可以把数据先写到kafka,然后从kafka
导入到hdfs上。印象中LinkedIn公司有这么用。
业界比较典型的一中用法是:
线上数据 -> flume -> kafka -> hdfs -> MR离线计算 或者:
线上数据 -> flume -> kafka -> storm
kafka怎么收集到flume的日志_百度知道
https://zhidao.baidu.com/question/491242771990823212.html
采集层 主要可以使用Flume, Kafka两种技术。
Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展API.
Kafka:Kafka是一个可持久化的分布式的消息队列。
Kafka 是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题Topics。相比之下,Flume是一个专用工具被设计为旨在往HDFS,HBase发送数据。它对HDFS有特殊的优化,并且集成了Hadoop的安全特性。所以,Cloudera 建议如果数据被多个系统消费的话,使用kafka;如果数据被设计给Hadoop使用,使用Flume。
正如你们所知Flume内置很多的source和sink组件。然而,Kafka明显有一个更小的生产消费者生态系统,并且Kafka的社区支持不好。希望将来这种情况会得到改善,但是目前:使用Kafka意味着你准备好了编写你自己的生产者和消费者代码。如果已经存在的Flume Sources和Sinks满足你的需求,并且你更喜欢不需要任何开发的系统,请使用Flume。
Flume可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。Kafka需要外部的流处理系统才能做到。
Kafka和Flume都是可靠的系统,通过适当的配置能保证零数据丢失。然而,Flume不支持副本事件。于是,如果Flume代理的一个节点奔溃了,即使使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。如果你需要一个高可靠行的管道,那么使用Kafka是个更好的选择。
Flume和Kafka可以很好地结合起来使用。如果你的设计需要从Kafka到Hadoop的流数据,使用Flume代理并配置Kafka的Source读取数据也是可行的:你没有必要实现自己的消费者。你可以直接利用Flume与HDFS及HBase的结合的所有好处。你可以使用Cloudera Manager对消费者的监控,并且你甚至可以添加拦截器进行一些流处理。
Flume和Kafka可以结合起来使用。通常会使用Flume + Kafka的方式。其实如果为了利用Flume已有的写HDFS功能,也可以使用Kafka + Flume的方式。