转自:https://ask.hellobi.com/question/13741,
http://www.cnblogs.com/lishouguang/p/4560858.html
http://www.open-open.com/lib/view/open1435884136903.html
http://www.cnblogs.com/ibyte/p/5830715.html
http://blog.csdn.net/a2011480169/article/details/51544664 flume
http://www.infoq.com/cn/articles/kafka-analysis-part-1/ kafka
flume是海量日志采集、聚合和传输的日志收集系统,kafka是一个可持久化的分布式的消息队列。Flume可以使用拦截器实时处理数据,对数据屏蔽或者过滤很有用,如果数据被设计给Hadoop使用,可以使用Flume,重在数据采集阶段。
集和处理数据不一定同步,所以用kafka这个消息中间件来缓冲,重在数据接入。在一些实时系统中一般采用flume+kafka+storm的设计
当你只想进行日志的收集工作时,可直接用flume。如果你收集了日志后,想输出到多个业务方,则可结合kafka。kafka是消息队列,可支持多个业务来读取数据。由于前端一般都会做负载均衡,所以日志源会有多个,而公司可能只有一个统一的实时计算平台。所以在这个中间一般都会采用消息队列来缓存。
Flume适用场景
Flume被设计用来传输、提取定期生成的数据的,这些数据是传输在相对稳定的、可能是复杂的拓扑结构上的。每个数据就是一个event。“event data”的概念是非常广泛的。对于Flume而言,一个event就是一个blob字节数据。这个event的大小是有限制的,例如,不能大于内存或硬盘或单机可以存储的大小。事实上,flume的event可以是任何东西,从日志文本到图片文件。Event的关键点是不断生成、流式的。如果你的数据不是的定期生成的(比如一次性的向Hadoop集群导入数据),Flume可以工作,但是有点杀鸡用牛刀了。Flume喜欢相对稳定的拓扑结构。你的拓扑结构不必是不可改变的,因为Flume可以在不丢失数据的前提下处理拓扑结构的改变,并且能容忍由于故障转移导致的周期性的重新配置。但如果你每天都要改变拓扑结构,那么Flume将不能很好的工作,因为重新配置会产生开销。
简而言之,有两点:
1、数据。数据是定期生成的。
2、网络拓扑相对稳定。
区别
Kafka、Flume都可以实现数据的传输,但它们的侧重点不同。
Kafka追求的是高吞吐量、高负载(topic下可以有多个partition)
Flume追求的是数据的多样性:数据来源的多样性、数据流向的多样性
如果数据来源很单一、想要高吞吐的话可以使用Kafka
如果数据来源很多、数据流向很多的话可以使用Flume
考虑单一应用场景,从简化系统的角度考虑,在满足应用需求的情况下可能只使用一个比较好。但是考虑到现有系统业务发展,为了后面的灵活扩展,在先用系统设计时留有一定的扩展性感觉更重要,可能使用Flume+kafka架构相对只使用Kafka会多占用1-2台机器做Flume日志采集,但是为了方便以后日志数据处理方式的扩展,可以采用Flume+kafka架构。
Flume :管道 —-个人认为比较适合有多个生产者场景,或者有写入Hbase、HDFS和kafka需求的场景。
Kafka :消息队列—–由于Kafka是Pull模式,因此适合有多个消费者的场景。