【问题标题】:What will happen if my kafka consumer group is changed after each restart如果我的 kafka 消费者组在每次重启后都改变了会发生什么
【发布时间】:2021-05-08 14:11:21
【问题描述】:

比如说,我的 kafka 消费者(在消费者组 1 中)正在阅读来自 Kafka 主题 A 的消息。

现在,如果该消费者在失败前消费了 12 条消息。
当消费者再次启动时,现在它有不同的消费者组(即消费者组2), 问题1 -?重新启动时,它是否会从它在偏移量(或位置)中停止的位置继续,因为该偏移量由 Kafka 和/或 ZooKeeper 存储,还是会从第一条消息开始消费消息。

问题 2-> 有没有办法确保在重启时(当消费者有不同的消费者组时),它仍然从重启前中断的地方开始消费?

只是为了给您提供上下文,我正在尝试在收到有关 kafka 主题的消息时更新每个节点/服务器中的内存缓存。为了做到这一点,我为每个节点/服务器使用不同的消费者组,以便所有节点/服务器使用每条消息来更新内存缓存。如果有更好的方法可以做到这一点,请告诉我。谢谢!

【问题讨论】:

  • 如果你想要一个内存缓存,那么你可以使用 KTable

标签: spring-boot apache-kafka kafka-consumer-api spring-kafka kafka-producer-api


【解决方案1】:

每个消费者组都维护消费者偏移量,因此如果您在每次重启时都有不同的消费者组,您可以使用auto.offset.reset 属性

auto.offset.reset 属性指定

  • 当 Kafka 中没有初始偏移量或服务器上不再存在当前偏移量时该怎么办(例如,因为该数据已被删除):
    • 最早:自动将偏移量重置为最早的偏移量
    • latest:自动将偏移量重置为最新的偏移量
    • 无:如果没有为消费者组找到先前的偏移量,则向消费者抛出异常
    • 其他任何事情:向消费者抛出异常。

了解了当前的方法 - 我相信您应该重新审视设计,每个节点拥有不同的消费者组会更好,但即使在重新启动后也要确保每个节点保持相同的消费者组名称。这是基于所提供信息的建议,但在深入了解设计/实施细节后可能会有更好的解决方案。

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2019-09-25
    • 2017-04-15
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多