“ OffsetOutOfRangeException:偏移量超出范围,没有为分区配置任何重置策略”是什么意思?

时间:2019-12-11 13:17:16

标签: apache-spark apache-kafka apache-spark-sql spark-structured-streaming

我使用Apache Spark 2.4.1和kafka data source

Dataset<Row> df = sparkSession
  .readStream()
  .format("kafka")
  .option("kafka.bootstrap.servers", SERVERS)
  .option("subscribe", TOPIC) 
  .option("startingOffsets", "latest")
  .option("auto.offset.reset", "earliest") 
  .load();

我有两个接收器:经过几次转换后,原始数据存储在hdfs位置中,最终数据存储在Cassandra表中。 checkpointLocation是HDFS目录。

启动流查询时,它会显示以下警告:

  

2019-12-10 08:20:38,926 [任务639的执行器任务启动工作者]   警告org.apache.spark.sql.kafka010.InternalKafkaConsumer-一些数据   可能会丢失。从最早的偏移中恢复:470021 2019-12-10   08:20:38,926 [执行任务639的执行器任务启动程序]警告   org.apache.spark.sql.kafka010.InternalKafkaConsumer-当前   可用的偏移范围是AvailableOffsetRange(470021,470021)。偏移量   62687超出范围,[62687,62727)中的记录将被跳过   (GroupId:   spark-kafka-source-1fba9e33-165f-42b4-a220-6697072f7172-1781964857-执行者,   TopicPartition:INBOUND-19)。一些数据可能已经丢失,因为它们   在Kafka中不再可用;要么数据老化了   Kafka或主题可能已被删除,   主题已处理。如果您想让流式查询失败   情况下,将源选项“ failOnDataLoss”设置为“ true”。

我也将auto.offset.reset用作latest,将startingOffsets用作latest

  

2019-12-11 08:33:37,496 [任务1059的执行程序任务启动工作器] WARN org.apache.spark.sql.kafka010.KafkaDataConsumer-KafkaConsumer缓存达到最大容量64,删除了CacheKey(spark- kafka-source-93ee3689-79f9-42e8-b1ee-e856570205ae-1923743483-executor,_INBOUND-19)

这告诉我什么?如何消除警告(如果可能)?

1 个答案:

答案 0 :(得分:3)

  

某些数据可能会丢失。从最早的偏移量中恢复:470021

当您的流式查询以检查点偏移量开始且超过主题当前可用的偏移量时,就会发生上述警告。

换句话说,流查询使用checkpointLocation的状态不再是当前状态,因此不再显示警告(不是错误)。

这意味着与cleanup.policy(保留或compaction)相比,您的查询太慢了。