【发布时间】:2021-12-05 18:15:52
【问题描述】:
我们可以将 Kstream 与 Spark 一起使用吗?
这是推荐的方法,还是使用 Spark Streaming 是更好的解决方案?
【问题讨论】:
标签: apache-spark apache-kafka spark-streaming apache-kafka-streams
我们可以将 Kstream 与 Spark 一起使用吗?
这是推荐的方法,还是使用 Spark Streaming 是更好的解决方案?
【问题讨论】:
标签: apache-spark apache-kafka spark-streaming apache-kafka-streams
我们可以将 Kstream 与 Spark 一起使用吗?
当然。
这是一个推荐的方法
不是真的(如果有的话)。
使用 Spark Streaming 是更好的解决方案。
“更好”要求另一个问题“在什么情况下?”
Kafka Streams 是一个库,因此可以在任何可以在应用程序中使用库的地方使用,包括。火花应用程序。从这个意义上说,这是可能的,但没有太大帮助恕我直言。
Kafka Streams 只是一组使用 Consumer 和 Producer API 来转换记录的线程。这正是 Spark Structured Streaming 中的 Kafka 数据格式。
Kafka Streams 应用程序部署为独立的 Java 应用程序(例如 k8s 中的 Docker 容器)。 Spark Structured Streaming(在 Kubernetes 上使用 Spark)也是如此。
在单个应用程序中同时使用两者并没有真正的好处,但会喜欢被证明是错误的。
【讨论】:
您不能将 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 调度程序,那么您可以部署单独的容器;一个 Kafka Streams 应用可以使用或生成数据到 Spark Streaming 中,反之亦然。
【讨论】: