我正在进行POC,以便在数据流上运行机器学习算法 我最初的想法是获取数据,使用
Spark Streaming - >来自多个表的聚合数据 - >在数据流上运行MLLib - >产生输出。
但我突然看到KStreams。现在我很困惑!
问题:
1. Spark Streaming和Kafka Streaming有什么区别?
2.我如何结合KStreams + Spark Streaming +机器学习?
我的想法是连续培训测试数据,而不是进行批量培训。
答案 0 :(得分:19)
首先,术语" Confluent的Kafka Streaming"在技术上是不正确的。
但是,Confluent为Apache Kafka贡献了大量代码,包括Kafka Streams。
关于差异(我只重点介绍一些主要差异,并参考互联网和文档以获取更多详细信息:http://docs.confluent.io/current/streams/index.html和http://spark.apache.org/streaming/)
Spark Streaming:
Kafka Streams
因此没有理由"结婚"两者 - 它是一个选择你想要使用的问题。
我个人认为,Spark不是一个很好的流处理解决方案。如果你想使用像Kafka Streams这样的库或像Apache Flink,Apache Storm或Apache Apex这样的框架(它们都是流处理的好选择)取决于你的用例(也许是个人品味)而无法在SO上回答
Kafka Streams的一个主要区别是,它是一个库,不需要处理集群。因为它是Apache Kafka的一部分,如果您已经安装了Apache Kafka,这可能会简化您的整体部署,因为您不需要运行额外的处理集群。
答案 1 :(得分:3)
Apache Kafka Steams是一个库,提供了可嵌入的流处理引擎,它很容易在Java应用程序中用于流处理,而且它不是一个框架。
我从Kafka作者那里找到了一些关于when to use Kafka Streams和好comparison with Apache flink的用例。
答案 2 :(得分:2)
我最近在一个关于这个主题的会议上发表过演讲。
Apache Kafka Streams或Spark Streaming通常用于通过流处理(流程中的流程数据)将机器学习模型实时应用于新事件。马蒂亚斯的回答已经讨论了他们的不同之处。
另一方面,首先使用Apache Spark MLlib(或H2O.ai或XYZ)之类的东西,首先使用历史数据集构建分析模型。
Kafka Streams也可以用于模型的在线培训。虽然,我认为在线培训有各种警告。
我的幻灯片“Apache Kafka Streams and Machine Learning / Deep Learning for Real Time Stream Processing”中详细讨论了所有这些。
答案 3 :(得分:1)
从流处理的角度来看,在一张图片中Spark Streaming 和 KStreams 。
此处突出显示了Spark Streaming和KStreams的重要优势/卖点,以简化答案。