kafka的High Level Consumer Rebalance

前言

kafka的consumer分为High Level Consumer和Low Level Consumer。本文主要讲High Level Consumer Rebalance,至于High Level Consumer和Low Level Consumer Rebalance的具体内容可以参考这篇博文(https://blog.csdn.net/Poppy_Evan/article/details/86551101)。

Consumer启动及Rabalance流程

1、High Level Consumer启动时将其ID注册到其Consumer Group下,在Zookeeper上的路径为/consumers/[consumer group]/ids/[consumer id]
2、在/consumers/[consumer group]/ids上注册Watch
3、在/brokers/ids上注册Watch
4、如果Consumer通过Topic Filter创建消息流,则它会同时在/brokers/topics上也创建Watch
5、强制自己在其Consumer Group内启动Rebalance流程

Consumer Rebalance算法

1、将目标Topic下的所有Partirtion排序,存于P T
2、对某Consumer Group下所有Consumer排序,存于C G ,第i个Consumer记为C i
3、N=size(P T )/size(C G ) ,向上取整
4、解除C i 对原来分配的Partition的消费权(i从0开始)
5、将第 i∗N 到(i+1)∗N−1个Partition分配给C 

Consumer Rebalance算法缺陷

1、Herd Effect 任何Broker或者Consumer的增减都会触发所有的Consumer的Rebalance

2、Split Brain 每个Consumer分别单独通过Zookeeper判断哪些Broker和Consumer宕机,同时Consumer在同一时刻从Zookeeper“看”到的View可能不完全一样,这是由Zookeeper的特性决定的。

3、调整结果不可控 所有Consumer分别进行Rebalance,彼此不知道对应的Rebalance是否成功。每个consumer都要自己去做监控,自己去做Rebalance,这样会耗费一些机器的性能。每个consumer都自己去做决策,会造成整个集群行为不一致。

4、因为注册了大量的watch,只要有watch被fire consumer都会进行一次rebalance。

猜你喜欢

转载自blog.csdn.net/Poppy_Evan/article/details/86551218