Kafka生产者频繁报disconnected警告但消息发送正常问题排查
AWS MSK IAM认证下Kafka Producer频繁弹出断开连接警告的原因分析
问题现象
每秒都会收到如下警告日志:
10:26:00.055 [kafka-producer-network-thread | producer-1] WARN o.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Bootstrap broker whatever-gravito.kafka.us-east-1.amazonaws.com:9098 (id: -4 rack: null) disconnected
配置信息(Spring Boot自动配置)
spring.kafka.bootstrap-servers=whatever-gravito.kafka.us-east-1.amazonaws.com:9098 spring.kafka.security.protocol=SASL_SSL spring.kafka.properties.sasl.mechanism=AWS_MSK_IAM spring.kafka.properties.sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required; spring.kafka.properties.sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
异常特征
- 消息仍能正常发送,业务不受影响
- 本地笔记本使用相同配置无此警告,消息发送正常
- 同配置的消费者无此警告,消息消费正常
- 使用非认证的9092端口连接时无此警告
当前依赖版本
spring-kafka:3.0.11 + aws-msk-iam-auth:2.0.3
原因分析
Producer与Consumer的元数据刷新逻辑差异
Kafka Producer会定期主动刷新集群元数据,在AWS MSK IAM认证场景下,Producer完成元数据获取后会主动断开与Bootstrap Broker的连接,这一行为被Kafka客户端日志捕捉输出为警告。而Consumer的元数据刷新机制更偏向于按需触发,不会产生同样的断开日志。环境网络与日志配置差异
本地环境和服务器环境的网络策略、TCP连接超时参数不同,本地环境中TCP连接断开的行为未触发日志输出;另外也可能是本地日志级别配置更宽松,未记录该级别的警告。IAM认证的连接生命周期特性
aws-msk-iam-auth库在处理Producer的SASL认证流程时,连接生命周期管理逻辑和非认证场景(9092端口)不同:非认证场景下连接会被复用,而IAM认证场景下每次元数据刷新后都会断开Bootstrap连接,进而触发警告。依赖版本的兼容性细节
spring-kafka 3.0.11对应的Kafka客户端版本(3.3.x系列)与aws-msk-iam-auth 2.0.3之间存在交互细节差异,导致这种正常的连接断开行为被日志标记为警告,但实际不影响消息发送功能。
内容的提问来源于stack exchange,提问作者AlikElzin-kilaka
相关产品推荐
相关产品推荐

