簡體   English   中英

Kafka Consumer Group:僅閱讀新消息

[英]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.

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