apache-spark - KStreams + Spark 流 + 机器学习

标签 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 + 机器学习结合起来?
3.我的想法是连续训练测试数据而不是批量训练..

最佳答案

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

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

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

关于差异(我只强调一些主要差异,并引用互联网和文档以获取更多详细信息: 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 这样的框架(这些都是流处理的不错选择)取决于您的用例(也许还有个人品味),并且无法回答.

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

关于apache-spark - KStreams + Spark 流 + 机器学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130738/

相关文章:

apache-spark - 无法在 Amazon Keyspaces 上的表上写入

machine-learning - Tensorflow保存模型: GraphDef cannot be larger than 2GB

apache-kafka - Kafka MirrorMaker2 自动消费者偏移同步

java - 2 个 kafka 消费者使用不同的 SSL 配置读取 2 个不同的主题

java - 卡夫卡生产者和消费者问题

scala - s3中的数据分区

hadoop - 为什么 Spark 运行多个进程?

windows - 找不到类 org.apache.hadoop.fs.s3native.NativeS3FileSystem (Spark 1.6 Windows)

machine-learning - 在 R 中使用插入符包进行时间序列预测

optimization - Tensorflow 中的同步与异步计算