卡夫卡消费者中groupid和consumerid之间的差异

Gna*_*ana 17 apache-kafka kafka-consumer-api

我是卡夫卡的新手.我注意到在Consumer配置中有两个id.一个是group.id(强制性),第二个是consumer.id(非强制性).请告诉我为什么2 Ids和差异.

Ara*_*ram 20

消费者群体是Kafka抽象,支持点对点和发布/订阅消息传递.消费者可以group_1通过将其设置group.id为加入消费者群体(我们说)group_1.消费者群体也是支持数据的并行消费的一种方式,即同一消费者群体的不同消费者从不同分区并行地消费数据.

除了group.id之外,每个消费者还使用Kafka经纪人识别自己consumer.id.Kafka使用它来识别特定消费者组的当前ACTIVE消费者.

阅读此文档以获取更多详细信息

  • 如果您尚未对主题进行分区,则只有1个消费者将使用消息.如果您希望两个使用者(属于同一个使用者组)并行使用消息,那么您需要对主题进行分区.我建议你阅读文档 (2认同)
  • 阅读有关“ consumer.id”的文档,描述指出“如果未设置则自动生成”。我认为这可能意味着,如果手动设置,consumer.id对于每个使用者都应该是唯一的?好奇地想知道,如果您在多个消费者之间重用消费者ID(例如,如何共享消费者组ID)会出现问题,或者它可以正常工作,但对于跟踪/调试组中的活跃消费者却很混乱? (2认同)

Jay*_*Jay 13

下图很好地描述了group.id和之间的区别。consumer.id

在此输入图像描述

在此示例中,我们有一个具有四个分区的主题、一个消费者组以及消费者组内的三个消费者。消费者 0 和消费者 2 分别从一个分区读取,而消费者 1 从两个分区读取。

等于。group.idConsumer groupgroup.id始终代表 Kafka 集群中消费者组的唯一名称/ID。一个消费者组可以有一个或多个消费者,但只有与主题中可用的分区一样多的消费者。

这里我们有四个分区,三个消费者加入了消费者组:消费者 0、消费者 1 和消费者 2。消费者的每个 ID(或名称)代表consumer.id. 我们最多可以有四个消费者(即consumer.ids),因为主题有四个分区。

consumer.id每个消费者在其消费群体中都有独特的。如果您没有定义consumer.id,Kafka 客户端(Java、Python、Node.js 等)通常会选择一个随机 ID。

group.id理解和之间关系的另一个很好的例子consumer.id是下图:

在此输入图像描述

主题 T1 有四个分区,存在两个消费者组:组 1 和组 2。组 1 拥有 4 个消费者(已满),而组 2 拥有两个消费者(还有 2 个消费者的空间)。第 2 组中的两个消费者分别从两个分区中读取数据。在第 1 组中,每个消费者仅从一个分区读取数据。

这是一个很好的例子,展示了为什么我们不能有两个或多个group.id同名的消费者组。如果 Kafka 允许组具有相同的名称,则分区的偏移量跟踪将会失控,因为组 1 中的消费者将覆盖组 2 中的消费者的偏移量(反之亦然)。