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

升级Spring Kafka至2.9.3启动EmbeddedKafka遇NoClassDefFound错误

问题描述

我正尝试将使用Spring Kafka的Spring Boot应用从2.8.4版本升级至2.9.3版本。按照指引,我排除了spring-kafka自带的kafka-clients依赖,单独引入了3.2.3版本的kafka-clients,依赖配置如下:

implementation("org.springframework.kafka:spring-kafka:2.9.3") {
    exclude group: "org.apache.kafka", module: "kafka-streams"
    exclude group: "org.apache.kafka", module: "kafka-clients"
}
implementation("org.apache.kafka:kafka-clients:3.2.3")
testImplementation("org.springframework.kafka:spring-kafka-test:2.9.3")

但在启动使用EmbeddedKafka的测试时,出现了NoClassDefFound错误,具体栈信息如下:

Caused by: java.lang.NoClassDefFoundError: org/apache/kafka/common/requests/AlterIsrRequest$Builder
    at kafka.server.KafkaServer.startup(KafkaServer.scala:313)
    at kafka.utils.TestUtils$.createServer(TestUtils.scala:177)
    at kafka.utils.TestUtils$.createServer(TestUtils.scala:172)
    at kafka.utils.TestUtils.createServer(TestUtils.scala)
    at org.springframework.kafka.test.EmbeddedKafkaBroker.afterPropertiesSet(EmbeddedKafkaBroker.java:350)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
    ... 87 more
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.common.requests.AlterIsrRequest$Builder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 94 more

怀疑缺少某个依赖,请问该如何解决?

解决方案

这个问题的核心是**spring-kafka-test依赖的Kafka服务端组件(kafka_2.xx)与你单独引入的kafka-clients版本不兼容**。EmbeddedKafka依赖Kafka服务端核心模块运行,你只替换了客户端依赖,但测试依赖的服务端组件还是spring-kafka-test默认带的旧版本,导致类找不到。

解决步骤如下:

  • 排除spring-kafka-test自带的kafka_2.xx和kafka-clients依赖,手动引入与kafka-clients版本完全一致的kafka_2.xx模块
  • 确保Scala版本(比如2.13、2.12)与项目使用的Scala版本匹配

修改后的依赖配置示例:

implementation("org.springframework.kafka:spring-kafka:2.9.3") {
    exclude group: "org.apache.kafka", module: "kafka-streams"
    exclude group: "org.apache.kafka", module: "kafka-clients"
}
implementation("org.apache.kafka:kafka-clients:3.2.3")
testImplementation("org.springframework.kafka:spring-kafka-test:2.9.3") {
    exclude group: "org.apache.kafka", module: "kafka_2.13"
    exclude group: "org.apache.kafka", module: "kafka-clients"
}
// 若项目使用Scala 2.12,替换为kafka_2.12:3.2.3
testImplementation("org.apache.kafka:kafka_2.13:3.2.3")

刷新依赖后重新运行测试,即可解决该问题。另外建议遵循Spring Kafka官方版本匹配规则,避免手动指定版本时出现不一致的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:05:14