我正在使用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
,则该主题不会显示任何内容。
答案 0 :(得分:3)
我有同样的问题 解决方案:
清理zk元信息(/经纪/主题)
清除所有/数据目录以删除属于该主题的所有主题分区文件夹
立即重启整个kafka集群所有代理。
重新创建该主题。
这解决了我的问题。我认为根本原因是kafka本身无法处理干净删除主题的缺陷(自v1.0.0以来已经修复)。
编辑:
即使使用Kafka(> = v1.0.0),如果您要删除空主题或者您的kafka群集处于极端负载下,有时删除主题也会卡住。
解决方案就像重新启动控制器代理一样简单。 (您始终可以在ZK:/ {controller get /controller
下)找到控制器代理。所以只需重新启动一个代理而不是整个kafka集群。