一.爲什麼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個消費者無法消費。
- 總結
如下幾張圖所示,當同一個消費者組的消費者數量大於分區數量,那麼註定多出來的消費者無法消費(消費者只能消費組協調器分配給它的分區裏的消息,如果連分區都不給你分配,你也註定無法消費)