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

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

  • 總結

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

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章