Spring Kafka中ConcurrentMessageListenerContainer消费者线程命名规则疑问
Spring-Kafka消费者线程末尾序号生成规则解答
你观察到的线程名test-consumer-group-0-C-1中末尾的1是单KafkaMessageListenerContainer实例下消费者线程的全局自增序号,具体生成逻辑如下:
- 该序号由Spring-Kafka内部为消费者线程创建的专用ThreadFactory维护,是一个原子递增计数器,每创建一个新的消费者线程,计数器就加1,赋值到末尾X的位置
- 默认配置下,每个ConcurrentMessageListenerContainer拆分的子KafkaMessageListenerContainer实例只会初始化1个消费者线程,所以首次启动时你看到的X固定为1
- 只有当消费者线程出现异常销毁、消费容器主动重启/恢复等场景,同一个子容器需要创建新的消费者线程时,X才会递增,比如第二次创建对应X=2,第三次为3,以此类推
- 该命名规则的实现可直接在
org.springframework.kafka.listener.KafkaMessageListenerContainer类的消费者线程初始化逻辑中查看
线程名完整结构说明
你提到的[group-id]-[并发实例序号]-C-X各字段对应含义:
group-id:对应配置项spring.kafka.consumer.group-id的值,你的场景为test-consumer-group并发实例序号:ConcurrentMessageListenerContainer根据配置项spring.kafka.listener.concurrency启动的子容器索引,从0开始计数,你配置concurrency=2,所以会存在序号0、1两个子容器C:固定标识,代表该线程是Kafka消费者线程X:就是你咨询的线程自增序号
内容的提问来源于stack exchange,提问作者recursion
相关产品推荐
相关产品推荐

