我正在尝试动态创建kafka主题,因为我创建了一个方法,它将输入作为主题名称,并应创建一个主题。
我正在使用kafka 2.12和Java 1.8 以下是我试过的......
private static void CreateKafkaTopic(String topicName) {
ZkClient zkClient = null;
ZkUtils zkUtils = null;
try {
String zookeeperConnect = "localhost:2181";
int sessionTimeOutInMs = 15 * 1000; // 15 secs
int connectionTimeOutInMs = 10 * 1000; // 10 secs
zkClient = new ZkClient(zookeeperConnect, sessionTimeOutInMs, connectionTimeOutInMs, ZKStringSerializer$.MODULE$);
boolean isSecureKafkaCluster = false;
zkUtils = new ZkUtils(zkClient, new ZkConnection(zookeeperConnect), isSecureKafkaCluster);
Properties topicConfig = new Properties();
AdminUtils.createTopic(zkUtils, topicName, 1, 1, topicConfig,RackAwareMode.Disabled$.MODULE$);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (zkClient != null) {
zkClient.close();
}
}
}
但是当我尝试这个时,我会收到如下错误
线程中的异常" main" java.lang.NoSuchMethodError: scala.Product。$ init $(Lscala / Product;)V at kafka.admin.RackAwareMode $ Disabled $。(RackAwareMode.scala:27)at at kafka.admin.RackAwareMode $ Disabled $。(RackAwareMode.scala)at com.OTMProducer.CreateKafkaTopic(OTMProducer.java:243)
请告诉我这是什么原因。我提到了一些已经可用的答案,如How To create a kafka topic from java for KAFKA-2.1.1-1.2.1.1?
答案 0 :(得分:1)
此错误通常意味着您缺少Scala库。在路径中添加Scala 2.12可以解决问题。
2.12不是Kafka的版本,而是Scala版本。 Kafka的版本是文件名中的下一个数字。例如,在kafka_2.11-1.1.0
中,Kafka版本为1.1.0,2.11是Scala版本。
假设您运行的是最近的Kafka版本> = 0.11,以编程方式创建主题的推荐方法是通过Kafka Admin API。这样可以避免直接写入Zookeeper,也不依赖于Scala(所以你不必添加它)。
请参阅AdminClient的javadoc
中的AdminClient.createTopics()