亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將新的多線程使用者添加到組時是否會發生重新平衡

將新的多線程使用者添加到組時是否會發生重新平衡

忽然笑 2022-07-06 19:08:17
假設只有一個具有 20 個分區的主題和一個消費者組,其中只有一個消費者實例從該主題消費。如果這個消費者實例有 20 個線程,在重新平衡后,Kafka 會將每個分區分配給一個線程,這是理想的(一個線程到一個分區)但在這一點上;如果將另一個具有 20 個線程的消費者實例添加到此消費者組會發生什么?我想選項會是這樣的;1 - 不會發生重新平衡,第二個消費者保持空閑狀態。(因為 20 個線程已經足夠 20 個分區了)2 - 發生重新平衡,10 個分區分配給第一個使用者,其他 10 個分區分配給第二個使用者。(每個消費者 10 個線程將處于空閑狀態)實際上,我猜第二種選擇更理想。因為我們通過添加另一個實例來拆分工作。那么在這種情況下會發生什么情況呢?卡夫卡能順利處理這個案子嗎?或者添加另一個實例只是浪費?編輯:我使用“實例”這個詞作為微服務實例而不是 KafkaConsumer 實例順便說一句。
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

主題的分區如何分配取決于PartitionAssignor消費者組的組長使用的。加入組的組中的第一個消費者成為領導者。如果新的消費者加入到已經運行的組中,消費者會Leader根據其PartitionAssignor將分區分配給組中的特定消費者。

您可以PartitionAssignor使用partition.assignment.strategy. 默認值為org.apache.kafka.clients.consumer.RangeAssignor。如果您想更改小組的分配策略,您可以使用不同的策略或實施自定義策略。

如果你去RangeAssignor https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html的javadoc ,你可以找到如下:

范圍分配器在每個主題的基礎上工作。對于每個主題,我們按數字順序排列可用分區,按字典順序排列消費者。然后,我們將分區數除以消費者總數,以確定分配給每個消費者的分區數。如果不均勻劃分,那么前幾個消費者將有一個額外的分區。例如,假設有兩個消費者 C0 和 C1,兩個主題 t0 和 t1,每個主題有 3 個分區,產生分區 t0p0、t0p1、t0p2、t1p0、t1p1 和 t1p2。分配將是: C0: [t0p0, t0p1, t1p0, t1p1] C1: [t0p2, t1p2]

在您的情況下RangeAssignor),您不知道新線程是否會空閑。這取決于它獲得的消費者 ID,例如。新實例中的第一個線程可能空閑,但第二個可能開始處理數據。

根據有問題的新信息進行更新


查看完整回答
反對 回復 2022-07-06
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

添加另一個 Kafka 消費者在這里沒有用。第二個消費者中的所有線程都將保持空閑狀態。
一個分區只能分配給一個消費者。雖然,反過來是不正確的。一個消費者可以從 n 個分區中讀取數據。
雖然我不會說添加第二個消費者完全是浪費。您的第二個消費者將充當 HA。如果您的第一個消費者應用程序死了,第二個消費者應用程序將開始從 Kafka 獲取數據。

查看完整回答
反對 回復 2022-07-06
  • 2 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號