KStreams + Spark Streaming +机器学习

und*_*ood 8 machine-learning apache-kafka apache-spark spark-streaming apache-kafka-streams

我正在做一个POC,用于在数据流上运行机器学习算法.
我最初的想法是获取数据,使用

Spark Streaming - >来自多个表的聚合数据 - >在数据流上运行MLLib - >生成输出.

但是我穿过KStreams.现在我很困惑!

问题:
1.Spark Streaming和Kafka Streaming有什么区别?
2.我怎样才能结婚KStreams + Spark Streaming +机器学习?
我的想法是连续培训测试数据,而不是进行批量培训.

Mat*_*Sax 19

首先,术语"Confluent的Kafka Streaming"在技术上是不正确的.

  1. 它被称为Kafka的Streams API(又名Kafka Streams)
  2. 它是Apache Kafka的一部分,因此由Apache Software Foundation(而不是Confluent)"拥有"
  3. 汇合开源合流企业 -从两个报价汇合,这两个杠杆阿帕奇卡夫卡(因此,卡夫卡流)

但是,Confluent为Apache Kafka贡献了大量代码,包括Kafka Streams.

关于差异(我只强调一些主要差异,并参考互联网和文档以获取更多详细信息:http://docs.confluent.io/current/streams/index.htmlhttp://spark.apache.org/streaming /)

Spark Streaming:

  • 微批处理(没有真正的逐记录流处理)
  • 没有亚秒级延迟
  • 有限的窗口操作
  • 没有事件处理
  • 处理框架(难以操作和部署)
  • Apache Spark的一部分 - 一个数据处理框架
  • 完全一次处理

卡夫卡流

  • 按记录流处理
  • ms延迟
  • 丰富的窗口操作
  • 流/表二元性
  • 事件时间,摄取时间和处理时间语义
  • Java库(易于运行和部署 - 它只是一个Java应用程序)
  • Apache Kafka的一部分 - 流处理平台(即,它一次提供存储和处理)
  • 至少一次处理(完全一次处理为WIP;参见KIP-98KIP-129)
  • 弹性的,即动态可扩展的

因此,没有理由"结婚" - 这是一个你想要使用的选择问题.

我个人认为,Spark不是一个很好的流处理解决方案.如果你想使用像Kafka Streams这样的库或像Apache Flink,Apache Storm或Apache Apex这样的框架(它们都是流处理的好选择)取决于你的用例(也许是个人品味)而无法在SO上回答.

Kafka Streams的一个主要区别是,它是一个库,不需要处理集群.并且因为它是Apache Kafka的一部分,并且如果您已经安装了Apache Kafka,这可能会简化您的整体部署,因为您不需要运行额外的处理集群.


rav*_*iru 2

Apache Kafka Steams 是一个库,提供可嵌入的流处理引擎,它很容易在 Java 应用程序中用于流处理,并且它不是一个框架。

我发现了一些关于何时使用 Kafka Streams 的用例,并且还与 Kafka 作者的 Apache flink 进行了很好的比较