Spring Boot Kafka的application.yml配置及@KafkaListener线程问题咨询
Spring Boot整合Kafka问题解答
问题1:fetch-max-bytes参数合法性与生效说明
fetch-max-bytes是Kafka消费者的合法原生配置属性,对应Kafka官方的fetch.max.bytes参数,Spring Boot已经完成了属性映射,你只需将该配置放在spring.kafka.consumer前缀下即可正常生效。
你配置的52428800(即50MB)是该参数的默认值,作用为限制消费者单次向Broker拉取的消息总大小,完全符合你控制消费者拉取行为的需求。
注意:该参数仅限制单次拉取的总数据量,若单条消息大小超过该配置值,消费者仍可正常拉取到该消息。如果需要限制单分区单次拉取的最大数据量,需额外配置
max-partition-fetch-bytes参数。
问题2:@KafkaListener多线程处理逻辑说明
默认情况下@KafkaListener不会自动启动多个线程处理消息,默认监听容器只会启动单线程,按顺序拉取、消费消息。如果需要开启多线程消费,你可以通过两种方式手动配置:
- 为单个
@KafkaListener单独配置concurrency参数,示例:
上述配置会为该监听器启动3个消费线程,注意线程数不要超过你监听的Topic的总分区数,否则多余线程会因为分配不到分区闲置。@KafkaListener(id = "instance1", groupId = "${spring.kafka.consumer.group-id}", topics = "${spring.kafka.consumer.topic}", concurrency = "3") - 全局配置
spring.kafka.listener.concurrency参数,该配置会对所有@KafkaListener生效。
注意:开启多线程消费前需确保你的消费逻辑是线程安全的,避免共享变量引发的并发问题。
内容的提问来源于stack exchange,提问作者raikumardipak
相关产品推荐
相关产品推荐

