【问题标题】:Kafka: how does consumer offsets work with dynamically created group ids?Kafka:消费者偏移如何与动态创建的组 ID 一起使用?
【发布时间】:2022-01-22 06:37:08
【问题描述】:

在 Kafka 中,每个消费者组都由一个唯一的 group.id 属性表示。每个消费者组管理自己的偏移量(存储在 __consumer_offsets 主题中)。如果我总是使用动态生成的 group.id 值启动消费者服务,这个偏移量会发生什么?

这个新的消费者组是否总是从主题的开头读取,因为它没有偏移量,或者'auto.offset.reset'会生效吗?

【问题讨论】:

  • 我认为动态创建的组 ID 仅适用于 latest 配置,并且仅当您想要处理当前消息并且不关心丢失以前的消息时才有意义。因此,请确保您的使用场景不需要 at-least-once。
  • 感谢您澄清这一点,我还想处理丢失的以前的消息,所以我可能只是硬编码服务中的不同组 id,这样当它们重新启动时,它们会记住偏移量
  • 我通常定义组 ID == 服务名称,因此每个服务都有自己的单个组 ID(无论它消耗多少主题)。

标签: apache-kafka


【解决方案1】:

如果每次应用程序启动时都生成一个新的group.id,那么消费者将依赖auto.offset.reset 来找到它的起始位置。这是因为这是一个新组,不会存储任何偏移量。

使用auto.offset.reset,您可以指示消费者以earliest 开头或以latest 结尾的日志。

请注意,在启动时,您还可以控制应用程序逻辑中的位置,并根据您的需要明确寻找任意位置。

一个相对常见的模式是从按时派生的位置开始,例如寻找 1 小时前或一天的开始。这可以使用offsetsForTimes()seek() 来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2020-06-11
    • 2017-01-01
    • 2016-08-02
    • 2019-05-01
    • 2018-02-03
    • 2021-05-01
    相关资源
    最近更新 更多