SpringBoot集成KafkaAvroDeserializer启动报错:java.lang.ClassNotFoundException: io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe
SpringBoot中使用KafkaAvroDeserializer启动报错:ClassNotFoundException问题排查
我最近在SpringBoot项目里尝试用KafkaAvroDeserializer处理Avro格式的Kafka消息,结果启动项目时直接抛出了ClassNotFoundException,找不到io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe类。下面是我的相关配置、代码和异常信息,想问问是不是缺失了什么Jar包?
我的pom依赖配置
<!-- avro --> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>io.confluent</groupId> <artifactId>kafka-avro-serializer</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>io.confluent</groupId> <artifactId>kafka-schema-registry-client</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>io.confluent</groupId> <artifactId>common-utils</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>io.confluent</groupId> <artifactId>common-config</artifactId> <version>6.0.0</version> </dependency>
消费者配置代码片段
@Bean public Map<String, Object> consumerConfigs() { Map<String, Object> conConfigMap = new HashMap<>(); conConfigMap.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); // 省略其他配置... conConfigMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); conConfigMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class); conConfigMap.put("schema.registry.url", schemaRegistryUrl); return conConfigMap; }
启动时的异常信息
Caused by: java.lang.ClassNotFoundException: io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_161] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_161] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[na:1.8.0_161] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_161] ... 56 common frames omitted
问题解决方法
你确实缺失了关键的Jar包:kafka-schema-serializer,AbstractKafkaSchemaSerDe类就包含在这个依赖中。虽然kafka-avro-serializer依赖于它,但可能因为依赖传递失效或者Maven仓库配置问题,没有自动引入,所以需要手动添加:
<dependency> <groupId>io.confluent</groupId> <artifactId>kafka-schema-serializer</artifactId> <version>6.0.0</version> </dependency>
另外还要注意:Confluent的官方Jar包并不在Maven中央仓库中,如果你的项目还没配置Confluent的Maven仓库,需要在pom.xml里添加以下仓库配置,否则可能会出现依赖下载失败的问题:
<repositories> <repository> <id>confluent</id> <url>https://packages.confluent.io/maven/</url> </repository> </repositories>
添加完这两个配置后,重新构建项目,ClassNotFoundException的问题应该就能解决了。
内容的提问来源于stack exchange,提问作者netsion
相关产品推荐
相关产品推荐

