我正在阅读关于spark
及其real-time stream
处理的内容。我很困惑,如果spark
本身可以从源代码中读取流,例如 twitter 或文件,那么为什么我们需要kafka
将数据提供给spark
?如果有人向我解释,如果我们将spark
与kafka
一起使用,那将会很有用。谢谢。
答案 0 :(得分:6)
Kafka提供输入流的解耦和缓冲。
以Twitter数据为例,afaik连接到twitter api并获得与您指定的标准匹配的连续推文。如果你现在关闭你的Spark作业一小时对你服务器上的一些好处或推出一个新版本,那么你将错过那个小时的推文。
现在想象一下你把Kafka放在你的Spark作业面前,并且有一个非常简单的摄取线程,除了连接到api并将推文写入Kafka,Spark作业从中检索它们。由于Kafka将所有内容保留到光盘,因此您可以关闭处理作业,执行维护以及重新启动时,它们将从脱机时检索所有数据。
此外,如果您以显着的方式更改处理作业并希望重新处理上周的数据,如果您的链中有Kafka(如果您将保留时间设置得足够高),则可以轻松地执行此操作 - 您' d只需简单地推出新工作并更改Kafka中的偏移量,以便您的工作重新读取旧数据,一旦完成,您的数据存储将与您的新处理模型保持同步。
卡夫卡背后的人之一Jay Kreps所写的一般原则有一个good article,如果你想了解更多的话就给你一个阅读。
答案 1 :(得分:0)
卡夫卡将所有东西分离,消费者 - 生产者不必彼此了解。 Kafka提供基于主题的pub-sub模型。
您可以从多个来源将数据(消息)写入kafka中的任何主题,而消费者(spark或任何内容)可以根据主题使用数据。
多个消费者可以使用来自同一主题的数据,因为kafka会在一段时间内存储数据。
但最后,如果你真的需要一个经纪人,这取决于你的用例。