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

时间:2017-06-22 13:44:51

标签: java apache-kafka

假设我有消费者群体G1,其中有三个消费者C1,C2和C3。所有订阅主题1都有单个分区。现在Producer在partition1,broker上生成3条消息 将向每个消费者传递1条消息。 对吗?

但在阅读Workflow of Queue Messaging / Consumer Group部分的粗体文字后,我感到困惑    在kafka tutorial

  1. 单个消费者订阅特定主题,假设"主题-01"用" Group ID“as “组1”。
  2. Kafka以与Pub-Sub Messaging相同的方式与消费者交互,直到新的消息 消费者订阅相同的主题,"主题-01"使用与“Group-1”相同的“Group ID”。
  3. 一旦新消费者到来,Kafka将其运营切换到共享模式和共享 两个消费者之间的数据。 这种分享将一直持续到消费者的数量 达到为该特定主题配置的分区数。
  4. 一旦消费者数超过分区数,新消费者就会 在任何一位现有消费者取消订阅之前,不会收到任何进一步的消息。 出现这种情况是因为Kafka中的每个消费者将被分配至少一个 分区和所有分区一旦分配给现有的消费者,新的 消费者将不得不等待。
  5. 如果我按点3/4,只有消费者1将获得所有消息,因为消费者的数量(即3)大于分区的无(1)?这是否意味着我需要创建所有3个分区,并且组G1将订阅所有3个分区,以便每个消费者各获得一个消息?

3 个答案:

答案 0 :(得分:1)

  

如果我按点3/4进行操作,那么只有consumer1会获得所有消息,因为消费者的数量(即3)大于分区的数量(即1)

是。它可以是三者之一。

  

这是否意味着我需要创建所有3个分区,并且组G1将订阅所有3个分区,以便每个消费者每个获得一个消息?

是的,如果您的主题有3个或更多分区,则所有3个消费者将开始使用您的主题。

答案 1 :(得分:0)

Kafka提供两种不同的交付模式:

  • 竞争/消费者:当消费者处于从主题接收的同一消费者群体中时,主题中的每个分区都分配给一个且仅一个消费者。这意味着如果消费者不仅仅是分区,剩余的消费者将在没有接收消息的情况下闲置。在您的示例中,唯一一个分区将仅分配给一个消费者,该消费者将是唯一一个接收消息的消费者;其他消费者将闲置。分区数量根据消费者来定义并行性。

  • 发布/订阅:当消费者属于不同的消费者群体时,他们将收到相同的消息(就像在消息代理的主题/子主题中发生的那样)

答案 2 :(得分:0)

让我们检查该系统的经过验证的实际工作流程:

  1. 生产者定期发送消息到某个主题。

  2. Kafka将所有消息存储在为该特定主题配置的分区中,类似于先前的情况。

  3. 单个消费者订阅了特定主题,假设“ Topic-01”的组ID为“ Group-1”。

  4. Kafka以与Pub-Sub Messaging相同的方式与使用者交互,直到新使用者订阅与“ Group-1”相同的组ID的相同主题“ Topic-01”。

    < / li>
  5. 新的使用者到达后,Kafka将其操作切换为共享模式,并在两个使用者之间共享数据。这种共享将一直持续到消费者数量达到为该特定主题配置的分区数量为止。

  6. 一旦使用者数量超过分区数量,新的使用者就不会收到任何进一步的消息,除非任何一个现有的使用者取消订阅。之所以出现这种情况,是因为将为Kafka中的每个使用者分配至少一个分区,并且一旦将所有分区分配给现有使用者,新的使用者就必须等待。

  7. 此功能也称为消费者组。同样,Kafka将以非常简单和高效的方式提供这两个系统的最佳选择。

(我不想得到任何荣誉,请将他的荣誉归功于Tutorialspoint:https://www.tutorialspoint.com/apache_kafka/apache_kafka_workflow.htm

相关问题