Spark(直接)流的自然替代品是Spark结构化流还是Kafka流



在过去的几年里,我们开发了许多Spark Streaming(Direct API(应用程序,这些应用程序在我们的Cloudera平台上读写Kafka、IBM MQ、Hive、HBase、HDFS和其他应用程序。既然Spark Streaming的Direct API(我们目前的版本是2.3.2(已被弃用,并且我们最近在我们的项目中添加了Confluent平台(Kafka 2.2.0附带(,我们计划迁移这些应用程序。

什么是我们的Spark Streaming应用程序的自然替代品?我们应该迁移到Spark结构化流还是迁移到Kafka Streams?

我个人对这两个框架都没有任何经验,但在我看来,Spark结构化流媒体似乎是自然的选择。我们的代码库主要是用Scala编写的,它也可以用于结构化API。Kafka Streams对Scala有一些限制。尽管我们可能会失去一些灵活性,离开RDD的低级别API,转而使用更高级别的DataFrames,但我们可以使用Spark来建立我们的知识。

另一方面,Kafka Streams可能是处理Kafka主题之间的数据的最佳选择,这是我们的主要用例。看看Confluent附带的所有Kafka连接器,其他用例也可以使用。

您目前有一些Spark调度程序,因此您可以使用结构化流,它与旧的Streaming API二进制兼容。

如果你使用Mesos或k8s,那么将Kafka Streams应用程序放在Docker中并运行它们比Spark、IMO更容易扩展、监控和配置,因为它在这些系统中充当任何其他Docker容器,所以你可以围绕构建一个模式

卡夫卡流。。。可能是处理Kafka主题之间的数据的最佳选择

正确。

Kafka Streams对Scala有一些限制。

我想你可能想继续阅读部分

Kafka Streams DSL for Scala库是对Kafka Stream DSL的现有Java API的封装,该封装解决了所提出的问题

当然,您总是可以使用Kotlin与Java API 更好地互操作

最新更新