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

升级Kafka至3.4.0导致EmbeddedKafka单元测试崩溃

问题分析与解决方案

核心原因

Kafka 3.x版本中,kafka.common.KafkaException类已迁移至org.apache.kafka.common.KafkaException包路径。你遇到的ClassNotFoundException本质是Spring Kafka测试组件(spring-kafka-test)与kafka-clients 3.4.0版本不兼容,导致测试代码仍在尝试加载旧包路径的类。

分步解决方案

1. 确认Spring Boot版本兼容性

Kafka 3.4.0需要搭配Spring Boot 2.7.x及以上版本使用,先检查你的pom.xml中spring-boot-starter-parent的版本,如果低于2.7.x,必须先升级Spring Boot版本,否则依赖匹配会出现问题。

2. 统一Spring Kafka与Kafka客户端版本

仅设置kafka.version不足以保证Spring Kafka组件与Kafka客户端的版本匹配,需要同时指定spring-kafka.version属性,两者对应关系如下(以兼容Kafka 3.4.0为例):

<properties>
    <kafka.version>3.4.0</kafka.version>
    <!-- Spring Kafka 2.9.x 对应 Kafka 3.4.x -->
    <spring-kafka.version>2.9.10</spring-kafka.version>
</properties>

3. 排查并排除依赖冲突

执行mvn dependency:tree命令,检查输出中是否存在旧版本的kafka相关依赖(比如kafka-clients、kafka_2.13等),尤其是第三方依赖(例如你的streaming-commons)可能引入的旧版依赖。如果发现冲突,在对应依赖中添加排除规则:

<dependency>
    <groupId>com.sap.etd.cloud</groupId>
    <artifactId>streaming-commons</artifactId>
    <version>1.21.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.13</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 确保spring-kafka-test版本正确

无需手动指定spring-kafka-test的版本,只要通过上述spring-kafka.version属性统一管理,Spring Boot会自动匹配对应版本的测试组件,避免版本不一致。

5. 清理Maven缓存并重新构建

执行以下命令清理本地缓存并强制更新依赖,避免缓存的旧依赖干扰:

mvn clean install -U

额外检查点

  • 你的pom.xml中手动指定了多个Tomcat构件版本,建议移除这些手动版本,交由Spring Boot的父依赖统一管理,避免其他依赖冲突。
  • 确认所有使用@EmbeddedKafka的测试类中,没有硬编码依赖旧版Kafka的API或配置。

内容的提问来源于stack exchange,提问作者Raul Mureșan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:34