5

我正在做数据流上运行机器学习算法的POC。
我最初的想法是采取数据,使用Spark Streaming - >从多个表汇总数据 - >在数据流上运行MLLib - >生成输出。Kafka Streaming + Spark Streaming +机器学习

但我在整个Confluent的Kafka流媒体中拍摄。现在我很困惑!

问题:
1. Spark Streaming和Kafka Streaming有什么区别?
2.我如何结婚Kafka Streaming + Spark Streaming +机器学习?
3.我的想法是连续培训测试数据,而不是经过批量培训。

请指教。

回答

12

首先,术语“合流的卡夫卡流媒体”在技术上是不正确的。

  1. 这就是所谓的卡夫卡的流API(又名卡夫卡流
  2. 这是Apache的卡夫卡的一部分,因此“资”由Apache软件基金会(而不是由汇合)
  3. 有是汇合开源汇合企业 - 两个报价从汇合,都利用Apache Kafka(因此,卡夫卡Streams)

但是,Confluent向Apache Kafka贡献了很多代码,包括Kafka Streams。

关于差别(我只介绍一些主要的分歧,是指互联网和文件的详细信息:http://docs.confluent.io/current/streams/index.htmlhttp://spark.apache.org/streaming/

星火流:

  • 微配料(没有真正record-由记录流处理)
  • 没有子第二时延
  • 有限窗口操作
  • 没有事件时处理
  • 处理框架(难以操作和部署)的Apache火花的
  • 部分 - 数据处理框架
  • 恰好一次处理

卡夫卡流

  • 逐条记录流处理
  • ms等待时间
  • ri CH窗口操作
  • 流/表二元
  • 事件时间,摄取时间,加工时间语义
  • Java库(易于运行和部署 - 它只是一个Java应用程序的任何其他)的
  • 部分Apache Kafka - 一个流处理平台(即它一次提供存储和处理)
  • 至少一次处理(正好一次处理是在制品; CF KIP-98KIP-129
  • 弹性,即动态可扩展

因此,没有理由为“结婚”两个 - 这是你想要使用哪一个选择的问题。

我个人的看法是,Spark并不是流处理的好方案。如果你想使用像Kafka Streams这样的库或像Apache Flink,Apache Storm或Apache Apex这样的框架(这对流处理来说都是很好的选择)取决于你的用例(也许是个人喜好),并且不能在SO上得到回答。

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

1

我最近在会议上介绍了这个主题。

Apache Kafka Streams或Spark Streaming通常用于通过流处理(处理运动时的过程数据)实时将机器学习模型应用于新事件。马蒂亚斯的回答已经讨论了他们的分歧。

另一方面,您首先使用诸如Apache Spark MLlib(或H2O.ai或XYZ)之类的东西,首先使用历史数据集来构建分析模型,然后第一个

卡夫卡流也可以用于模型的在线培训。虽然,我认为在线培训有各种警告。

所有这些在我的幻灯片“​​”中有更详细的讨论。