我想以编程方式删除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
属性。也不例外。不知道为什么它不起作用。任何帮助表示赞赏。
答案 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,默认情况下已启用。