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

2023-04-26 12:00:37

一.為什麼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個消費者無法消費。

  • 總結

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

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