当前位置: 首页 > 知识库问答 >
问题:

尝试在Kafka中创建分区时的NoClassDefoundError

窦英武
2023-03-14

我有以下代码:

  public KafkaReader(KafkaConsumer<Long, byte[]> consumer, String topic) {
    this.consumer = consumer;
    this.topicPartition = new TopicPartition(topic, ((consumer.partitionsFor(topic).get(0)).partition()));
    consumer.assign(Collections.singleton(topicPartition));
}
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JsonNode

at org.apache.kafka.common.requests.MetadataRequest$Builder.<clinit>(MetadataRequest.java:36)
at org.apache.kafka.clients.consumer.KafkaConsumer.partitionsFor(KafkaConsumer.java:1962)
at org.apache.kafka.clients.consumer.KafkaConsumer.partitionsFor(KafkaConsumer.java:1930)
at data.KafkaReader.<init>(KafkaReader.java:20)
at data.KafkaReaderTest.playground(KafkaReaderTest.java:12)

...原因:java.lang.ClassNotFoundException:com.fasterxml.jackson.databind.jsonNode在java.base/jdk.internal.loader.builtInclassLoader.LoadClass(builtInclassLoader.java:581)在java.base/jdk.internal.loader.classLoader.$AppClassLoader.LoadClass(classLoader.java:178)在java.base/java.lang.ClassLoader.LoadClass(

在pom.xml中,我定义了以下依赖项:

   <dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-all</artifactId>
        <version>1.3</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.6.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.10</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.10</version>
    </dependency>
</dependencies>

我所能找到的建议是将jackson-annotations和-core添加到maven依赖项中,但这没有帮助。

共有1个答案

秦宏盛
2023-03-14

这是客户端2.6版本中的一个错误:https://issues.apache.org/jira/browse/kafka-10378

我建议在2.6.1或2.7发布之前坚持2.5客户端。除非有一个关键的2.6特性是你不能没有的,然后建议包含你自己的依赖是一个健全的。

 类似资料:
  • 我正在测试在一个正在运行的系统中添加Kafka分区,但我不清楚如果您将分区添加到一个现有的主题中,Kafka如何管理现有的数据。 例如: 我有一个主题为的Kafka实例,有一个分区和一个副本。 生产者组开始插入该主题,消费者组开始消费。 我更改主题以添加另一个分区。 在本例中,主题数据发生了什么?是在两个分区之间重新平衡,还是只有新生成的数据才会使用新分区?

  • 我正在学习使用Kafka在科特林的SpringKafka。我知道,当一个新主题发布时,如果不存在,它就会被创建。所以,当我向从Spring创建的新/旧主题发送一个值时,默认分区是0,但我想在另一个分区上写一条消息,比如分区1。 当我创建/写一个主题时,它是有效的: 但是,当我使用以下选项选择分区和密钥时: 我得到了以下错误: 我试着把钥匙换成,但也没用。显然,当我从Spring客户端创建一个主题时

  • 本文向大家介绍Kafka 新建的分区会在哪个目录下创建?相关面试题,主要包含被问及Kafka 新建的分区会在哪个目录下创建?时的应答技巧和注意事项,需要的朋友参考一下 在启动 Kafka 集群之前,我们需要配置好 log.dirs 参数,其值是 Kafka 数据的存放目录, 这个参数可以配置多个目录,目录之间使用逗号分隔,通常这些目录是分布在不同的磁盘 上用于提高读写性能。 当然我们也可以配置 l

  • 本文向大家介绍Kafka新建的分区会在哪个目录下创建相关面试题,主要包含被问及Kafka新建的分区会在哪个目录下创建时的应答技巧和注意事项,需要的朋友参考一下 我们知道,在启动 Kafka 集群之前,我们需要配置好 参数,其值是 Kafka 数据的存放目录,这个参数可以配置多个目录,目录之间使用逗号分隔,通常这些目录是分布在不同的磁盘上用于提高读写性能。当然我们也可以配置 参数,含义一样。只需要设

  • 我在试着做一个黏糊糊的Navbar。所以我要添加和。这是工作,但滚动条看起来不好。这是代码; 当我添加和滚动条部分如下所示; 像这样 应该是这样的 我该怎么解决这个?