如何解决我应该将 Kafka auto.offset.reset 设置为最早还是最晚?
我有一个位于 K8 中的 Spring Kafka Consumer 应用程序。有时应用程序会被回收/重新启动。当消费者重新启动时,我希望它消耗在回收时产生的所有消息。我尝试了 auto.offset.rest=earliest 并且它按预期工作,但我注意到 kafka 的默认值是最新的。
如果我最早使用会带来哪些风险?在什么情况下我最早使用最新的v.s?我试图在这里找到一个帖子,通过一个场景来解释它,但其中大部分是从一些文档中复制粘贴的,而不是现实生活中的例子。
解决方法
该属性仅适用于代理没有为组/主题/分区提交偏移量的情况。
即应用程序第一次运行或偏移量到期(对于现代经纪人,默认到期时间是消费者未运行 7 天 - 最后一个消费者离开组后的 7 天)。对于较旧的经纪人,抵消会更早到期 - 即使消费者仍在运行,但没有收到任何东西。当前行为始于 2.1,IIRC。
当已经有一个提交的偏移量时,该偏移量用于起始位置,忽略该属性。
对于大多数用例,使用 earliest
但正如您所说,latest
是默认值,这意味着“新”消费者将在最后开始并且不会获得任何记录主题。
所以“风险”是,如果您一周不运行您的应用程序,您将再次获得任何未过期的记录。您可以增加 offset.retention.minutes 以避免这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。