创建Kafka主题不会导致任何领导者

时间:2016-03-16 08:05:04

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

我正在使用Kafka v0.9.0.1(Scala v2.11)和com.101tec:zkclient v0.7。我正在尝试使用AdminUtils来创建一个kafka主题。我的代码如下。

String zkServers = "node1:2181,node2:2181,node3:2181,node4:2181";
Integer sessionTimeout = (int)TimeUnit.SECONDS.toMillis(10L);
Integer connectionTimeout = (int)TimeUnit.SECONDS.toMillis(8L);
ZkSerializer zkSerializer = ZKStringSerializer$.MODULE$;
Boolean isSecureKafkaCluster = false;
String topic = "test";
Integer partitions = 1;
Integer replication = 3;

ZkClient zkClient = new ZkClient(zkServers, sessionTimeout, connectionTimeout, zkSerializer);
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zkServers), isSecureKafkaCluster)
if(!AdminUtils.topicExists(zkUtils, topic)) {
 AdminUtils.createTopic(zkUtils, topic, partitions, replications, new Properties());
}

主题实际上是通过以下命令验证的。

bin/kafka-topics.sh --describe --zookeeper node1:2181 --topic test

但是,输出并不像预期的那样。

Topic:test  PartitionCount:1    ReplicationFactor:1 Configs:
Topic: test Partition: 0    Leader: -1  Replicas: 4 Isr: 

如果我使用脚本。

bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 3 --partitions 1 --topic topic1

然后我看到以下内容。

Topic:test1 PartitionCount:1    ReplicationFactor:3 Configs:
Topic: test1    Partition: 0    Leader: 2   Replicas: 2,3,4 Isr: 2

关于我做错的任何想法?结果是,如果我使用Producer向主题发送ProducerRecord,则该主题不会显示任何内容。

1 个答案:

答案 0 :(得分:3)

我有同样的问题 解决方案:

  1. 清理zk元信息(/经纪/主题)

  2. 清除所有/数据目录以删除属于该主题的所有主题分区文件夹

  3. 立即重启整个kafka集群所有代理。

  4. 重新创建该主题。

  5. 这解决了我的问题。我认为根本原因是kafka本身无法处理干净删除主题的缺陷(自v1.0.0以来已经修复)。

    编辑: 即使使用Kafka(> = v1.0.0),如果您要删除空主题或者您的kafka群集处于极端负载下,有时删除主题也会卡住。
    解决方案就像重新启动控制器代理一样简单。 (您始终可以在ZK:/ {controller get /controller下)找到控制器代理。所以只需重新启动一个代理而不是整个kafka集群。