首页 > 解决方案 > 卡夫卡将偏移量重置为最早

问题描述

我正在使用 Spring-data(版本 1.5.1.RELEASE)、Spring-kafka(版本 1.1.1.RELEASE)运行 Kafka(版本 0.10.2)。

我有一个消费者群体正在从中投票的主题。我注意到有时,当一个消费者重新启动时,主题的滞后会立即变成一个更高的数字。经过一些研究,我得出结论,Kafka 重新启动了偏移量,但我不明白为什么。

enable.auto.commit = true
auto.commit.interval.ms = 5000
auto.offset.reset = smallest
log.retention.hours=168

滞后通常非常低(低于 500)并在几毫秒内消耗,因此它不能是超出范围的索引(或者可以吗?)

也许有人有想法?

标签: apache-kafkaspring-kafka

解决方案


我认为它实际上并没有像您期望的那样频繁地提交偏移量,因此,当消费者重新启动时,组重新平衡,然后在最近的自动提交的偏移量处开始。

提交仅定期发生(5 秒,根据您的配置),而不是基于每条消息的消息。因此,应该期望看到最多 5 秒的重复数据,但不是主题的开头,除非根本没有提交偏移量(您应该在客户端中设置简单的 log4j 日志记录以确定这一点)

如果你想要更好的控制,禁用自动偏移提交,并调用Consumer 对象的 commitSync 或 commitAsync 方法(这些是核心 Java API 的方法,不确定 Spring)

一种选择可能是升级您的 Spring 客户端,就像 Gary 在下面所说的那样。由于您运行的是 Kafka 0.10.2+,这应该不是问题。


推荐阅读