KStreams + Spark Streaming +机器学习

时间:2016-12-13 21:20:16

标签: apache-spark machine-learning apache-kafka spark-streaming apache-kafka-streams

我正在进行POC,以便在数据流上运行机器学习算法 我最初的想法是获取数据,使用

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

但我突然看到KStreams。现在我很困惑!

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

4 个答案:

答案 0 :(得分:19)

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

  1. 它被称为 Kafka的Streams API (又名 Kafka Streams
  2. 它是Apache Kafka的一部分,因此"拥有"由 Apache Software Foundation (而非Confluent)
  3. Confluent Open Source Confluent Enterprise - 来自 Confluent 的两项优惠,它们都利用Apache Kafka(因此,Kafka Streams)
  4. 但是,Confluent为Apache Kafka贡献了大量代码,包括Kafka Streams。

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

    Spark Streaming:

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

    Kafka Streams

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

    因此没有理由"结婚"两者 - 它是一个选择你想要使用的问题。

    我个人认为,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 and KStreams

此处突出显示了Spark Streaming和KStreams的重要优势/卖点,以简化答案。

火花流比KStreams的优势:

  1. 易于将Spark ML模型集成到同一应用程序中,而无需在应用程序外部编写数据,这意味着您比重新编写kafka并进行处理要快得多。
  2. 在同一应用程序中将非流源(例如文件系统)和其他非kafka源与其他流源一起加入。
  3. 带有模式的消息可以通过最喜欢的SQL( StructuredStreaming )轻松处理。
  4. 可以使用 GraphX 内置库对流数据进行图形分析。
  5. Spark应用程序可以部署在(如果有)现有YARN或Mesos群集上。

KStreams的优势:

  1. 用于对具有丰富功能的邮件进行ETL处理的紧凑库。到目前为止,来源和目标都应仅是Kafka主题。
  2. 易于实现一次语义。
  3. 不需要单独的处理集群。
  4. 易于运行,因为它是纯Java应用程序,因此易于在docker上部署。