使用Avro序列化器初始化Kafka Producer时出错:java.lang.NoClassDefFoundError

时间:2019-11-12 10:47:20

标签: java apache-kafka avro confluent-schema-registry

我在获取KafkaProducer实例化以接受值序列化器配置属性的avro序列化器时遇到麻烦。我用

安装了kafka-avro-serializer-5.2.2.jar
mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-avro-serializer \
    -Dversion=5.2.2 -Dpackaging=jar -Dfile=C:/Users/myuser/Downloads/kafka-avro-serializer-5.2.2.jar

jar和相关文件已添加到~\.m2\repository\io\confluent\kafka-avro-serializer\5.2.2。然后,将以下内容添加到依赖项中的项目POM文件中:

<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-avro-serializer</artifactId>
    <version>5.2.2</version>
</dependency>

然后在我的客户端中执行以下导入操作;代码编译

import io.confluent.kafka.serializers.KafkaAvroSerializer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerConfig;

但是运行这个:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class.getName());

final Producer<String, Object> producer = new KafkaProducer<>(props);

结果错误:

Exception in thread "main" java.lang.NoClassDefFoundError: io/confluent/common/config/ConfigException

我发现追踪到here的类似问题。但我没有使用Kafka Connect。也是

2 个答案:

答案 0 :(得分:2)

您还必须为通用配置添加一个依赖项。

<dependency>
    <groupId>io.confluent</groupId>
    <artifactId>common-config</artifactId>
    <version>5.2.2</version>
</dependency>

该类在此JAR中可用。

答案 1 :(得分:0)

我通过安装来自汇合处的其他jar文件解决了我的问题:common-config,common-utils,common-utils和kafka-schema-registry-client。

例如

$ mvn install:install-file -DgroupId=io.confluent -DartifactId=common-utils -Dversion=5.2.2 -Dpackaging=jar -Dfile=C:\Users\myuser\Documents\Jars\common-utils-5.2.2.jar

通过重命名.jar-> .jar.zip填充属性,打开存档,导航至META-INF / maven /.../ pom.properties

然后以类似的方式更新项目POM。