我使用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();
启动流式查询时,会显示以下警告:
2019-12-10 08:20:38,926 [任务639的执行器任务启动工作者]警告org.apache.spark.sql.kafka010.InternalKafkaConsumer-一些数据可能会丢失。从最早的偏移中恢复:470021 2019-12-1008: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的执行器任务启动工作器]警告org.apache.spark.sql.kafka010.KafkaDataConsumer-KafkaConsumer缓存达到最大容量64,删除了CacheKey(spark-kafka的使用者) -source-93ee3689-79f9-42e8-b1ee-e856570205ae-1923743483-executor,_INBOUND-19)
这在告诉我什么?如何消除警告(如果可能)?
某些数据可能会丢失。从最早的偏移中恢复:470021
以上警告发生在流式查询以检查点偏移量开始,而该偏移量超出了主题中当前可用的偏移量时。
换句话说,流查询使用checkpointLocation
的状态不再是当前状态,因此不再显示警告(不是错误)。>>
这意味着您的查询与cleanup.policy(保留或compaction)相比太慢了。