为什么我们需要kafka将数据提供给apache spark

Waq*_*med 9 streaming apache-kafka apache-spark spark-streaming

我正在阅读spark和它的real-time stream处理.我很困惑,如果spark本身可以读取来自Twitter文件等来源的流,那么为什么我们需要kafka提供数据spark?如果有人介绍我,我们得到了什么好处,如果我们使用这将是巨大的sparkkafka.谢谢.

Sön*_*bau 8

Kafka提供输入流的解耦和缓冲.

以Twitter数据为例,afaik连接到twitter api并获得与您指定的标准匹配的不断推文.如果你现在关闭你的Spark作业一小时对你服务器上的一些好处或推出一个新版本,那么你将错过那个小时的推文.

现在假设你把Kafka放在你的Spark作业面前,并且拥有一个非常简单的摄取线程,除了连接到api并将推文写入Kafka,Spark作业从中检索它们.由于Kafka将所有内容保留到光盘,因此您可以关闭处理作业,执行维护,重新启动后,它们将从脱机时检索所有数据.

此外,如果您以显着的方式更改处理作业并希望重新处理上周的数据,如果您的链中有Kafka(如果您将保留时间设置得足够高),则可以轻松地执行此操作 - 您只需滚动完成新工作并更改Kafka中的偏移量,以便您的工作重新读取旧数据,一旦完成,您的数据存储将与您的新处理模型保持同步.

关于卡夫卡背后的人之一Jay Kreps撰写的一般原则,有一篇很好的文章,如果你想了解更多信息,可以阅读.