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

Kafka运行异常:ClassNotFoundException: AbstractKafkaSchemaSerDe

问题分析与解决方案

错误现象

05-Jan-2023 11:19:47.532 SEVERE [http-nio-8080-exec-32] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jpublish] in context with path [/DS] threw exception [Servlet execution threw an exception] with root cause java.lang.ClassNotFoundException:
io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe

相关代码片段:

Properties props = new Properties();
props.put("bootstrap.servers", url);
props.put("linger.ms", 1);
props.put("max.block.ms", 10000);
props.put("group.id", "group");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaJsonSchemaSerializer.class.getName());
props.put(KafkaJsonSchemaSerializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "http://localhost:8081");

Producer<String, Payment> producer = new KafkaProducer<String, Payment>(props);
ProducerRecord<String, Payment> record = new ProducerRecord<String, Payment>(topic, uuid, message);

producer.send(record);

producer.close();

已知情况:项目已引入相关Kafka依赖,IDE中可正常导入io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe类,尝试引入kafka-serde-tools依赖后问题仍存在。

可行解决方案

  • 检查依赖打包范围:如果是Maven项目,确认pom.xml中Confluent相关依赖的<scope>为compile,避免使用provided或test(这两种范围不会将依赖打包到最终部署包)。示例配置:
    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-json-serializer</artifactId>
        <version>7.3.0</version> <!-- 版本需与Kafka客户端版本匹配 -->
    </dependency>
    
  • 验证部署包内容:解压项目生成的WAR/JAR包,查看BOOT-INF/lib(Spring Boot项目)或WEB-INF/lib(普通Web项目)下是否存在kafka-json-serializer-*.jar,并检查该jar内是否包含io/confluent/kafka/serializers/AbstractKafkaSchemaSerDe.class文件。若缺失,重新执行mvn clean package -DskipTests(Maven)或对应打包命令,确保依赖被正确引入。
  • 统一版本兼容性:确保Confluent依赖版本与Kafka客户端版本完全匹配,版本不匹配可能导致类加载异常。比如Kafka 3.3.x对应Confluent Platform 7.3.x。
  • 排查服务器类加载冲突:若部署在Tomcat等应用服务器,检查服务器全局类库中是否存在冲突的Kafka/Confluent依赖,避免应用本地依赖被服务器旧版本覆盖。可通过修改服务器配置让应用优先加载本地依赖。
  • 临时替换序列化器排查:若上述方案无效,可暂时将KafkaJsonSchemaSerializer替换为普通JsonSerializer(无需Schema Registry),验证基础Kafka生产功能是否正常:
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class.getName());
    
    注意:此方案仅用于排查问题,若需Schema Registry功能仍需解决类加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:11:02