新服务引入 kafka-clients 3.6.0,连老集群时启动即失败,异常是 UnsupportedVersionException: The broker does not support DESCRIBE_CLIENT_METRICS。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,客户端按自己支持的最高 API 版本发请求,老 broker 没有这个接口。3.x 客户端默认还会尝试新版 FindCoordinator 和元数据请求。
碰到「Kafka 协议版本不兼容」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。
kafka-broker-api-versions.sh --bootstrap-server kafka:9092 | head -20 # pom.xml <version>2.8.2</version>
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
具体做法是,在客户端显式指定 api.version.request 与 brokers 对应的版本;或者把 kafka-clients 降到与集群同代 2.8;升级路径先升 broker 再升客户端 不要反过来;用 kafka-broker-api-versions 核对支持的接口。
最后用这个标准收尾,客户端启动日志里协商到的 API 版本与 broker 一致 不再抛 UnsupportedVersionException。
