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

雨山前星天外 发表于: 2021-01-28   最后更新时间: 2021-01-28  

提问说明

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

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

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



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: kafka mysql-connector是实时的,所有的connector都是实时的吗?
下一条: kafka如何查看生产者相关信息如ip:port

  • 你是手动指定消费者的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
      
        • 其实之前没添加这个配置的时候也发生过一次,大佬,可以简单说说啥时候(或者在什么异常情况下)会发生组内不同消费者持有同一个分区的情况吗?谢谢!

            • 你的topic只有一个的话,配置策略不会有什么改善。

              你提到rebalance,我想知道这rebalance的时候,错误信息是什么。

              根据我的经验,你很大的概率是一个批次处理消息的时间过长,超过了默认的时间(超过30秒),导致频繁rebalance,在反复rebalance时,并行触发了这个错误。

              你可以增加,来减少在同一时间rebalance的次数

              group.initial.rebalance.delay.ms
              

              默认是3秒。

              你的concurrency = "10"也会加剧这个现象,如果原因是消费者能力不足的情况下。

              问题的重点应该聚焦到为何rebalance比较频繁,这个会导致你的消费能力严重不足。

              同时,也可以关注下消费者节点的cpu,和消费者程序每秒的处理能力。