从Kafka商店Changelog读取时的OffsetOutOfRangeException

时间:2018-06-26 12:54:19

标签: apache-kafka apache-kafka-streams

我有一个从商店变更日志中读取的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_CONFIGlatest来配置earliest的流属性,我仍然会看到此错误。为什么?

1 个答案:

答案 0 :(得分:2)

只能从实际输入主题中读取配置消费者重置策略。

对于变更日志主题(例如,还原案例),重置策略始终在内部设置为cursor,因为Kafka Streams需要手动处理此案例。捕获异常并将其记录为警告级别消息。之后,Kafka Streams进行了一些内部清理,并进行了手动none操作,以彻底重启恢复过程。

没有理由为此担心。但是,将记录一条WARN消息以通知您有关事件。