【问题标题】:How to advance the consumer offset in a Kafka consumer group to the end?如何将Kafka消费者组中的消费者偏移量提前到最后?
【发布时间】:2020-09-10 15:33:23
【问题描述】:

是否有一种简单的方法——使用 Kafka REST API——将消费者组中所有分区上的消费者偏移量推进到分区的末尾?实际上,有时我想跳过消费所有剩余的消息——例如,如果我预计会重新生成它们。

我知道我可以检索消费者组、检索分区、循环并查找每个分区——有没有更简单的方法?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    根据post--consumers-instances-positions-end 上的文档,您可以通过以下请求为ConsumerGroup 执行此操作:

    POST /consumers/testgroup/instances/my_consumer/positions/end HTTP/1.1
    Host: proxy-instance.kafkaproxy.example.com
    Content-Type: application/vnd.kafka.v2+json
    
    {
      "partitions": [
        {
          "topic": "test",
          "partition": 0
        },
        {
          "topic": "test",
          "partition": 1
        }
    
      ]
    }
    

    不过,还是需要提前知道ConsumerGroup订阅的topic和partition。

    编辑:

    我有时想跳过消费所有剩余的消息

    我在这里看到了多个选项,但在我看来,它们都相当老套,也没有使用 Kafka Rest API。

    选项 1

    将主题的保留时间(retention.ms)更改为一个较小的值(如1),稍等片刻让 LogCleaner 删除所有消息并将保留时间改回正常。然后生成新的替代数据。

    选项 2

    将所有消费者的 ConsumerGroup 名称更改为新的 ConsumerGroup(配置 group.id),并通过设置 auto.offset.reset=latest 让消费者从主题末尾读取。然后生成新的替代数据。

    选项 3

    与我最初的回答类似,使用 Kafka 工具 kafka-consumer-groups 手动将消费者组的偏移量(例如“myConsumer”)更改为结束偏移量:

    bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --reset-offsets --group myConsumer --topic myTopic --to-latest
    

    【讨论】:

    • 我可以处理的主题,但我仍然需要获取分区。打电话只做所有分区会很酷吗?还是很有帮助的。谢谢。
    • 嗯,这似乎表明它将推动某个实例的偏移量。知道如何对所有现有实例执行此操作吗?我的用例是我希望所有消费者跳过所有剩余的未使用数据,例如,当它无效并且我即将为该主题生成新的替代数据时。有没有更好的办法?
    • 嗨@PatrickSzalapski,我在如何处理这个用例的答案中添加了一些替代方案。
    • 你能帮我了解在哪里可以获得 kafka-consumer-groups 吗?我有 Windows 和 debian。
    • 它是一个命令行工具,应该位于你的Kafka安装目录中。
    猜你喜欢
    • 2016-12-06
    • 2022-11-13
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多