[英]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]
錯誤。
我挖掘了 kafka-node 源,並且有一個未記錄的調用我可以用來獲取分區信息:
client.loadMetadataForTopics(['test'], function(err, results) {..}
(我不喜歡調用似乎不是公共 API 的文檔部分的東西,而且我對返回結果的相當原始的混合數組性質感到不舒服,但它暫時解決了我的問題.)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.