1 同一个订阅组内不同Consumer实例订阅不同topic消费混乱问题调查
图1:
背景说明:
如图1左半部分,假设目前的关系如下:
broker: 两个,broker_a和broker_b
topic:两个,topic1和topic2,每个topic在每个broker上分为4个queue
consumer:两个,consumer1和consumer2,都属于group1,分属于不同的jvm运行。
默认情况下,topic和queue的对应关系是:
topic1 broker_a q0~q3,
topic1 broker_b q0~q3,
topic2 broker_a q0~q3,
topic2 broker_b q0~q3
rebalance流程开始:
假设consumer1先启动,consumer1最终通过rebalance对应关系如下:
topic1 broker_a q0~q3,
topic1 broker_b q0~q3
接着consumer2启动,consumer2具体rebalance流程如下:
关键点在5.2,会把consumer1也抓下来,接着根据分配策略会导致consumer2只消费broker_b上topic2对应的q0~q3。
同样,consumer1也会进行rebalance,进而使其只消费broker_a的topic1对应的q0~q3,最终导致其关系变为图1中右图所示。
consumer端警告日志:
rebalance完成之后,consumer端间断打印如下异常:
14:22:04.005 [NettyClientPublicExecutor_3] WARN R