Spring Boot 3.2.1升级后@EmbeddedKafka启动失败问题排查
问题解决方案:Spring Boot 3.2.1 下 @EmbeddedKafka 启动失败
核心原因
Spring Boot 3.2.x 默认依赖 Kafka 3.5.x 版本,该版本的 Kafka 测试组件(如 kafka.utils.TestUtils)依赖 Scala 类库,但 spring-kafka-test 并未自动引入这些依赖;同时 Kraft 模式下的协调器类也存在传递依赖缺失的问题,导致启动时出现类找不到的异常。
具体解决步骤
1. 补充缺失的依赖
在子模块的 pom.xml 中添加以下依赖,覆盖测试所需的 Kafka 核心、Scala 适配及协调器相关组件:
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.5.1</version> <!-- 与Spring Boot 3.2.1匹配的Kafka版本 --> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>3.5.1</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
注意:Scala版本(示例中为2.13)需与Kafka版本适配,Kafka 3.5.x 默认适配Scala 2.13。
2. 调整 @EmbeddedKafka 配置
保持使用 ZooKeeper 模式(kraft=false),并明确配置 broker 属性,避免自动模式切换引发的依赖问题:
@EmbeddedKafka( partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092", "kraft.enable=false" } )
3. 统一父子模块依赖版本
在父模块的 pom.xml 中通过 dependencyManagement 锁定 Kafka 相关版本,避免子模块出现版本冲突:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.2.1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.13</artifactId> <version>3.5.1</version> </dependency> </dependencies> </dependencyManagement>
已知缺陷说明
Spring Boot 3.2.x 与 Kafka 3.5.x 的集成中,spring-kafka-test 存在传递依赖不全的问题,具体表现为 Kraft 模式协调器类、Scala 基础库未被自动引入。该问题已在 Spring Boot 社区被反馈,后续版本大概率会优化依赖传递逻辑,自动补足测试所需的 Kafka 相关依赖。
内容的提问来源于stack exchange,提问作者Sounak Saha
相关产品推荐
相关产品推荐

