首页 > 解决方案 > 当kafka客户端异步发送消息时,Spark Streaming任务优雅关闭

问题描述

我正在构建一个火花流应用程序,从 kafka 主题读取输入消息,转换消息并将结果消息输出到另一个 kafka 主题。现在我很困惑如何在应用程序重新启动时防止数据丢失,包括 kafka 读取和输出。设置 spark 配置 "spark.streaming.stopGracefullyOnShutdow" true 有帮助吗?

标签: apache-sparkhadoopapache-kafka

解决方案


您可以将 Spark 配置为对 HDFS 执行检查点并将 Kafka 偏移存储在 Zookeeper(或 Hbase,或在其他地方配置以实现快速、容错查找)

但是,如果您在能够提交偏移量之前处理一些记录并写入结果,那么您最终将在重新启动时重新处理这些记录。据称,Spark 可以对 Kafka 执行一次,但据我所知,这只能通过适当的偏移管理进行,例如,在 Kafka 优先级中将 enable.auto.commit 设置为 false,然后只在你之后提交已处理数据并将其写入其目的地

如果您只是在 Kafka 主题之间移动数据,Kafka Streams 是包含的 Kafka 库,它不需要 YARN 或集群调度程序


推荐阅读