【问题标题】:Kafka consumer is not reading message sent by producer if started after producer如果在生产者之后启动,Kafka 消费者不会读取生产者发送的消息
【发布时间】:2018-11-06 02:07:05
【问题描述】:

我找到了属性 auto.offset.reset=earliest 或 auto.offset.reset=latest。

现在这是我的场景,有 1 个主题、1 个分区、1 个消费者

例如,我已经开始制作制作人。 Producer 向 Topic 发送 100 条记录。现在我开始消费者。根据属性 auto.offset.reset=earliest 我的消费者将从 0 分区索引开始读取记录。 现在,如果我的消费者对 1-100 条记录进行异步提交并失败。同时生产者发送100多条记录。当消费者上来时,是从分区的0索引开始读取消息还是从分区的101索引开始读取并处理从101到200的记录。

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api


    【解决方案1】:

    从 Kafka 0.9 开始,如果您的提交成功,Kafka 会将消费者的进度存储在一个特殊的内部主题 __consumer_offsets 中。该主题将每个消费者组消耗的偏移量存储在主题和分区上。

    因此,当您的消费者再次启动时(在同一个消费者组中!),它将继续从上次提交的偏移量(在您的示例中为 101)读取。 auto.offset.reset 指定在__consumer_offsets 中没有信息的情况下的行为(您还没有任何提交)。

    【讨论】:

      【解决方案2】:

      偏移量与此无关。 U 应该将其配置为从头开始读取的属性。在java中有类似seektobeginning的东西

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-21
        • 2018-12-13
        • 1970-01-01
        相关资源
        最近更新 更多