【问题标题】:Kafka multiple consumer卡夫卡多消费者
【发布时间】:2019-07-03 08:10:47
【问题描述】:

当我们有多个消费者从单个分区的主题中读取时,是否有可能所有消费者都将获得所有消息。 我已经使用手动偏移量提交创建了两个消费者。启动了第一个消费者并在 2 分钟后启动了第二个消费者。第二个消费者正在阅读第一个消费者停止阅读的消息。第二个消费者是否有可能从头开始阅读所有消息。我是kafka的新手,请帮帮我。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    在您的消费者中,您将使用 commitSync 提交上次轮询返回的偏移量。现在,当您启动第二个消费者时,由于它在同一个消费者组中,它将从上次提交的偏移量中读取消息。

    您的消费者将消费的消息取决于它所属的 ConsumerGroup。假设您在单个 Consumer Group 中有 2 个分区和 2 个消费者,那么每个消费者将从不同的分区中读取,这有助于实现并行性。

    因此,如果您希望您的第二个消费者从头开始阅读,您可以做以下两件事之一:

    a) 尝试将第二个消费者放在不同的消费者组中。对于这个消费者组,任何地方都不会存储任何偏移量。此时,auto.offset.reset config 将决定起始偏移量。将auto.offset.reset设置为earliest(将偏移重置为最早的偏移)或latest(将偏移重置为最新的偏移)。

    b) 使用 consumer.seekToBeginning(consumer.assignment()) 查找分配给您的消费者的所有分区的开始

    文档:https://kafka.apache.org/11/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#seekToBeginning-java.util.Collection-

    https://kafka.apache.org/documentation/#consumerconfigs

    【讨论】:

      【解决方案2】:

      分区总是分配给单个消费者组中的唯一消费者,而不考虑多个消费者。这意味着只有消费者可以读取数据,其他人在分区分配给他们之前不会消费数据。当消费者宕机时,会发生分区重新平衡并将其分配给另一个消费者。由于您正在执行手动提交,因此新消费者将从已提交的偏移量开始读取。

      【讨论】:

        猜你喜欢
        • 2018-05-05
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 2015-12-18
        • 2019-03-27
        • 2017-01-07
        • 2018-12-04
        相关资源
        最近更新 更多