无法从cmd实用程序中以编程方式删除kafka主题(java)

fdbelqdn  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(295)

我无法删除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日志目录,topics目录还在。我需要解决什么问题?

bnlyeluc

bnlyeluc1#

根据list命令的输出,您似乎正确地告诉kafka您要删除一个主题。出于某种原因,Kafka并没有删除它。Kafka版本0.8.2之前有一个bug阻止了主题删除。查看该bug请求的注解,您正在运行的0.8.2.2似乎仍然存在一些问题。所以也许这个错误还没有完全修复?
根据您的kafka.bat文件,您是否在windows环境中运行kafka?您对default server.properties文件做了很多更改吗?或者你基本上是在使用Kafka自带的默认文件?这可能是windows相关的问题,我只在linux上使用过。使用几乎所有的默认值,只有delete.topic.enable=true删除在linux上一直有效。随机猜测,但可能这不是固定的windows环境或在.bat文件?
尽管基于这个堆栈溢出答案和原始bug报告上的注解,似乎存在一个解决方法。我从来没用过,也许试试?

相关问题