Flume与Kafka区别与联系【学习笔记】

区别:

  • 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端挂机问题) + 流式系统。

你可能感兴趣的:(学习笔记)