kafka一个分区被分配给了多个消费者,StickyAssignor:is assigned to more than one consumer.

雨山前星天外 发表于: 2021-01-28   最后更新时间: 2021-01-28 17:07:06   2,699 游览

提问说明

一共有20个消费者,100个分区,消费端提示某主题某分区被分配给了多个消费者的ERROR信息:

StickyAssignor : [xxx topic]-[xxx partition] is assigned to more than one consumer.

请问,有可能是什么原因导致的呢?

发表于 2021-01-28
¥5.0

你是手动指定消费者的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,和消费者程序每秒的处理能力。

好的,十分感谢大佬的解答!!那我就从大佬提供的方向去分析分析。

你的答案

查看kafka相关的其他问题或提一个您自己的问题