Java15搭配spring-kafka2.3.3出现ClassNotFoundException致Kafka生产失败
问题分析与解决方案
核心原因
出现java.lang.ClassNotFoundException: io.opentelemetry.javaagent.shaded.instrumentation.kafka.internal.OpenTelemetryMetricsReporter异常的根本原因是依赖版本不兼容:
- spring-kafka 2.3.3.RELEASE 依赖的kafka-clients版本为2.3.x,而你引入的
opentelemetry-kafka-clients-2.6是针对kafka-clients 2.6+版本的 instrumentation,两者内部类结构、依赖逻辑不匹配。 OpenTelemetryMetricsReporter是OpenTelemetry Java Agent经过shaded处理的内部类,直接引入客户端instrumentation依赖会和agent的shaded逻辑冲突,且当前版本的instrumentation依赖中并未包含该类。
解决办法
方案1:匹配kafka-clients版本调整OpenTelemetry依赖
spring-kafka 2.3.3对应kafka-clients 2.3.x,需选择适配该版本的OpenTelemetry instrumentation依赖:
<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-kafka-clients-2.3</artifactId> <version>1.32.0-alpha</version> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.3.3.RELEASE</version> </dependency>
注意:opentelemetry-kafka-clients的artifactId后缀需与kafka-clients版本完全对应(此处为2.3)。
方案2:升级spring-kafka版本
若业务允许,将spring-kafka升级到适配kafka-clients 2.6+的版本(如2.6.13.RELEASE),与当前opentelemetry依赖版本匹配:
<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-kafka-clients-2.6</artifactId> <version>1.32.0-alpha</version> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.6.13.RELEASE</version> </dependency>
方案3:改用OpenTelemetry Java Agent接入
如果是通过Java Agent方式接入OpenTelemetry,无需直接引入opentelemetry-kafka-clients依赖,仅需在启动时添加agent参数,由agent自动注入instrumentation逻辑,避免依赖冲突:
java -javaagent:opentelemetry-javaagent-1.32.0.jar -jar your-application.jar
同时移除pom中的opentelemetry-kafka-clients-2.6依赖。
验证步骤
- 调整依赖后,执行
mvn clean install(或对应gradle命令)清理并重新构建项目。 - 启动应用,检查是否仍存在该ClassNotFoundException。
- 发送测试Kafka消息,验证生产者是否正常工作。
内容的提问来源于stack exchange,提问作者mamtha
相关产品推荐
相关产品推荐

