问题描述
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));
}
但是当执行consumer.partitionsFor(topic)时,出现以下错误:
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.ClassLoaders $ AppClassLoader.loadClass(ClassLoaders.java:178) 在java.base / java.lang.classLoader.loadClass(ClassLoader.java:522) ... 68更多
在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>
我发现所有建议都是在Maven依赖项中添加jackson-annotations和-core,但这无济于事。
解决方法
ClassNotFoundException:com.fasterxml。 jackson.databind .JsonNode
所以您将需要
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.10</version>
</dependency>
但是,您确实应该使用jackson-bom
来一致地导入所有相关的依赖版本
这是客户端2.6版中的错误:https://issues.apache.org/jira/browse/KAFKA-10378
我建议坚持使用2.5个客户端,直到发布2.6.1或2.7。除非您有一项重要的2.6功能,否则,建议您加入自己的依赖项就是一个不错的选择。