Исключение производителя Кафки NoClassDefFoundError
У меня есть какая-то проблема с Кафкой-продюсером, но я не знаю, как ее решить.
Моя зависимость от Maven:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.10.1.1</version>
</dependency>
Если я создаю:
Producer<String, byte[]> producer = createKafkaProducer();
Я стал исключением:
java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer
at de.dienes.opitz.node.NodesValue.onSubscriptionValue(NodesValue.java:120)
at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaMonitoredItem.onValueArrived(OpcUaMonitoredItem.java:176)
at org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaSubscriptionManager.lambda$null$28(OpcUaSubscriptionManager.java:547)
at org.eclipse.milo.opcua.stack.core.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:107)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.Producer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 9 common frames omitted
Идея где проблема?
3 ответа
org.apache.kafka.clients.producer.Producer
находится в kafka-clients
артефакт. Вы должны использовать
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.1</version>
</dependency>
kafka_2.10
это артефакт для брокера. Вам это не нужно, если вы просто пишете производителю / потребителю (кроме интеграционного тестирования вашего производителя / потребителя на тестовом кластере).
Это случилось со мной тоже. Я решил это с помощью BootStrapExtansionSchema следующим образом:
java -Xbootclasspath / a: tyrus.jar -jar MyJar.jar
Вы можете добавить много библиотек, разделенных :
java -Xbootclasspath / a: /usr/local/kafka/libs/kafka-clien-1.0.0.jar: tyrus.jar -jar MyJar.jar
Или вы можете просто упаковать все вместе, используя
maven-assembly-plugin
добавьте это в ваш pom.xml:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>pakageName.MainClassName</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Если я использую
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.1</version>
</dependency>
Я становлюсь новой ошибкой: КафкаПроизводитель Claas не найден.
Если я делаю это с моим клиентом java и создаю продюсера, ошибка:
java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/KafkaProducer
Я тестирую его на сервере с производителем и потребителем консоли, это работает! Но с Java-клиентом стать исключением. Я понятия не имею больше