我有一个从商店变更日志中读取的Kafka Streams应用,偶尔会抛出此错误:
org.apache.kafka.clients.consumer.OffsetOutOfRangeException: Offsets out of range with no configured reset policy for partitions: {topic-partition=offset}
at org.apache.kafka.clients.consumer.internals.Fetcher.parseCompletedFetch(Fetcher.java:928)
at org.apache.kafka.clients.consumer.internals.Fetcher.fetchedRecords(Fetcher.java:485)
at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1185)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1115)
at org.apache.kafka.streams.processor.internals.StoreChangelogReader.restore(StoreChangelogReader.java:84)
at org.apache.kafka.streams.processor.internals.TaskManager.updateNewAndRestoringTasks(TaskManager.java:319)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:789)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:750)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:720)
我认为消费者应该默认为latest
。即使我尝试使用ConsumerConfig.AUTO_OFFSET_RESET_CONFIG
或latest
来配置earliest
的流属性,我仍然会看到此错误。为什么?
答案 0 :(得分:2)
只能从实际输入主题中读取配置消费者重置策略。
对于变更日志主题(例如,还原案例),重置策略始终在内部设置为cursor
,因为Kafka Streams需要手动处理此案例。捕获异常并将其记录为警告级别消息。之后,Kafka Streams进行了一些内部清理,并进行了手动none
操作,以彻底重启恢复过程。
没有理由为此担心。但是,将记录一条WARN消息以通知您有关事件。