簡體   English   中英

Kafka HLC 應該如何計算主題的分區數量?

[英]How should a Kafka HLC figure out the # of partitions for a topic?

我正在使用kafka 節點HighLevelConsumer,並且在啟動時總是收到重復消息的問題。

為了保持處理順序,我的消費者只是將消息附加到工作隊列,然后我按順序處理事件。 如果我達到隊列高水位線,我會暫停消費者,禁用自動提交,並在我的客戶端代碼完全處理每個事件后“手動”提交。

盡管提交,在啟動時,我總是從一個或多個分區(取決於我的組中正在運行的其他 HLC 的數量)獲得最后一條(先前提交的)消息。 我有點驚訝 HLC 不會給我 (committed+1),但我決定“忽略”偏移量早於提交的偏移量的消息。 作為快速測試,

offset.fetchCommits('fnord', [{topic:'test', partition: 0}, 
                              {topic:'test', partition: 1}, 
                              {topic:'test', partition: 2}, 
                              {topic:'test', partition: 3}], ...

如果我的有效負載列表與定義的分區數匹配,則此方法有效。 如果超過分區數, [BrokerNotAvailableError: Could not find the leader]出現[BrokerNotAvailableError: Could not find the leader]錯誤。

  1. 如果我想更有力地保證我不會丟失消息,如果我的消息處理是異步的並且可能會失敗(即 ETL 作業),我是否正確? kafka-node 只是發出一個 'message' 事件,無法確認它是否已成功處理。
  2. HighLevelConsumer 將讀取最后提交的偏移量(即重復)而不是下一個偏移量的消息是預期的行為嗎?
  3. 獲取主題分區數的最佳方法是什么?

我挖掘了 kafka-node 源,並且有一個未記錄的調用我可以用來獲取分區信息:

client.loadMetadataForTopics(['test'], function(err, results) {..}

(我不喜歡調用似乎不是公共 API 的文檔部分的東西,而且我對返回結果的相當原始的混合數組性質感到不舒服,但它暫時解決了我的問題.)

暫無
暫無

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

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