7

【kafka】-分区-消费端负载均衡 - David.Meng

 1 year ago
source link: https://www.cnblogs.com/menglin2010/p/17354885.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【kafka】-分区-消费端负载均衡

一.为什么kafka要做分区?

因为当一台机器有可能扛不住(类比:就像redis集群中的redis-cluster一样,一个master抗不住写,那么就多个master去抗写),把一个队列的单一master变成多个master,即一台机器扛不住qps,那么我就用多台机器扛qps,把一个队列的流量均匀分散在多台机器上不就可以了么。

42037-20230426101757647-734915921.jpg

 二.消费端的负载均衡

2.1.我创建了名为的PartitionTopic的主题,在这个topic里面创建了3个分区,分别为Partition0、Partition1、Partition2,然后我在Partition0分区创建消息a,在Partition1分区创建消息b,在Partition2分区创建消息c

42037-20230426102430280-1097251730.png

2.2.我启动第1个消费者,启动时让我输入消费者组名称,我输入“MyGroup“

我们看到给第1个消费者,分配了3个分区,分别是分区0、分区1、分区2。

42037-20230426102617640-1888503010.png

2.2.我又启动第2个消费者,启动时让我输入消费者组名称,我同样输入“MyGroup“

我们看到给启动的第2个消费者,分配了1个分区,是分区2。

当我启动第2个消费者后,第1个消费者的分区进行了重新分配,重新分配后,分配了0分区、1分区。

42037-20230426102903949-2138376695.png
42037-20230426103007799-1701793716.png

2.3.我又启动第3个消费者,启动时让我输入消费者组名称,我同样输入“MyGroup“

 我们看到给启动的第3个消费者,分配了1个分区,是分区1。

 启动第3个消费者后,第1个消费者的分区又进行了重新分配,重新分配后,只剩下了0分区。

42037-20230426103201792-1114692962.png

 2.4.我又启动第4个消费者,启动时让我输入消费者组名称,我同样输入“MyGroup“

启动第4个消费者后,组协调器没有给第4个消费者分配分区,也就是说第4个消费者无法消费。

42037-20230426103348173-671136323.png
  • 总结

如下几张图所示,当同一个消费者组的消费者数量大于分区数量,那么注定多出来的消费者无法消费(消费者只能消费组协调器分配给它的分区里的消息,如果连分区都不给你分配,你也注定无法消费)

如果要做消费端的负载均衡,则分区数量最好和同一个组的消费者数量一致

42037-20230426104016852-74720316.jpg
42037-20230426104040310-2004136871.jpg
42037-20230426104104599-1806768.jpg
42037-20230426104142795-1357951279.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK