gpt4 book ai didi

apache-kafka - Kafka : what makes two consumers the same 中的消费者 ID 和组 ID

转载 作者:行者123 更新时间:2023-12-03 20:15:33 54 4
gpt4 key购买 nike

我已经使用 Kafka 几个月了,我意识到一些核心概念对我来说还不是很清楚。我的疑问与consumerId、groupId 和offsets 之间的关系有关。在我们的应用程序中,我们需要 Kafka 使用发布 - 订阅范式来工作,因此我们为每个消费者使用不同的组 ID,这些 ID 是随机生成的。

我以前认为设置auto.offset.reset = latest我的消费者总是会收到他们尚未收到的消息,但最近我了解到that is not the case .这仅在消费者尚未提交偏移量时才有效。在任何其他情况下,消费者将继续接收偏移量大于其提交的最后一个偏移量的消息。

由于我总是用随机组 ID 创建新消费者,我意识到我的消费者“没有内存”,他们是新消费者,他们永远不会提交偏移量,所以 auto.offset.reset = latest政策将始终适用。这就是我怀疑的地方。 假设以下场景 :

  • 我有两个客户端应用程序 A 和 B,每个应用程序有一个使用者,以发布 - 订阅方式工作(因此,具有不同的组 ID)。两个消费者都订阅了主题 my-topic . auto.offset.reset设置为 latest对于双方消费者。
  • 一些生产者(或生产者)将消息 M1、M2 和 M3 发布到主题 my-topic .
  • A 和 B 都接收 M1、M2 和 M3。
  • 现在我关闭应用程序 B。
  • 生产者产生消息 M4 和 M5。
  • 应用程序 A 接收消息 M4 和 M5。
  • 现在我重新启动应用程序 B。记住,groupId是随机的,我没有设置任何消费者 ID,所以这意味着这是一个新消费者(对吧?)。应用程序 B 没有收到任何消息。
  • 生产者发布消息 M6 和 M7。
  • 应用程序 A 和 B 都接收消息 M6 和 M7。

  • 所以,总结一下,如果我没有错的话,A 收到了所有消息,但 B 错过了 M4 和 M5。我用 kafka-console-consumer.sh 试过这个它的行为方式是这样的。

    那么,如何让应用程序 B 在关闭时接收发布的消息?现在,如果我开始分配与最初启动时相同的 groupId,它将读取消息 M4 和 M5,但这是设置组 ID。是否也可以设置消费者 ID,并获得相同的行为?

    或者换句话说,重新启动同一个消费者是什么意思? 如果两个消费者具有相同的 groupId、相同的消费者 ID,那么两个消费者是同一个消费者吗?

    顺便说一下,consumerId 和属性client.id 是一样的吗?

    最佳答案

    如果两个消费者具有相同的 group.id,则他们在同一组中环境。

    我不完全确定你对 consumerId 的意思.从 Kafka 2.2 开始,consumer configurations 中不存在这样的字段.

    如果您在谈论 client.id ,此设置没有功能影响,它仅用于标记请求,以便在需要时可以在代理日志中匹配它们。

    当您使用 auto.offset.reset=latest 运行使用者时, 如果不存在已提交的偏移量,则消费者将从日志的末尾重新开始消费。所以它只会接收它启动后产生的消息。所以在你的场景中,你是对的,它永远不会收到 M4 和 M5。

    如果要消费所有消息,需要保持相同的group.id .在这种情况下,auto.offset.reset只会在消费者第一次启动时应用。这样,当您的消费者重新启动时,它将恢复到停止时的位置。

    关于apache-kafka - Kafka : what makes two consumers the same 中的消费者 ID 和组 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56172742/

    54 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com