用Java创建kafka主题

时间:2018-05-18 06:42:40

标签: apache-kafka

我正在尝试动态创建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?

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