Apache spark Spark结构化流式处理卡夫卡错误--偏移量已更改
我的Spark Structured Streaming应用程序运行了几个小时,然后因此错误而失败Apache spark Spark结构化流式处理卡夫卡错误--偏移量已更改,apache-spark,apache-kafka,spark-structured-streaming,spark-kafka-integration,Apache Spark,Apache Kafka,Spark Structured Streaming,Spark Kafka Integration,我的Spark Structured Streaming应用程序运行了几个小时,然后因此错误而失败 java.lang.IllegalStateException: Partition [partition-name] offset was changed from 361037 to 355053, some data may have been missed. Some data may have been lost because they are not available in Kaf
java.lang.IllegalStateException: Partition [partition-name] offset was changed from 361037 to 355053, some data may have been missed.
Some data may have been lost because they are not available in Kafka any more; either the
data was aged out by Kafka or the topic may have been deleted before all the data in the
topic was processed. If you don't want your streaming query to fail on such cases, set the
source option "failOnDataLoss" to "false".
当然,偏移量每次都不同,但第一个偏移量总是大于第二个偏移量。主题数据不能过期,因为该主题的保留期为5天,我昨天重新创建了该主题,但今天再次出现错误。从中恢复的唯一方法是删除检查点
在failOnDataLoss
选项下提及:
当数据可能丢失时(例如。,
主题被删除,或偏移量超出范围)这可能是错误的
警报。当它不能按预期工作时,您可以禁用它。Batch
如果无法从数据库中读取任何数据,查询将始终失败
由于数据丢失而提供的偏移量
但我找不到任何关于何时可以将其视为假警报的进一步信息,因此我不知道将failOnDataLoss
设置为false
是否安全,或者我的集群是否存在实际问题(在这种情况下,我们实际上会丢失数据)
更新:我已经调查了Kafka日志,在Spark失败的所有情况下,Kafka都记录了几条类似这样的消息(我假设每个Spark消费者一条):
我不再有这个问题了。我做了两个改变:
spark submit
)禁用动态资源分配意味着不会在应用程序运行时创建和终止执行器(=使用者),从而消除了重新平衡的需要。因此,这很可能是阻止错误发生的原因。这似乎是旧版本Spark和Spark sql kafka库中的已知错误 我发现以下JIRA门票相关:
- :MicroBatchExecution提交的偏移量大于可用偏移量
- :Kafka源可能会重新处理数据
- :KafkaConsumer.position在调用“seekToEnd”后可能返回错误的偏移量
- 我们的火花<2.4.1
- 1.1.0<我们的卡夫卡<2.3.0
0
偏移量的批号“offset”子文件夹中的检查点文件来解决此问题
删除此文件时,请确保子文件夹“提交”和“偏移量”中的检查点文件中的批号在删除后仍然匹配。对于保留期,您应该检查
log.retention.bytes
,log.cleaner.enable
,卡夫卡的log.cleaner.min.compression.lag.ms
和cleanup.policy
。我们遇到了类似的问题,通过调整上述属性,我们得到了预期的结果,failOnDataLoss
true
我没有设置log.retention.bytes
,因此它应该只根据保留期删除日志。原木压缩不应该改变偏移量,根据这个?我有类似的问题,偏移量会突然跳回到以前的方式。仍然无法解释这一点。@linehrr请看我的answer@lfk是的,我们试过了,现在还在发生。
INFO [GroupCoordinator 1]: Preparing to rebalance group spark-kafka-...-driver-0 with old generation 1 (__consumer_offsets-25) (kafka.coordinator.group.GroupCoordinator)