NoClassDefFoundError al intentar crear particiones en Kafka

Oct 16 2020

Tengo el siguiente código:

  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));
}

pero cuando se está ejecutando consumer.partitionsFor (tema), aparece el siguiente error:

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)

... Causado por: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.JsonNode en java.base / jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:581) en java.base / jdk.internal .loader.ClassLoaders $ AppClassLoader.loadClass (ClassLoaders.java:178) en java.base / java.lang.ClassLoader.loadClass (ClassLoader.java:522) ... 68 más

En pom.xml definí las siguientes dependencias:

   <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>

Todo lo que encontré como consejo fue agregar notas de jackson y -core a las dependencias de maven, pero no ayudó.

Respuestas

3 GwenShapira Oct 16 2020 at 11:47

Este es un error en la versión 2.6 de los clientes: https://issues.apache.org/jira/browse/KAFKA-10378

Recomiendo quedarse con 2.5 clientes hasta que se publique 2.6.1 o 2.7. A menos que haya una característica 2.6 crítica sin la cual no puede vivir, y entonces la recomendación de incluir su propia dependencia es sólida.

3 OneCricketeer Oct 15 2020 at 22:49

ClassNotFoundException: com.fasterxml. jackson.databind .JsonNode

Entonces necesitarás

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.10</version>
</dependency>

Sin embargo, debería utilizar jackson-bompara importar todas las versiones de dependencia relacionadas de forma coherente