You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka客户端3.4.0连接2.8.1服务器出现异常日志问题咨询

Kafka客户端升级至3.4.0后出现DisconnectException及Node -1断开日志的原因与解决办法

问题现象

客户端从2.5.1升级至3.4.0后,线上服务器版本为2.8.1,程序启动后出现DisconnectException及Node -1 disconnected的INFO级日志,但实际可正常收发消息,切回2.5.1客户端后日志消失。

相关日志

2023-08-02 16:14:24.892  INFO 48784 --- [est,test1,test2] o.a.kafka.clients.FetchSessionHandler    : [Consumer clientId=consumer-sos2-1, groupId=sos2] Error sending fetch request (sessionId=INVALID, epoch=INITIAL) to node 101578:
org.apache.kafka.common.errors.DisconnectException: null

Then, about nine minutes passed, it shows that.
2023-08-02 16:23:01.824  INFO 48784 --- [ad | producer-3] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-3] Node -1 disconnected.
2023-08-02 16:23:06.216  INFO 48784 --- [est,test1,test2] org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-sos2-1, groupId=sos2] Node -1 disconnected.
2023-08-02 16:23:10.299  INFO 48784 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Node -1 disconnected.
2023-08-02 16:23:10.844  INFO 48784 --- [ad | producer-2] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-2] Node -1 disconnected.

原因分析

  1. 版本协议兼容性差异:3.4.0客户端引入了部分新的协议特性(如Fetch Session优化逻辑),与2.8.1服务器交互时,初始请求因版本协商不匹配触发短暂断开,客户端后续会自动降级重试,因此不影响业务但会生成日志。
  2. 连接空闲超时触发:3.4.0客户端默认connection.max.idle.ms为9分钟(540000ms),与日志中9分钟后出现断开的时间点完全吻合。当连接空闲达到超时时间,客户端会主动关闭连接,重新建立连接过程中会触发Node -1 disconnected日志(Node -1是客户端标记“未找到可用节点”的虚拟标识)。
  3. 元数据刷新逻辑变化:3.4.0客户端的元数据刷新机制与2.5.1不同,若元数据缓存过期或刷新不及时,会导致客户端临时找不到可用节点,进而生成断开日志,后续元数据更新后恢复正常。

解决办法

1. 适配服务器版本,调整客户端协议配置

在客户端配置中显式指定兼容服务器的版本,避免使用服务器不支持的新特性:

# 强制客户端适配Kafka 2.8.1版本的协议
min.kafka.version=2.8.1
# 启用API版本请求,确保客户端与服务器协商兼容的协议版本
api.version.request=true

2. 调整连接空闲超时配置

将客户端connection.max.idle.ms调整为与服务器一致或更长时间(服务器2.8.1默认connections.max.idle.ms为10分钟),避免因空闲超时触发不必要的连接断开:

# 设置连接空闲超时为10分钟(与服务器默认值一致)
connection.max.idle.ms=600000

3. 优化元数据刷新配置

调整元数据刷新间隔,确保客户端及时获取最新的集群节点信息:

# 缩短元数据刷新间隔至3分钟,减少元数据过期概率
metadata.max.age.ms=180000

4. 临时屏蔽日志(治标方案)

若业务不受影响且无需排查此类日志,可调整日志框架配置,将相关类的日志级别从INFO提升至WARN或ERROR:

  • 对于Logback,在logback.xml中添加:
<logger name="org.apache.kafka.clients.FetchSessionHandler" level="WARN"/>
<logger name="org.apache.kafka.clients.NetworkClient" level="WARN"/>
  • 对于Log4j2,在log4j2.xml中添加:
<Logger name="org.apache.kafka.clients.FetchSessionHandler" level="WARN"/>
<Logger name="org.apache.kafka.clients.NetworkClient" level="WARN"/>

内容的提问来源于stack exchange,提问作者HIKARIZT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:17:46