[英]Kafka Consumer Group: read new messages only
我正在使用kafka-node
ConsumerGroup從Kafka中讀取消息。 我想從該主題中讀取新消息,即不是所有以前未使用的消息,而是僅在創建ConsumerGroup后到達的消息。
僅當給定的groupId沒有存儲的偏移量時, fromOffset: 'latest'
選項fromOffset: 'latest'
。 我可以通過在每次創建ConsumerGroup時創建一個新的groupId來使用它,但是我想避免這種方法,因為這會在kafka服務器上創建大量的groupId和存儲的偏移量。
我還嘗試將偏移量手動設置為-1
如下所示:
offset = new kafka.Offset(consumer.client);
offset.commit(groupId, [{ topic: topic, partition: 0, offset: -1 }],
function (err, data) {
logger.debug("tried to set offset: ", data);
if (err) logger.error("error", err);
})
);
這將返回錯誤代碼0(應該成功),但是ConsumerGroup隨后會收到舊消息。
卡夫卡版本:0.10.0卡夫卡節點:1.6.2
commit(groupId, payloads, cb)
offset.commit的第一個參數應該是groupId,而不是clientId。
您應該將消費者的組名傳遞給它。
使用以下選項啟動kafka ConsumerGroup:
autoCommit: false,
fromOffset: 'latest'
創建一個ConsumerGroup,它將永遠不會向Kafka提交偏移(除非您手動進行,這是不需要的)。 因此,啟動時它將始終選擇“最新”選項。
對於所有注意到,即使將'autoCommit'設置為'false'的人,都進行了一次小小的更新,上述解決方案仍然無法正常工作,並且偏移量仍存儲在組中:請確保在選項對象中設置其他標志: commitOffsetsOnFirstJoin:false 。 如果未設置標志,則偏移量將按組存儲,並且一旦第二次啟動,它將獲得所有從該偏移量開始的消息
我希望這可以節省很多時間;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.