[英]Kafka consumer offsets out of range with no configured reset policy for partitions
[英]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.