提问说明 一共有20个消费者,100个分区,消费端提示某主题某分区被分配给了多个消费者的ERROR信息: StickyAssignor : [xxx topic]-[xxx partition] is assigned to more than one consumer. 请问,有可能是什么原因导致的呢?
你是手动指定消费者的topic分区,还是动态分配的?
提供一下操作方式,对应的kafka版本。
Kafka version:2.0.1;
消费程序使用
spring-kafka 2.2.5
,启了两台消费程序;方法上添加注解
@KafkaListener(id = "aKlineSnapshot3484555", topics = MQConstant.US_STOCK_DATA_SNAPSHOT, concurrency = "10", containerFactory = "defaultKafkaListenerContainerFactory")
没有手动指定消费者的分区;
配置:
partition.assignment.strategy : org.apache.kafka.clients.consumer.StickyAssignor max.poll.records : 400 auto.offset.reset : latest
partition.assignment.strategy : org.apache.kafka.clients.consumer.StickyAssignor
删除吧,用默认的分区策略。
其实之前没添加这个配置的时候也发生过一次,大佬,可以简单说说啥时候(或者在什么异常情况下)会发生组内不同消费者持有同一个分区的情况吗?谢谢!
当时是发生了多次的rebalance。
你的topic只有一个的话,配置策略不会有什么改善。
你提到rebalance,我想知道这rebalance的时候,错误信息是什么。
根据我的经验,你很大的概率是一个批次处理消息的时间过长,超过了默认的时间(超过30秒),导致频繁rebalance,在反复rebalance时,并行触发了这个错误。
你可以增加,来减少在同一时间rebalance的次数
group.initial.rebalance.delay.ms
默认是3秒。
你的concurrency = "10"也会加剧这个现象,如果原因是消费者能力不足的情况下。
问题的重点应该聚焦到为何rebalance比较频繁,这个会导致你的消费能力严重不足。
同时,也可以关注下消费者节点的cpu,和消费者程序每秒的处理能力。
好的,十分感谢大佬的解答!!那我就从大佬提供的方向去分析分析。
你的答案