升级Spring Boot到2.5.5后出现Kafka依赖库兼容报错问题
问题原因排查
你遇到的java.lang.NoSuchMethodError:kafka.server.KafkaServer.xxx报错本质是Kafka相关依赖版本冲突,具体触发原因有以下几点:
- 版本兼容不匹配:Spring Kafka 2.7.x系列官方适配的kafka-clients版本为2.7.x,你手动将kafka-clients升级到2.8.1跨了小版本,API层面已经出现不兼容。
- Confluent依赖隐性传递冲突:
- 你引入的
kafka-connect-replicator:5.3.4对应Apache Kafka 2.3.x版本,你仅排除了kafka_2.11,但它还会传递引入其他低版本Kafka服务端相关依赖,低版本的KafkaServer类和高版本kafka依赖的API签名不一致,直接触发方法找不到报错。 kafka-avro-serializer:5.5.1对应Apache Kafka 2.5.x版本,和当前整套Spring Kafka 2.7.x的适配版本也存在差异,同样可能引入隐性冲突依赖。
- 你引入的
- 测试依赖版本未统一:
spring-kafka-test如果用到嵌入式Kafka能力,默认会传递对应版本的Kafka服务端依赖,没有显式声明版本的情况下,也会和其他传递进来的低版本Kafka类冲突。
解决方案
- 回退kafka-clients版本到2.7.x系列(比如2.7.9),和Spring Kafka 2.7.7的适配要求对齐,不要跨版本升级。
- 完善Confluent依赖的排除规则,在
kafka-connect-replicator和kafka-avro-serializer的排除项中,增加所有org.apache.kafka下服务端相关依赖的排除(比如kafka_2.12、kafka-server等),确保只有你显式声明的Kafka依赖生效。 - 统一Confluent依赖版本:将两个Confluent依赖都升级到对应Kafka 2.7.x的版本(Confluent 6.1.x系列对应Kafka 2.7.x),保持整套依赖的版本适配性。
- 若使用了嵌入式Kafka做测试,可在pom中显式声明
kafka_2.13/kafka_2.12的版本为2.7.x系列,覆盖spring-kafka-test传递的依赖版本。 - 最后执行
mvn dependency:tree命令,排查所有kafka相关依赖的版本,将所有版本不一致的Kafka依赖统一到2.7.x系列即可解决冲突。
内容的提问来源于stack exchange,提问作者usr_11
相关产品推荐
相关产品推荐

