【问题标题】:Error Initializing Kafka Producer with Avro Serializer: java.lang.NoClassDefFoundError使用 Avro 序列化程序初始化 Kafka Producer 时出错:java.lang.NoClassDefFoundError
【发布时间】:2019-11-14 00:35:44
【问题描述】:

我无法让 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。还有

【问题讨论】:

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


    【解决方案1】:

    您必须为常用配置再添加一个依赖项。

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

    该类在此 JAR 中可用。

    【讨论】:

    • 谢谢。我还需要几个罐子。在我写的时候回答了我自己的问题
    • 应该是一个传递依赖。
    • 是的,但我认为 POM 没有它?
    【解决方案2】:

    我通过从 confluent 安装其他 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2017-03-22
      • 2021-03-11
      • 2020-07-06
      • 2023-03-03
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多