一个项目同时使用两个consumer消费两个topic,在配置文件中配置了consumer的默认groupid,未给两个consumer指定各自的groupid,于是两个consumer都使用同一个groupid
spring.kafka.consumer.group-id=test-message-group
但在断点调试过程中发现两个consumer偶尔正常工作,偶尔却在不断的rebanlance,并且伴随着心跳发送失败。特别在频繁读取数据或者断点调试时间比较长的时候频繁出现。而在一个consumer无法成功rebanlance时,无法消费数据。
异常状态的输出日志如下,一个consumer无法完成rebanlance,另一个conumser则无法发送心跳
消费者在zookeeper中注册中,消费者注册标识符(Consumer Identifiers Registry)是保存在zookeeper的/consumers/[group_id]/ids/[consumer_connector_id]的路径下,这些消费者注册节点形成一棵树,当有消费者加入或离开时,树上所有的消费者都会被通知到,从而进行rebanlance。
消费者在zookeeper注册的路径与topic并没有关系,反而与groupid绑定,这是因为同一个consumer可以消费不同的topic。如果不同的consumer使用同一个groupid消费不同的topic,而任何一个topic的consumer出现加入或离开等变化时,所有groupid组里的consumer都会发生rebanlance。从而可能导致上面调试时出现的问题。
https://www.cnblogs.com/zhaoshizi/p/12297646.html