无法从cmd实用程序中删除Kafka主题并以编程方式(Java)

时间:2015-11-17 11:12:15

标签: apache-kafka

我无法删除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目录,主题目录仍在那里。 我需要做的任何解决方法吗?

1 个答案:

答案 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以及对原始错误报告的评论似乎存在解决方法。我从来没用过它,也许试一试?