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

使用Kafka JSON Schema Registry时遇序列化器实例化错误求助

问题描述

我正在构建一个向Kafka Topic发布JSON消息的应用,该Topic已启用Schema Registry。遵循官方文档开发时,出现以下错误:

Caused by: org.apache.kafka.common.KafkaException: Could not instantiate class io.confluent.kafka.serializers.json.KafkaJsonSchemaSerializer
    at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:399)
    at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:401)
    at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:436)
    at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:421)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:388)
    ... 34 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:395)
    ... 38 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/datatype/guava/GuavaModule
    at io.confluent.kafka.serializers.json.AbstractKafkaJsonSchemaSerializer.<init>(AbstractKafkaJsonSchemaSerializer.java:43)
    at io.confluent.kafka.serializers.json.KafkaJsonSchemaSerializer.<init>(KafkaJsonSchemaSerializer.java:43)
    ... 43 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.datatype.guava.GuavaModule
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 45 common frames omitted

当前使用的Maven依赖:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-schema-registry-client</artifactId>
    <version>7.1.1</version>
</dependency>
<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-json-schema-serializer</artifactId>
    <version>7.1.1</version>
</dependency>

生产者代码:

@Bean
public KafkaProducer<String, Object> jsonKafkaProducer() {

    Properties configProps = new Properties();
    configProps.put(ProducerConfig.CLIENT_ID_CONFIG, CLIENT_ID);
    configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
    configProps.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, SECURITY_MECHANISM);
    configProps.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, SSL_TYPE);
    configProps.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, kafkaTruststore);
    configProps.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, kafkaTruststorePassword);
    configProps.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, SSL_TYPE);
    configProps.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, kafkaKeystore);
    configProps.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, kafkaKeystorePassword);
    configProps.put(ProducerConfig.ACKS_CONFIG, "all");
    configProps.put(ProducerConfig.RETRIES_CONFIG, 3);
    configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.json.KafkaJsonSchemaSerializer.class);
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, org.apache.kafka.common.serialization.StringSerializer.class);

    configProps.put("auto.register.schemas", false);
    configProps.put("schema.registry.url", schemaRegistryUrl);
    configProps.put("basic.auth.credentials.source", basicAuthCredSrc);
    configProps.put("basic.auth.user.info", basicAuthUserInfo);
    return new KafkaProducer<String, Object>(configProps);
}
解决方案

错误核心是缺少Jackson Guava模块依赖,KafkaJsonSchemaSerializer内部依赖com.fasterxml.jackson.datatype.guava.GuavaModule,但当前依赖未引入该模块。

修复步骤

在Maven依赖中添加Jackson Guava模块:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-guava</artifactId>
    <version>2.13.3</version> <!-- 版本需匹配项目中Jackson统一版本,Confluent 7.1.1默认依赖Jackson 2.13.x -->
</dependency>

补充说明

  1. 确保所有Jackson相关依赖版本一致,避免版本冲突。可通过Maven命令mvn dependency:tree查看依赖树,确认Jackson版本后调整guava模块版本。
  2. 检查是否有其他依赖排除了Jackson的guava模块,若有需调整排除规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:55