从Java API

时间:2017-10-19 06:50:32

标签: java apache-kafka kafka-producer-api

我正在尝试使用Java API创建Kafka主题,但获取LEADER是不可用的。

代码:

int partition = 0;
        ZkClient zkClient = null;
        try {
            String zookeeperHosts = "localhost:2181"; // If multiple zookeeper then -> String zookeeperHosts = "192.168.20.1:2181,192.168.20.2:2181";
            int sessionTimeOutInMs = 15 * 1000; // 15 secs
            int connectionTimeOutInMs = 10 * 1000; // 10 secs

            zkClient = new ZkClient(zookeeperHosts, sessionTimeOutInMs, connectionTimeOutInMs, ZKStringSerializer$.MODULE$);

            String topicName = "mdmTopic5";
            int noOfPartitions = 2;
            int noOfReplication = 1;
            Properties topicConfiguration = new Properties();
            AdminUtils.createTopic(zkClient, topicName, noOfPartitions, noOfReplication, topicConfiguration);

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (zkClient != null) {
                zkClient.close();
            }
        }

错误:

[2017-10-19 12:14:42,263] WARN Error while fetching metadata with correlation id 1 : {mdmTopic5=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2017-10-19 12:14:42,370] WARN Error while fetching metadata with correlation id 3 : {mdmTopic5=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2017-10-19 12:14:42,479] WARN Error while fetching metadata with correlation id 4 : {mdmTopic5=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

Kafka 0.11.0.1是否支持AdminUtils。???请让我知道如何在此版本中创建主题。

先谢谢。

3 个答案:

答案 0 :(得分:1)

由于Kafka 0.11有适当的Admin API用于创建(和删除)主题,我建议使用它而不是直接连接到Zookeeper。

请参阅AdminClient.createTopics():http://kafka.apache.org/0110/javadoc/org/apache/kafka/clients/admin/AdminClient.html#createTopics(java.util.Collection)

答案 1 :(得分:1)

AdminUtils API已被弃用。有一个新的API AdminZkClient,我们可以使用它来管理Kafka服务器中的主题。 您可以参考此链接以获取更多详细信息 https://www.analyticshut.com/streaming-services/kafka/create-and-list-kafka-topics-in-java/

答案 2 :(得分:0)

通常LEADER NOT AVAILABLE指向网络问题,而不是代码问题。 试试:

telnet host port,以查看是否可以从计算机连接到所有必需的主机/端口。

但是,最新的方法是在创建主题时使用BOOTSTRAP_SERVERS

使用Scala的主题创建代码的有效版本如下:

使用sbt导入所需的kafka-clients

// https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients
libraryDependencies += Seq("org.apache.kafka" % "kafka-clients" % "2.1.1",
"org.apache.kafka" %% "kafka" % "1.0.0")

在scala中创建主题的代码:

import java.util.Arrays
import java.util.Properties

import org.apache.kafka.clients.admin.NewTopic
import org.apache.kafka.clients.admin.{AdminClient, AdminClientConfig}

class CreateKafkaTopic {
  def create(): Unit = {
    val config = new Properties()
    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "192.30.1.5:9092")

    val localKafkaAdmin = AdminClient.create(config)

    val partitions = 3
    val replication = 1.toShort
    val topic = new NewTopic("integration-02", partitions, replication)
    val topics = Arrays.asList(topic)

    val topicStatus = localKafkaAdmin.createTopics(topics).values()
    //topicStatus.values()
    println(topicStatus.keySet())
  }

}

希望有帮助。