我在做一个poc,在数据流上运行机器学习算法。我最初的想法是获取数据,使用spark streaming-->聚合多个表中的数据-->对数据流运行mllib-->生成输出。但我可以穿越河流。现在我很困惑!!!问题:1Spark流和Kafka流有什么区别?2我怎样才能嫁给kstreams+spark流媒体+机器学习?三。我的想法是连续地训练测试数据,而不是成批训练。。
3df52oht1#
apachekafka-steams是一个库,它提供了可嵌入的流处理引擎,在java应用程序中易于使用流处理,而不是一个框架。我发现了一些关于何时使用kafka流的用例,并且与kafka作者提供的apacheflink进行了很好的比较。
3wabscal2#
首先,术语“合流的Kafka流”在技术上是不正确的。它被称为Kafka的流api(又名Kafka流)它是ApacheKafka的一部分,因此被Apache软件基金会“拥有”(而不是汇合)。有confluent开源和confluent enterprise——confluent的两个产品都利用了ApacheKafka(因此,kafka流)然而,confluent为ApacheKafka贡献了很多代码,包括kafka流。关于差异(我只强调了一些主要差异,并参考互联网和文档了解更多详细信息:http://docs.confluent.io/current/streams/index.html 以及http://spark.apache.org/streaming/)Spark流:微批处理(逐记录流处理无真实记录)无亚秒延迟有限的窗口操作无事件时间处理处理框架(难以操作和部署)apachespark的一部分——数据处理框架只处理一次Kafka河逐记录流处理毫秒延迟丰富的窗口操作流/表二元性事件时间、摄取时间和处理时间语义java库(易于运行和部署——它只是一个java应用程序)ApacheKafka的一部分——流处理平台(即,它同时提供存储和处理)至少一次加工(恰好一次加工是在制品;cf kip-98和kip-129)弹性,即动态可伸缩因此,没有理由同时“结婚”这是一个选择你想用哪一个的问题。我个人的看法是,spark不是流处理的好解决方案。如果您想使用像kafka streams这样的库或像apache flink、apache storm或apache apex这样的框架(这些都是流处理的好选择),这取决于您的用例(可能还有个人品味),因此无法回答。kafka流的一个主要区别是,它是一个库,不需要处理集群。而且因为它是apachekafka的一部分,而且如果您已经有了apachekafka,这可能会简化您的总体部署,因为您不需要运行额外的处理集群。
dzhpxtsq3#
从流处理的Angular 来看,一个pic中的spark流和kstream。强调了spark流媒体和kstreams的显著优势,使答案简短明了。
很容易在同一个应用程序中集成spark ml模型和图形计算,而无需在应用程序外写入数据,这意味着您将比再次编写和处理kafka要快得多。将非流源(如文件系统和其他非Kafka源)与同一应用程序中的其他流源连接起来。使用最常用的sql(structuredstreaming)可以轻松地处理具有架构的消息。可以用graphx内置库对流数据进行图形分析。spark应用程序可以部署在现有的yarn或mesos集群上。
用于etl处理和ml模型服务/训练的紧凑库,具有丰富的特性。到目前为止,源和目标都应该是Kafka的主题。易于实现精确的一次语义。不需要单独的处理集群。很容易在docker上部署,因为它是一个普通的java应用程序。
3pmvbmvn4#
我最近在一个会议上介绍了这个主题。apache-kafka流或spark流通常用于通过流处理(在数据运动时处理数据)将机器学习模型实时应用于新事件。马蒂亚斯的回答已经讨论了他们的分歧。另一方面,您首先使用apachesparkmllib(或h2o.ai或xyz)之类的东西来构建分析模型,首先使用历史数据集。Kafka流也可以用于模型的在线培训。不过,我认为在线培训有各种各样的注意事项。所有这些都将在我的幻灯片“ApacheKafka流和机器学习/实时流处理的深度学习”中详细讨论。
4条答案
按热度按时间3df52oht1#
apachekafka-steams是一个库,它提供了可嵌入的流处理引擎,在java应用程序中易于使用流处理,而不是一个框架。
我发现了一些关于何时使用kafka流的用例,并且与kafka作者提供的apacheflink进行了很好的比较。
3wabscal2#
首先,术语“合流的Kafka流”在技术上是不正确的。
它被称为Kafka的流api(又名Kafka流)
它是ApacheKafka的一部分,因此被Apache软件基金会“拥有”(而不是汇合)。
有confluent开源和confluent enterprise——confluent的两个产品都利用了ApacheKafka(因此,kafka流)
然而,confluent为ApacheKafka贡献了很多代码,包括kafka流。
关于差异(我只强调了一些主要差异,并参考互联网和文档了解更多详细信息:http://docs.confluent.io/current/streams/index.html 以及http://spark.apache.org/streaming/)
Spark流:
微批处理(逐记录流处理无真实记录)
无亚秒延迟
有限的窗口操作
无事件时间处理
处理框架(难以操作和部署)
apachespark的一部分——数据处理框架
只处理一次
Kafka河
逐记录流处理
毫秒延迟
丰富的窗口操作
流/表二元性
事件时间、摄取时间和处理时间语义
java库(易于运行和部署——它只是一个java应用程序)
ApacheKafka的一部分——流处理平台(即,它同时提供存储和处理)
至少一次加工(恰好一次加工是在制品;cf kip-98和kip-129)
弹性,即动态可伸缩
因此,没有理由同时“结婚”这是一个选择你想用哪一个的问题。
我个人的看法是,spark不是流处理的好解决方案。如果您想使用像kafka streams这样的库或像apache flink、apache storm或apache apex这样的框架(这些都是流处理的好选择),这取决于您的用例(可能还有个人品味),因此无法回答。
kafka流的一个主要区别是,它是一个库,不需要处理集群。而且因为它是apachekafka的一部分,而且如果您已经有了apachekafka,这可能会简化您的总体部署,因为您不需要运行额外的处理集群。
dzhpxtsq3#
从流处理的Angular 来看,一个pic中的spark流和kstream。
强调了spark流媒体和kstreams的显著优势,使答案简短明了。
spark流媒体相对于kstreams的优势:
很容易在同一个应用程序中集成spark ml模型和图形计算,而无需在应用程序外写入数据,这意味着您将比再次编写和处理kafka要快得多。
将非流源(如文件系统和其他非Kafka源)与同一应用程序中的其他流源连接起来。
使用最常用的sql(structuredstreaming)可以轻松地处理具有架构的消息。
可以用graphx内置库对流数据进行图形分析。
spark应用程序可以部署在现有的yarn或mesos集群上。
kstreams的优势:
用于etl处理和ml模型服务/训练的紧凑库,具有丰富的特性。到目前为止,源和目标都应该是Kafka的主题。
易于实现精确的一次语义。
不需要单独的处理集群。
很容易在docker上部署,因为它是一个普通的java应用程序。
3pmvbmvn4#
我最近在一个会议上介绍了这个主题。
apache-kafka流或spark流通常用于通过流处理(在数据运动时处理数据)将机器学习模型实时应用于新事件。马蒂亚斯的回答已经讨论了他们的分歧。
另一方面,您首先使用apachesparkmllib(或h2o.ai或xyz)之类的东西来构建分析模型,首先使用历史数据集。
Kafka流也可以用于模型的在线培训。不过,我认为在线培训有各种各样的注意事项。
所有这些都将在我的幻灯片“ApacheKafka流和机器学习/实时流处理的深度学习”中详细讨论。