[英]How to resolve the dependency org.apache.kafka.clients.producer.Producer in maven project as a java producer for apache kafka
[英]java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer
我正在嘗試使用Kafka:
import java.util.Properties;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
public class SimpleProducer {
public static void main(String[] args) {
Properties props = new Properties();
Producer<String, String> producer = new KafkaProducer<String, String>(props);
}
}
但是出現以下錯誤:
java.lang.NoClassDefFoundError:org / apache / kafka / clients / producer / Producer
build.gradle:
...
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.2.0'
}
...
我已經嘗試過在gradle中使用以下依賴項。
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.1.0'
另外,我在下面提供了我測試過的代碼片段。
import java.util.Properties;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
public class Producer {
public static void main(String[] args){
Properties properties = new Properties();
properties.put("bootstrap.servers", "192.168.119.139:9092");
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer kafkaProducer = new KafkaProducer(properties);
TestCallback callback = new TestCallback();
try{
for(int i = 0; i < 100; i++){
System.out.println("----->"+i);
kafkaProducer.send(new ProducerRecord("test", Integer.toString(i), "test message - " + i ));
}
}catch (Exception e){
e.printStackTrace();
}finally {
kafkaProducer.close();
}
}
private static class TestCallback implements Callback {
@Override
public void onCompletion(RecordMetadata recordMetadata, Exception e) {
if (e != null) {
System.out.println("Error while producing message to topic :" + recordMetadata);
e.printStackTrace();
} else {
String message = String.format("sent message to topic:%s partition:%s offset:%s", recordMetadata.topic(), recordMetadata.partition(), recordMetadata.offset());
System.out.println(message);
}
}
}
}
我已經使用Eclipse IDE測試了此代碼。 還請記住,apache kafka客戶端還會下載以下依賴項。
如果要使用命令運行,則必須通過使用一組jar文件指定-classpath來運行。 我在下面提供一個例子。
java.exe -Dfile.encoding=UTF-8 -classpath somelocation/a.jar;somelocation/b.jar;somelocation/c.jar
如果仍然不能解決您的問題,請提供應用程序結構,郵政編碼詳細信息,以便其他人可以為您提供幫助。
我跑了:
java -jar TestProejct-1.0-SNAPSHOT.jar -cp "D:\Software\kafka_2.12-2.2.0\libs\kafka-clients-2.2.0.jar"
有幾個問題:
這樣就解決了問題:
java -cp "D:\Software\kafka_2.12-2.2.0\libs\*;TestProejct-1.0-SNAPSHOT.jar" SimpleProducer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.