我无法删除Kafka主题,只是标记为删除。问题是什么?我错过了什么吗?任何建议都受到欢迎。
我尝试使用两种方式删除Kafka主题:
首先,我运行了命令:
kafka-topics.bat --delete --zookeeper localhost:2181 --topic Cat
其次,我以编程方式尝试
public void deleteSomeTopic() throws Exception {
consumer = new SimpleConsumer(host, port, soTimeout, bufferSize,"deleteClient");
List<String> listTopics = new ArrayList<>();
TopicMetadataRequest request = new TopicMetadataRequest(listTopics);
//consumer will send request and get corresponding response
TopicMetadataResponse response = consumer.send(request);
//getting topicMetadata list
List<TopicMetadata> topicMetadataList = response.topicsMetadata();
for (TopicMetadata topicMetadata: topicMetadataList) {
System.out.println("Do you want to delete this Topic: "+ topicMetadata.topic());
String ch = scanner.next();
if(ch.equalsIgnoreCase("y"))
AdminUtils.deleteTopic(zkClient, topicMetadata.topic());
Thread.sleep(2000);
}
}
两者都成功执行,但是当我使用命令
列出主题时kafka-topics.bat --list -zookeeper localhost:2181
它的输出看起来像
Ape - marked for deletion
Cat - marked for deletion
Dog - marked for deletion
Elephant
apple
carrot
ginger - marked for deletion
guava
mango
我的server.properties文件也有
controlled.shutdown.enable=true
delete.topic.enable=true
我使用的是kafka_2.10-0.8.2.2,我的pom.xml文件只有两个依赖项。
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.10</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka_2.10</artifactId>
<version>1.5.1</version>
</dependency>
</dependencies>
我还检查了tmp / kafka-logs目录,主题目录仍在那里。 我需要做的任何解决方法吗?
答案 0 :(得分:0)
根据list命令的输出,您似乎正确地告诉Kafka您要删除主题。出于某种原因,卡夫卡并没有删除它。在版本0.8.2之前的Kafka中有一个bug,它阻止了主题删除。查看该bug请求的注释,0.8.2.2似乎仍存在一些问题,这就是您正在运行的问题。也许这个错误还没有完全解决?
基于你的kafka.bat文件,在Windows环境下运行Kafka?您是否对默认的server.properties文件进行了许多更改?或者您基本上使用Kafka附带的默认文件?这可能是Windows相关的问题,我只在Linux上使用它。使用几乎所有默认值,只设置delete.topic.enable = true删除在Linux上一直对我有用。随机猜测,但也许这不是在Windows环境或.bat文件中修复的?
虽然基于此Stack Overflow answer以及对原始错误报告的评论似乎存在解决方法。我从来没用过它,也许试一试?