【问题标题】:KStreams + Spark Streaming + Machine LearningKStreams + Spark Streaming + 机器学习
【发布时间】:2017-04-29 01:59:32
【问题描述】:

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

Spark Streaming --> 从多个表中聚合数据 --> 在数据流上运行 MLLib --> 生成输出。

但是我遇到了 KStreams。现在我很困惑!

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

【问题讨论】:

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


    【解决方案1】:

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

    我从 Kafka 作者那里找到了一些关于 when to use Kafka Streamscomparison with Apache flink 的用例。

    【讨论】:

    • 这个答案根本不包括 Spark,但提到了 Flink... 不是真正的问题。
    【解决方案2】:

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

    1. 它被称为 Kafka 的 Streams API(又名 Kafka Streams
    2. 它是 Apache Kafka 的一部分,因此归 Apache 软件基金会(而不是 Confluent)“拥有”
    3. Confluent Open SourceConfluent Enterprise -- Confluent 提供的两个产品都利用了 Apache Kafka(因此也利用了 Kafka Streams)

    不过,Confluent 为 Apache Kafka 贡献了很多代码,包括 Kafka Streams。

    关于差异(我只强调一些主要差异,有关更多详细信息,请参阅 Internet 和文档:http://docs.confluent.io/current/streams/index.htmlhttp://spark.apache.org/streaming/

    Spark 流式传输:

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

    卡夫卡流

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

    因此,没有理由将两者“结婚”——这是一个选择要使用哪一个的问题。

    我个人的看法是,Spark 不是流处理的好解决方案。如果您想使用 Kafka Streams 之类的库或 Apache Flink、Apache Storm 或 Apache Apex 之类的框架(这些都是流处理的好选择)取决于您的用例(也可能是个人喜好)并且无法在 SO 上回答.

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

    【讨论】:

    • 嘿,你的回答是从 2016 年开始的,如果能根据目前的情况更新它会非常好,再次感谢你在 stackoverflow 上的所有回答
    【解决方案3】:

    我最近在一个关于这个主题的会议上发表了演讲。

    Apache Kafka Streams 或 Spark Streaming 通常用于通过流处理(在运动中处理数据)将机器学习模型实时应用于新事件。 Matthias 的回答已经讨论了他们之间的差异。

    另一方面,您首先使用 Apache Spark MLlib(或 H2O.ai 或 XYZ)等工具首先使用历史数据集构建分析模型。

    Kafka Streams 也可以用于模型的在线训练。不过,我认为在线培训有很多注意事项。

    所有这些都在我的幻灯片“Apache Kafka Streams and Machine Learning / Deep Learning for Real Time Stream Processing”中进行了更详细的讨论。

    【讨论】:

      【解决方案4】:
      从流处理的角度来看,

      Spark StreamingKStreams 合二为一。

      在此强调 Spark Streaming 和 KStreams 的显着优势,以便简短回答。

      Spark Streaming 相对于 KStreams 的优势:

      1. 无需在应用程序之外写入数据,即可轻松将 Spark ML 模型和图形计算集成到同一应用程序中,这意味着您将比再次编写 kafka 并处理更快。
      2. 将文件系统和其他非 kafka 源等非流式源与同一应用程序中的其他流源连接起来。
      3. 可以使用最常用的 SQL (StructuredStreaming) 轻松处理带有 Schema 的消息。
      4. 可以使用 GraphX 内置库对流数据进行图形分析。
      5. Spark 应用程序可以部署在(如果)现有的 YARN 或 Mesos 集群上。

      KStreams 优势:

      1. 用于 ETL 处理和 ML 模型服务/训练具有丰富功能的消息的紧凑库。到目前为止,源和目标都应该只是 Kafka 主题。
      2. 轻松实现恰好一次的语义。
      3. 不需要单独的处理集群。
      4. 易于在 docker 上部署,因为它是一个可以运行的纯 java 应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 2017-03-03
        • 2019-05-14
        • 2019-07-10
        • 2015-04-09
        相关资源
        最近更新 更多