【问题标题】:Workflow of Queue Messaging / Consumer Group?队列消息传递/消费者组的工作流程?
【发布时间】:2017-06-22 13:44:50
【问题描述】:

假设我有消费者组 G1,它有三个消费者 C1、C2 和 C3。所有人都订阅了具有单个分区的主题 1。现在 Producer 在 partition1、broker 上产生 3 条消息 将向每个消费者移交 1 条消息。 对吗?

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

  1. 单个消费者订阅特定主题,假设“Topic-01”和“Group ID”为 “第 1 组”。
  2. Kafka 以与 Pub-Sub 消息传递相同的方式与消费者交互,直到新的 消费者订阅了相同的主题“Topic-01”,其“Group ID”与“Group-1”相同。
  3. 一旦新的消费者到达,Kafka 将其操作切换到共享模式并共享 两个消费者之间的数据。 本次分享将持续到消费者人数 达到为该特定主题配置的分区数。
  4. 一旦消费者数量超过分区数量,新消费者将 在任何现有消费者取消订阅之前,不会收到任何进一步的消息。 出现这种情况是因为 Kafka 中的每个消费者将至少分配一个 分区,一旦所有分区都分配给现有的消费者,新的 消费者将不得不等待。

如果我经过 3/4 点,只有消费者 1 会收到所有消息,因为消费者数量(即 3)大于分区数量(即 1)?这是否意味着我需要总共创建 3 个分区,并且 G1 组将订阅所有 3 个分区,以便每个消费者每个收到一条消息?

【问题讨论】:

    标签: java apache-kafka


    【解决方案1】:

    如果我经过 3/4 点,只有消费者 1 会收到所有消息,因为消费者数量(即 3)大于分区数(即 1)

    是的。它可以是三者之一。

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

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

    【讨论】:

    • Yes. It could be either one of the three. 可以是这样吗:- C1 可以使用第一条消息。 C2 排名第 2,C3 排名第 3 还是永远是同一个消费者?
    • No 一旦分区被分配给组内的消费者,分配保持不变,直到消费者取消订阅或停止,或者分区数量发生变化或新的消费者加入组。因为它是一个动态分配,这就是我提到三个消费者之一的原因。
    • No once the partition is assigned to a consumer within a group, assignment remains the same... 谁将分区分配给消费者?我相信选择分区并拉取消息的消费者?
    【解决方案2】:

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

    • competiting/consumer :当消费者在同一个消费者组中从一个主题接收时,主题中的每个分区都分配给一个且只有一个消费者。意思就是如果消费者多于分区,剩下的消费者就会处于空闲状态,不会收到消息。在您的示例中,唯一的一个分区将分配给仅一个消费者,该消费者将是唯一接收消息的消费者;其他消费者将处于空闲状态。分区的数量定义了消费者方面的并行度。

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

    【讨论】:

      【解决方案3】:

      让我们来看看这个系统的Proofed实际工作流程:

      1. 生产者定期向主题发送消息。

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

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

      4. Kafka 以与 Pub-Sub 消息传递相同的方式与消费者交互,直到新的消费者订阅相同的主题“Topic-01”,其组 ID 与“Group-1”相同。

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

      6. 一旦消费者数量超过分区数量,新的消费者将不会收到任何进一步的消息,直到任何一个现有消费者取消订阅。出现这种情况是因为 Kafka 中的每个消费者至少会被分配一个分区,一旦所有分区都分配给现有消费者,新消费者将不得不等待。

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

      (我不想接受任何功劳,请将他的功劳归功于 Tutorialspoint:https://www.tutorialspoint.com/apache_kafka/apache_kafka_workflow.htm

      【讨论】:

        猜你喜欢
        • 2013-05-08
        • 2015-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 2023-03-28
        • 2013-08-08
        相关资源
        最近更新 更多