我正在做一个 POC,用于在数据流上运行机器学习算法。
我最初的想法是获取数据,使用
Spark Streaming --> 从多个表中聚合数据 --> 在数据流上运行 MLLib --> 生成输出。
但我遇到了 KStreams。现在我很困惑!
问题:
1. Spark Streaming 和 Kafka Streaming 有什么区别?
2. 我怎样才能结合 KStreams + Spark Streaming + 机器学习?
3.我的想法是连续训练测试数据而不是批量训练。
我正在做一个 POC,用于在数据流上运行机器学习算法。
我最初的想法是获取数据,使用
Spark Streaming --> 从多个表中聚合数据 --> 在数据流上运行 MLLib --> 生成输出。
但我遇到了 KStreams。现在我很困惑!
问题:
1. Spark Streaming 和 Kafka Streaming 有什么区别?
2. 我怎样才能结合 KStreams + Spark Streaming + 机器学习?
3.我的想法是连续训练测试数据而不是批量训练。
首先,术语“Confluent 的 Kafka Streaming”在技术上是不正确的。
但是,Confluent 为 Apache Kafka 贡献了很多代码,包括 Kafka Streams。
关于差异(我只强调一些主要差异并参考 Internet 和文档了解更多详细信息: http: //docs.confluent.io/current/streams/index.html和http://spark.apache.org/streaming / )
火花流:
卡夫卡流
因此,没有理由将两者“结婚”——这是一个选择要使用哪一个的问题。
我个人的看法是,Spark 不是流处理的好解决方案。如果您想使用 Kafka Streams 之类的库或 Apache Flink、Apache Storm 或 Apache Apex 之类的框架(这些都是流处理的好选择)取决于您的用例(也可能是个人喜好)并且无法在 SO 上回答.
Kafka Streams 的一个主要区别在于,它是一个库,不需要处理集群。而且因为它是 Apache Kafka 的一部分,并且如果您已经安装了 Apache Kafka,这可能会简化您的整体部署,因为您不需要运行额外的处理集群。
我最近在一个关于这个话题的会议上发表了演讲。
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 ”中有更详细的讨论。
从流处理的角度来看,Spark Streaming和KStreams 合二为一。
在这里强调了 Spark Streaming 和 KStreams 的显着优势,以便简短回答。
Apache Kafka Steams 是一个库,提供可嵌入的流处理引擎,它很容易在 Java 应用程序中用于流处理,它不是一个框架。
我发现了一些关于何时使用 Kafka Streams 的用例,并与Kafka 作者的 Apache flink 进行了很好的比较。