【kafka】-分割槽-消費端負載均衡

David.Meng發表於2023-04-26

一.為什麼kafka要做分割槽?

因為當一臺機器有可能扛不住(類比:就像redis叢集中的redis-cluster一樣,一個master抗不住寫,那麼就多個master去抗寫),把一個佇列的單一master變成多個master,即一臺機器扛不住qps,那麼我就用多臺機器扛qps,把一個佇列的流量均勻分散在多臺機器上不就可以了麼。

 二.消費端的負載均衡

2.1.我建立了名為的PartitionTopic的主題,在這個topic裡面建立了3個分割槽,分別為Partition0、Partition1、Partition2,然後我在Partition0分割槽建立訊息a,在Partition1分割槽建立訊息b,在Partition2分割槽建立訊息c

2.2.我啟動第1個消費者,啟動時讓我輸入消費者組名稱,我輸入“MyGroup“

我們看到給第1個消費者,分配了3個分割槽,分別是分割槽0、分割槽1、分割槽2。

2.2.我又啟動第2個消費者,啟動時讓我輸入消費者組名稱,我同樣輸入“MyGroup“

我們看到給啟動的第2個消費者,分配了1個分割槽,是分割槽2。

當我啟動第2個消費者後,第1個消費者的分割槽進行了重新分配,重新分配後,分配了0分割槽、1分割槽。

2.3.我又啟動第3個消費者,啟動時讓我輸入消費者組名稱,我同樣輸入“MyGroup“

 我們看到給啟動的第3個消費者,分配了1個分割槽,是分割槽1。

 啟動第3個消費者後,第1個消費者的分割槽又進行了重新分配,重新分配後,只剩下了0分割槽。

 2.4.我又啟動第4個消費者,啟動時讓我輸入消費者組名稱,我同樣輸入“MyGroup“

啟動第4個消費者後,組協調器沒有給第4個消費者分配分割槽,也就是說第4個消費者無法消費。

  • 總結

如下幾張圖所示,當同一個消費者組的消費者數量大於分割槽數量,那麼註定多出來的消費者無法消費(消費者只能消費組協調器分配給它的分割槽裡的訊息,如果連分割槽都不給你分配,你也註定無法消費)

如果要做消費端的負載均衡,則分割槽數量最好和同一個組的消費者數量一致分割槽數量=一個組內的消費者數量)

 

 

 

相關文章