【问题标题】:Kafka Topic And Offset卡夫卡主题和偏移量
【发布时间】:2020-06-04 10:10:51
【问题描述】:

我有一个问题,假设有一个TOPIC T1,并且有两个Consumer C1和C2属于两个不同的组并且当前偏移量为0。我们知道Kafka为消费者维护了Offset。所以如果C1消费消息并且偏移量变为 1 那么如果 C2 使用消息会发生什么情况,它是从 1 偏移量开始还是从 0 偏移量开始使用消息?表示如何为两个不同的消费者组维护偏移量?

谢谢

【问题讨论】:

标签: apache-kafka


【解决方案1】:

Kafka 维护每个消费者组、主题和分区的消费者偏移量,这意味着,如果您在同一主题上有多个具有不同消费者组的消费者,它将单独维护每个组的偏移量。所以,在这种情况下,如果消费者 1 读取消息,消费者 2 的偏移量不会受到影响,只要它属于不同的消费者组。

【讨论】:

    【解决方案2】:

    正如您所提到的,有两个不同组的消费者。因此,在这种情况下,C2 将从一开始就消耗。这意味着偏移量将在 C2 消费者中从 0 开始。仅当您在两个消费者中使用相同的组时,偏移量才可能不同。

    【讨论】:

      【解决方案3】:

      如果您有两个具有不同组 ID 的 Kafka 消费者,他们将读取分区而不会相互干扰。这意味着两个消费者将独立阅读完全相同的一组消息。如果您有四个具有不同组 ID 的 Kafka 消费者,他们都会读取所有分区等。

      至于回答您的问题,C1 将从偏移量0 读取,C2 也将从偏移量0 读取,因为它们属于两个不同的组。

      【讨论】:

        【解决方案4】:

        当消费者属于不同的消费者组时,他们应该使用与发布/订阅模式相同的消息。当他们在同一个消费者组中时,他们正在“竞争”并阅读主题的不同分区(在订阅时分配),因此他们不会收到相同的消息。 消费者偏移量保存在内部 __consumer_offset 主题中,消息格式如下:

        key = [组、主题、分区] 值 = 偏移量

        如您所见,对于不同的组但相同的主题/分区,那里保存了不同的偏移量。

        【讨论】:

          【解决方案5】:

          每当创建新的 ConsumerGroup 并且消费者尝试从主题中读取数据时,消费者总是从主题的开头(偏移量 0)获取数据。

          Kafka 维护每个 ConsumerGroup 的偏移量。即使消费者不在 ConsumerGroup 中,也会将消费者添加到 Kafka 生成的组中,以维护此类消费者的偏移量。此过程针对所有个人消费者进行。

          在您的情况下,消费者 C2 将因此从偏移量 0 读取数据。

          【讨论】:

            猜你喜欢
            • 2018-04-04
            • 1970-01-01
            • 2019-05-18
            • 1970-01-01
            • 2016-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多