gpt4 book ai didi

java - 为什么 Kafka 消费者在启动时抛出 "java.lang.NoClassDefFoundError: kafka/consumer/ConsumerConfig"?

转载 作者:行者123 更新时间:2023-11-30 08:48:28 28 4
gpt4 key购买 nike

我正在尝试使用 apache 网站中给出的示例中的基本消费者代码。编译没问题。但是我在使用命令 java -jar target/JarName.jar 运行时遇到 ClassNotFoundException:

Exception in thread "main" java.lang.NoClassDefFoundError: kafka/consumer/ConsumerConfig
at com.package.ConsumerClass.functionConsumer(ConsumerClass.java:41)
at com.package.App.main(App.java:26)
Caused by: java.lang.ClassNotFoundException: kafka.consumer.ConsumerConfig
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

源码是

package com.package;
import java.util.HashMap;
import java.util.Properties;
import java.util.Map;
import java.util.List;
import java.lang.Object;
import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.ConsumerConnector;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
public class ExampleConsumer {
public void exampleConsumer(){
Properties props = new Properties();
props.put("zk.connect", "localhost:2181");
props.put("zk.connectiontimeout.ms", "1000000");
props.put("groupid", "test_group");

ConsumerConfig consumerConfig = new ConsumerConfig(props);
ConsumerConnector consumerConnector = (ConsumerConnector) Consumer.createJavaConsumerConnector(consumerConfig);

Map<String, Object> topicCountMap = new HashMap<String, Object>();
topicCountMap.put("test", new Integer(1));
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = (Map<String, List<KafkaStream<byte[], byte[]>>>) consumerConnector.createMessageStreams((scala.collection.Map<String, Object>) topicCountMap);
KafkaStream<byte[], byte[]> stream = consumerMap.get("test").get(0);
ConsumerIterator<byte[], byte[]> it = stream.iterator();
while(it.hasNext())
System.out.println(new String(it.next().message()));
}
}

我正在使用 Maven 来解决依赖关系。 pom.xml 的依赖部分如下所示

<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.8.2.1</version>
<scope>compile</scope>
</dependency>

我使用的是kafka_2.10-0.8.2.1版本。欢迎提出任何建议。

最佳答案

java -jar target/JarName.jarJarName.jar 没有依赖项下运行 Main-Class卡夫卡的那些。由于您的应用程序确实需要类路径上的依赖项 jar,因此您应该使用 How can I create an executable JAR with dependencies using Maven? 中解释的解决方案。或自己构建类路径。

顺便说一句,它与 Kafka 无关,只是你为它开发了一个客户端。

附注考虑使用 Scala 和 sbt(或者可能是 gradle),你的生活会变得更加轻松。

关于java - 为什么 Kafka 消费者在启动时抛出 "java.lang.NoClassDefFoundError: kafka/consumer/ConsumerConfig"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31938432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com