apache-spark - 以 Kafka 作为源重新启动流式查询时的数据丢失情况

标签 apache-spark spark-streaming spark-structured-streaming

在“Spark Streaming with Apache Spark”一书中,作者提到在使用 Kafka 作为源进行测试时,应将字段“failOnDataLoss(默认值:true)”设置为 false。他们说,

This flag indicates whether to fail the restart of a streaming query in case data might be lost. This is usually when offsets are out of range, topics are deleted, or topics are rebalanced. We recommend setting this option to false during the develop/test cycle because stop/restart of the query side with a continuous producer will often trigger a failure. Set this back to true for production deployment.

我想了解为什么停止/重新启动查询会失败。偏移量如何超出范围? Spark 不会维护哪些偏移量以作为检查点读取?

最佳答案

我同意“因为停止/重新启动具有连续生产者的查询端经常会触发失败”的原因并没有真正意义。如您所说,Spark 会维护当前的偏移量。此外,在拥有连续生产者的同时停止/重新启动查询正是我们在生产系统上的目标。

因此,我只能猜测那句话的意思,我最好的猜测是有一个错字,它应该写成“without a continuous producer”。

您通常没有开发环境的持续生产者,为了节省一些磁盘空间,您的开发环境主题通常有较短的保留期。

在开发阶段,您手动为输入主题生成一些消息,并运行 Spark Structured Streaming 作业以查看其行为是否符合预期。假设您已生成偏移量为 0 到 10 的消息。然后,您团队中的某个人想要测试该主题的另一个消费者并生成偏移量为 11 到 20 的消息。一段时间后,在下一个开发阶段(假设是 3 周稍后)您想要测试另一个功能,您将再次为其手动生成一些消息。但是,您的 Kafka 主题的清理策略已经删除了所有旧偏移量 0 到 20,并且在重新启动流式查询时它会尝试读取不再存在的偏移量 11。

另一种常见的情况是,当您从主题中删除有关开发环境的所有数据以便能够“从头开始”时。

这些场景经常出现在开发环境中,因此建议将选项 failOnDataLoss 设置为 false

关于apache-spark - 以 Kafka 作为源重新启动流式查询时的数据丢失情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56618064/

相关文章:

apache-spark - Spark 历史服务器按用户 ID 或时间过滤作业

scala - 具有 SASL_SSL 身份验证的 Kafka Spark 结构化流

apache-spark - 如何在结构化流中适本地使用 foreachBatch.batchDF.unpersist()? (保持错误)

apache-spark - FAIR调度模式能否使从不同主题读取的Spark Streaming作业并行运行?

apache-spark - 如何获取 Azure Databricks 笔记本运行详细信息

hadoop - 空RDD上的转换结果

apache-spark - 如何将spark sql查询的所有输出保存到一个文本文件中

apache-spark - 如何在没有数据框的情况下在spark中执行列表达式

java - Kafka Spark Streaming Consumer不会收到来自Kafka Console Producer的任何消息?

apache-spark - 如何访问流式查询的指标?