Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark结构化流式处理卡夫卡错误--偏移量已更改_Apache Spark_Apache Kafka_Spark Structured Streaming_Spark Kafka Integration - Fatal编程技术网

Apache spark Spark结构化流式处理卡夫卡错误--偏移量已更改

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

我的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 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 2.4.0,该版本还将Kafka客户端从0.10.0.1升级至2.0.0

  • 禁用动态资源分配意味着不会在应用程序运行时创建和终止执行器(=使用者),从而消除了重新平衡的需要。因此,这很可能是阻止错误发生的原因。

    这似乎是旧版本Spark和Spark sql kafka库中的已知错误

    我发现以下JIRA门票相关:

    • :MicroBatchExecution提交的偏移量大于可用偏移量
    • :Kafka源可能会重新处理数据
    • :KafkaConsumer.position在调用“seekToEnd”后可能返回错误的偏移量
    简而言之,引用开发人员的话:

    “这是卡夫卡中的一个已知问题,请参阅卡夫卡-7703。这在SPARK-26267的2.4.1和3.0.0中已修复。请将SPARK升级到更高版本。另一种可能是将卡夫卡升级到2.3.0,其中卡夫卡方面已修复。”

    “卡夫卡-7703仅存在于卡夫卡1.1.0及以上版本中,因此可能的解决方法是使用没有此问题的旧版本。这不会影响Spark 2.3.x及以下版本,因为默认情况下我们使用卡夫卡0.10.0.1。”

    在我们的案例中,我们在HDP3.1平台上面临同样的问题。我们有Spark 2.3.2和Spark sql kafka库(),但是它使用kafka客户机2.0.0。这意味着由于后续条件,我们将面临此错误:

    • 我们的火花<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)