【问题标题】:Kafka reset offsets to earliest卡夫卡将偏移量重置为最早
【发布时间】:2018-11-18 17:44:17
【问题描述】:

我正在使用 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)并在几毫秒内消耗,因此它不能是超出范围的索引(或者可以吗?)

也许有人有想法?

【问题讨论】:

  • 重启偏移是什么意思?再次阅读相同的味精?
  • log.retention.hours 是服务器配置,不是客户端配置,顺便说一下,其余的都是给客户端的
  • 是的,正在再次阅读相同的消息...

标签: apache-kafka spring-kafka


【解决方案1】:

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

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

如果你想要更精细的控制,禁用自动偏移提交,以及 Consumer 对象的call the commitSync or commitAsync methods(这些是核心 Java API 的方法,不确定 Spring)

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

【讨论】:

  • 不,肯定会再次阅读相同的消息。一周前的消息
  • 你应该升级到 1.3.x; 1.1.x 已经很老了,而且有一个非常复杂的线程模型。 KIP-62 允许我们重写线程模型并使其更简单。当前的 1.3.x 版本是 1.3.7; 1.3.8 将于下周发布。对于 2.0.0 之前的代理,消费者偏移量会在 24 小时后被删除,所以如果您在那段时间没有收到任何消息(例如在一个周末);偏移量将被重置。 2.0.0 将默认更改为 7 天。
  • @Yuval 见上文^^
  • 谢谢@GaryRussell。我在哪里可以找到有关此行为的文档?我该如何配置它?
  • 好点;自动提交;偏移量不应过期。不过,我仍然建议升级到更现代的 spring-kafka 版本。不再支持 1.1.x;你至少应该去1.3.7;当前版本是 2.1.0(下周 2.1.1)。
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 2020-06-04
  • 2016-10-09
  • 2016-03-28
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多