我正在做一个 POC,用于在数据流上运行机器学习算法。
我最初的想法是获取数据,使用
Spark Streaming --> 聚合多个表中的数据 --> 在数据流上运行 MLLib --> 生成输出。
但我发现了 KStreams。现在我很困惑!
问题:
1. Spark Streaming和Kafka Streaming有什么区别?
2. 如何将 KStreams + Spark Streaming + 机器学习结合起来?
3.我的想法是连续训练测试数据而不是批量训练..
最佳答案
首先,“Confluence 的 Kafka Streaming”这个术语在技术上是不正确的。
- 它称为Kafka's Streams API(又名Kafka Streams)
- 它是 Apache Kafka 的一部分,因此由 Apache 软件基金会(而不是 Confluence)“拥有”
- 有 Confluence Open Source 和 Confluence Enterprise——Confluence 提供的两个产品都利用了 Apache Kafka(因此也利用了 Kafka Streams)
但是,Confluence 为 Apache Kafka 贡献了大量代码,包括 Kafka Streams。
关于差异(我只强调一些主要差异,并引用互联网和文档以获取更多详细信息: http://docs.confluent.io/current/streams/index.html 和 http://spark.apache.org/streaming/ )
Spark 流:
- 微批处理(没有真正的逐条记录流处理)
- 无亚秒级延迟
- 有限的窗口操作
- 没有事件时处理
- 处理框架(难以操作和部署)
- Apache Spark 的一部分——数据处理框架
- 仅处理一次
卡夫卡流
- 逐条记录流处理
- 毫秒延迟
- 丰富的窗口操作
- 流/表二元性
- 事件时间、摄取时间和处理时间语义
- Java 库(易于运行和部署 - 与其他应用程序一样,它只是一个 Java 应用程序)
- Apache Kafka 的一部分——流处理平台(即,它同时提供存储和处理)
- 至少一次处理(恰好一次处理为 WIP;参见 KIP-98 和 KIP-129)
- 弹性,即动态扩展
因此,没有理由同时“结婚”——这是一个选择您想要使用哪一个的问题。
我个人的看法是,Spark 并不是一个好的流处理解决方案。如果您想使用像 Kafka Streams 这样的库或像 Apache Flink、Apache Storm 或 Apache Apex 这样的框架(这些都是流处理的不错选择)取决于您的用例(也许还有个人品味),并且无法回答.
Kafka Streams 的主要区别在于,它是一个库,不需要处理集群。而且因为它是 Apache Kafka 的一部分,并且如果您已经安装了 Apache Kafka,这可能会简化您的整体部署,因为您不需要运行额外的处理集群。
关于apache-spark - KStreams + Spark 流 + 机器学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130738/