Kafka 消费者偏移超出范围,没有为分区配置重置策略

Posted

技术标签:

【中文标题】Kafka 消费者偏移超出范围,没有为分区配置重置策略【英文标题】:Kafka consumer offsets out of range with no configured reset policy for partitions 【发布时间】:2016-09-16 04:21:27 【问题描述】:

我在启动 Kafka 消费者时收到异常。

org.apache.kafka.clients.consumer.OffsetOutOfRangeException: 未配置分区重置策略的偏移量超出范围test-0=29898318

我正在使用带有 Java 7 的 Kafka 版本 9.0.0。

【问题讨论】:

【参考方案1】:

所以您正在尝试访问当前不可用的主题(test)分区(0)中的偏移量(29898318)。

这可能有两种情况

    您的主题分区 0 可能没有那么多消息 您在偏移量29898318 的邮件可能已在保留期限前删除

为避免这种情况,您可以执行以下操作之一:

    auto.offset.reset 配置设置为 earliestlatest 。 您可以找到有关此here 的更多信息 您可以通过以下方式获得可用于主题分区的smallest offset 运行以下 Kafka 命令行工具

命令:

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list <broker-ip:9092> --topic <topic-name> --time -2

希望这会有所帮助!

【讨论】:

谢谢哥们,我试试这个但是不行。 auto.offset.reset 应该是 latest ,`最早` 或 none 试试latest auto.offset.reset=latest 时收到此错误。必须配置一个新的group.id 来清理 Kafka 的偏移状态,然后消费者开始工作。 @BdEngineer retention_periodgroup.id 没有关系。设置新的group.id 会刷新消费者组的元(在代理处)。由于这是一种极端情况,因此没有永久(可配置?)解决方案。【参考方案2】:

我在运行具有特定更改日志主题配置的 Kafka Streams 状态存储时遇到了这个 SO 问题:

cleanup.policy=compact,delete 保留 4 天

如果 Kafka Streams 仍然有一个快照文件指向一个不再存在的偏移量,the restore consumer is configured to fail。它不会回退到最早的偏移量。当很少有数据进入或应用程序关闭时,可能会发生这种情况。在这两种情况下,如果在更改日志保留期内没有提交,则不会更新快照文件。 (这是基于分区)

解决此问题的最简单方法是停止您的 kafka 流应用程序,删除其本地状态目录并重新启动您的应用程序。

【讨论】:

检查 kafka 流应用程序的“state.dir”配置设置; kafka.apache.org/10/documentation/streams/developer-guide/…

以上是关于Kafka 消费者偏移超出范围,没有为分区配置重置策略的主要内容,如果未能解决你的问题,请参考以下文章

Apache Kafka:使用java方式操作消费组和重置分区偏移量(admin api)

golang kafka Shopify/sarama 消费者重置新增分区偏移量并进行重新消费

重置为 Kafka 分区中的自定义偏移量

kafka重置到最新offset偏移量

SpringBoot 重置 kafka 偏移量offset(kafka-0.10.1.0)

Kafka-消费者-偏移量的提交方式