我们可以将 Kstream 与 Spark Streaming 一起使用吗?

Can we use Kstream with Spark Streaming?

我们可以将 Kstream 与 Spark 一起使用吗?

这是推荐的方法,还是使用 Spark Streaming 是更好的解决方案?

您不能将 Kafka Streams 与 Spark Streaming 一起使用。

例如,Kafka Streams 会使用主题中的单个记录,您会通过并行化调用将其映射到单个元素 Spark RDD?然后你就没有使用 Spark Streaming 库

换句话说,您可以使用来自 Spark Streaming 的 RDD。然后,就无法将该数据放入 Kafka Streams 拓扑中...

因此,它们不能“一起”使用。


或者,您可以部署一个可能“包含”Kafka Streams 拓扑的 Spark 应用程序,例如,如果您希望将 KTable 作为每个 RDD 操作的一部分,但这与将 Kafka Streams 嵌入到任何其他 JVM 应用程序。请记住,非流式 Spark 执行程序是短暂且短暂的,并且任何 Kafka Streams 状态都不会与 Spark 检查点一起存储

除此之外,如果您使用 Kubernetes,例如作为 Spark Scheduler,那么您可以部署单独的容器;一个 Kafka Streams 应用程序可以使用数据或将数据生成到 Spark Streaming 中,反之亦然。

Can we use Kstream with Spark?

当然可以。

Is it a recommended approach

不是真的(如果有的话)。

using the Spark Streaming is a better solution.

“更好”要求另一个问题“在什么情况下?”


Kafka Streams 是一个库,因此可以在应用程序中可以使用库的任何地方使用,包括。星火应用。从这个意义上说,这是可能的,但恕我直言,并没有多大帮助。

Kafka Streams 只是一堆使用消费者和生产者 API 来转换记录的线程。这就是 Spark Structured Streaming 中的 Kafka 数据格式。

Kafka Streams 应用程序部署为独立的 Java 应用程序(例如 Docker k8s 中的容器)。 Spark Structured Streaming(使用 Spark on Kubernetes)也可以实现同样的效果。

看不到在单个应用程序中同时使用这两种方法的真正好处,但希望证明是错误的。