簡體   English   中英

有沒有辦法通過 API 重置 Kafka 消費者組的偏移量?

[英]Is there a way to reset offsets of a Kafka consumer group through an API?

我有一個用例,其中有一個消費組正在消費消息。 我想構建一個 API 來修改它的偏移量。 因此,當使用偏移量調用端點時,我必須更改消費者組的偏移量。 我正在使用 SpringBoot,消費者是使用 Spring Kafka 構建的。 提前致謝。

這是通過CLI的解決方案:

列出該組訂閱的主題:

kafka-consumer-groups --bootstrap-server <kafkahost:port> --group <group_id> --describe

注意“CURRENT-OFFSET”和“LOG-END-OFFSET”下的值。 “CURRENT-OFFSET”是這個消費者組當前在每個分區中的偏移量。

重置主題的消費者偏移量(預覽):

kafka-consumer-groups --bootstrap-server <kafkahost:port> --group <group_id> --topic <topic_name> --reset-offsets --to-earliest

這將打印重置的預期結果,但不會實際運行它。

重置主題的消費者偏移量(執行):

kafka-consumer-groups --bootstrap-server <kafkahost:port> --group <group_id> --topic <topic_name> --reset-offsets --to-earliest --execute

這將執行重置並將指定主題的消費者組偏移量重置為 0。

重復1檢查是否重置成功

Spring for Apache Kafka提供了一些方便的機制來執行搜索,無論是在應用程序初始化期間,還是在之后的任何時間。

最簡單的方法是讓您的偵聽器擴展AbstractConsumerSeekAware或實現ConsumerSeekAware

要重置偏移量,代碼必須通過組 ID 獲取消費者、開始和停止。 必須創建一個客戶端(當消費者停止時)。 創建客戶端后,代碼必須連接、重置偏移量,然后斷開連接(如下所示)。 一旦重置,消費者組必須再次重新啟動。

下面的代碼重置偏移量。 關鍵是讓消費者實例能夠停止和啟動消費者,因為如果消費者正在運行,它就無法重置。 我們從命令行運行它,這很好。 希望這會有所幫助。

return kafka.getConsumer( args.groupId )
    .then(consumerInstance => {
        consumer = consumerInstance;
        return consumer.run();
    }).then(()=> {
        return consumer.stop();
    }).then(() => {
         // reset kafka client offset
    })).then(()=> {
        return consumer.run();
    }).

// reset kafka client offset
const { groupId, topic } = args;

const admin = createKafkaClient().admin();

return admin.connect()
    .then(() =>
        admin.resetOffsets({
            groupId,
            topic,
            earliest: true,
    })
    .then(() => admin.disconnect();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM