今天同事那边出现了一个关于kafka无法消费的小问题。
框架是springboot,相同的程序,相同的配置,第一次启动可以消费到数据,第二次启动就无法消费。
经排查原因是:
request.timeout.ms配置的时间太长,且第一次退出程序时,是强制退出,并不是优雅的关闭资源后退出。
这样导致kafka服务端针对该groupId的消费者仍然在拉取消息(TCP的特性)。后启动的程序由于groupId相同,无法分配到partition。故无法消费
解决方案:
1、程序优雅的关闭,不要强制退出。这样spring容器就会优雅的关闭客户端,进而让服务端能感知到
2、将request.timeout.ms时间设置比较短,或直接使用默认的配置,不再另行配置