删除主题不适用于kafka java客户端2.1.0

时间:2019-01-11 04:54:58

标签: java apache-kafka

我想以编程方式删除kafka主题,并且为此进行了很多努力。我正在使用以下Maven依赖项。

  <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.1.0</version>
    </dependency>

我正在使用KafkaAdminClient。这是我的代码,

AdminClient admin = KafkaAdminClient.create(getProperties(configuration.getKafkaConnectionString())));

private static Properties getProperties(String kafkaConnectionString) {
    Properties config = new Properties();
    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaConnectionString);
    return config;
}

删除主题的代码:

public void deleteTopic(final String... topicNames) {
    admin.deleteTopics(Arrays.asList(topicNames));
    log.info("Topics '{}' deleted.", topicNames);
}

我在kafka的server.properties中拥有delete.topic.enable=true属性。也不例外。不知道为什么它不起作用。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

  • 确保生产者没有使用该主题。

  • 因为deleteTopics()方法返回future,所以请等待将来的任务完成(以防您使用按需任务)。

    public void deleteKafkaTopics(List<String> kafkaTopics) {
    
         DeleteTopicsResult deleteTopicsResult = kafkaAdminClient.deleteTopics(kafkaTopics);
    
         while (!deleteTopicsResult.all().isDone()) {
    
             // Wait for future task to complete
    
         }
     }
    

注意::如果您使用的是Windows计算机,则可能会遇到AccessDeniedException。该修复程序已在kafka发行板(Iam使用kafka 2.1)中打开。另外,不要忘记在Kafka代理的 config / server.properties 中设置delete.topic.enable = true。对于较新版本的kafka,默认情况下已启用。