队列消息/消费者组的工作流程?

问题描述:

假设我有消费者组G1,它有三个消费者C1,C2和C3。所有订阅具有单个分区的主题1。现在制作人在分区1上产生3条消息,代理 将切换1消息给每个消费者。 对不对?队列消息/消费者组的工作流程?

但我得到了在kafka tutorial

  1. 单个消费者订阅一个特定的主题,从部分Workflow of Queue Messaging/Consumer Group 阅读下面的粗体文字后一头雾水,假设“主题-01”和“组ID”为 “组-1“
  2. Kafka与Pub-Sub Messaging以相同的方式与消费者进行交互,直到消费者订购新的 消费者订阅与”Group-1“具有相同”Group ID“的相同主题”Topic-01“
  3. 开当新消费者到达时,Kafka将其操作切换到共享模式并在两个消费者之间共享数据。 这种共享将继续进行,直到消费者数量 达到为该特定主题配置的分区数量。
  4. 一旦消费者数量超过分区数量,新消费者 将不会收到任何进一步的消息,直到任何一个现有的消费者退订。 这种情况的出现是因为卡夫卡的每个消费者都将被分配至少一个 分区,并且一旦所有分区被分配给现有消费者,新消费者将不得不等待。

如果我走3/4点,只有消费者1将获得所有消息作为消费者数量(这是3)大于没有分区(这是1)?这是否意味着我需要在所有分区中创建3个分区,并且组G1将使用所有3个分区进行预订,以便每个消费者分别获取一条消息?

如果我用点3/4去,只会consumer1将得到的所有消息消费者的数量(也就是3)比不分区的更大(即1)

是。它可以是三者中的一个。

这是否意味着我需要在所有组中创建3个分区,并且组G1将使用所有3个分区进行预订,以便每个消费者分别获取一条消息?

是的,如果你的主题有3个或更多的分区,那么所有3个消费者将开始消费你的话题。

+0

'是的。它可以是三者中的一个。“可以是这样的: - 第一条消息可以由C1消耗。 C2第二,C3第三,或者它会一直是同一个消费者? – user3198603

+0

没有将分区分配给组中的使用者,分配保持不变,直到消费者取消订阅或停止,或分区数量更改或新消费者加入组。因为它是一个动态的任务,这就是我提到三个消费者中的任何一个的原因。 –

+0

'没有将分区分配给组中的使用者,分配保持不变......谁将分区分配给使用者?我相信它的消费者会选择分区并提取消息? – user3198603

卡夫卡提供两种不同的递送模式:

  • 竞争/消费者:当消费者是相同的消费群从一个主题接收,所述主题中的每个分区被分配给一个且仅一个消费者。这意味着如果消费者不止是分区,剩余的消费者就会闲置而不接收消息。在你的例子中,唯一的一个分区将被分配给只有一个消费者,它将是唯一一个接收消息的消费者;其他消费者将闲置。分区的数量以消费者的角度定义了并行性。

  • 发布/订阅:当消费者属于不同的消费群体,他们将收到相同的消息(如在消息经纪人的话题/ subacriptions发生)