区别:
- Flume (Apache 日志收集系统),主要功能就是收集同步数据源的数据,并将数据保存到持久化系统中,适合数据来源比较广,数据收集结构比较固定的场景;
- Kafka (Apache 分布式消息系统),主要是作为一个中间件系统的方式存在,适合高吞吐量和负载的情况,可以作为业务系统中的缓存、消息通知系统、数据收集等场景。
为什么还需要Flume作为日志收集系统?
- 主要原因:Kafka 需要进行一些额外的开发,Flume 可以直接使用 Sink 将数据保存;
- 次要原因:对于不需要高并发的业务场景,Flume 足够使用,而且Flume对于机器的性能要求低于 Kafka 的。
企业应用中,一般不用Flume直接与SparkStreaming或Flink集成,原因如下:
(1)Flume 的 Sink 端直接和流式系统对接(连接到 SparkStreaming 或 Flink等),一旦流式系统挂了,则 sink 端中断,而 source 端仍源源不断地产生答大量的数据,会产生数据堆积,引发系统瘫痪;
(2)Flume 中间缓存可以选择 MemChannel,也可以选择FileChannel,流式系统中要求实时性比较高,要求低延特别迟,那 Flume 中的 channel 则需要使用 MemChannel。内存中缓存数据,缓存量特别小,而且不可靠(Flume 是单机式的,一旦挂机,则数据容易丢失)。
一般会用Kafka与SparkStreaming或Flink集成。
(1)数据保存在磁盘上,速度很快,能保证流式计算的实时性要求;
(2)一旦流式系统挂了,Kafka 可以有效将大量数据接收下来 ,磁盘空间大,可扩展性强。
在 Kafka 对接流式系统之前,通常会对接 Flume。
Flume 作为 Kafka 的生产者,好处在于:零编程。Flume 可以提供很多的 source 源,可以对 source 源进行一系列优化,比如:断点续存,如果自己写生产者代码,编码相对较难,Flume 可以提供解决方案。
所以一般使用:Flume(提供数据源) + Kafka(解决sink端挂机问题) +流式系统。
版权声明:本文为weixin_44196083原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。