1. 程式人生 > >如何徹底刪除Kafka中的topic

如何徹底刪除Kafka中的topic

工作中因為各種原因, 例如topic中訊息堆積的太多,或者kafka所在磁碟空間滿了等等,可能需要徹底清理一下kafka topic,那麼如何徹底刪除topic? 方法一(配置delete.topic.enable=true)   修改kafaka配置檔案server.properties, 新增delete.topic.enable=true,重啟kafka,之後通過kafka命令列就可以直接刪除topic   通過命令列刪除topic:

    ./bin/kafka-topics.sh --delete --zookeeper {zookeeper server} --topic {topic name}

方法二(沒有配置delete.topic.enable=true)

1、通過命令列刪除topic:

./bin/kafka-topics.sh --delete --zookeeper {zookeeper server} --topic {topic name}

  因為kafaka配置檔案中server.properties沒有配置delete.topic.enable=true,此時的刪除並不是真正的刪除,只是把topic標記為:marked for deletion   你可以通過命令:./bin/kafka-topics --zookeeper {zookeeper server} --list 來檢視所有topic 2、刪除kafka儲存目錄(server.properties檔案log.dirs配置,預設為"/tmp/kafka-logs")相關topic目錄

3, 若想真正刪除它,需要登入zookeeper客戶端:

  命令:./bin/zkCli/sh

  找到topic所在的目錄:ls /brokers/topics

   執行命令:rmr /brokers/topics/{topic name}即可,此時topic被徹底刪除。

  另外被標記為marked for deletion的topic你可以在zookeeper客戶端中通過命令獲得:ls /admin/delete_topics/{topic name},如果你刪除了此處的topic,那麼marked for deletion 標記消失

zookeeper 的config中也有有關topic的資訊: ls /config/topics/{topic name}暫時不知道有什麼用

總結

徹底刪除topic:

1、刪除kafka儲存目錄(server.properties檔案log.dirs配置,預設為"/tmp/kafka-logs")相關topic目錄

2、如果配置了delete.topic.enable=true直接通過命令刪除,如果命令刪除不掉,直接通過zookeeper-client 刪除掉broker下的topic即可。

  1. stop zookeeper & Kafka server,
  2. then go to ‘kafka-logs’ folder , there you will see list of kafka topic folders, delete folder with topic name
  3. go to ‘zookeeper-data’ folder , delete data inside that.
  4. start zookeeper & kafka server again.

*** The only way to delete a topic permanently is as follows: ***

stop the brokers
sudo supervisorctl stop kafka-broker
remove the directories on disk
sudo rm -rf <kafka_data_dir>/<topic_name>*
remove the topic from zookeeper:
bin/zkCli.sh

rmr /config/topics/<topic_name> rmr /brokers/topics/<topic_name> rmr /admin/delete_topics/<topic_name>

verify the topic directory is deleted in zookeeper:

ls

start the brokers back up
sudo supervisorctl start kafka-broker
re-create the kafka topic if needed