问题
最近公司项目中遇到一个问题,就是kafka客户端的消费能力低的问题,项目中是在spring cloud stream中整合kafka使用的,由于消费能力低,导致单条消息处理时间比较长,在压测的时候,大量消息堆积,引发了一系列问题。
处理过程
由于使用的spring cloud微服务框架,国内大部分网站上都搜索不到有用的信息,只能寄希望于官网文档(spring真是太庞大了,眼花缭乱),碍于英文能力比较弱,只能大体看看,找到了相关配置说明,在spring cloud stream中的yml配置文件中添加了如下配置,希望能够并发处理kafka的消息,提高客户端的消费能力
spring:
cloud:
stream:
default:
consumer:
concurrency: 5
但是,生活总是不能让你如意(依旧要保持微笑 ^_^
),当启动stream微服务时,我在控制台输出了下列警告:
The number of expected partitions was: 5, but 1 has been found instead.There will be 4 idle consumers
从输出的内容上看,之前添加的配置应该是没有生效,这让我很困惑(千万只神兽"轻轻地"走过)
解决问题
经过多次百度以及google无果之后,无奈之下,在github上spring-cloud-stream-binder-kafka开源项目上提了一个issue
最后皇天不负有心人,终于得到了有用的答复,还需要在添加一个配置才能生效:
spring.cloud.stream.kafka.binder.autoAddPartitions=true
官方参考文档