kafka 刪除topic清空數據
一般情況下,是不會刪除數據的。到達一定時間后,kafka會自動刪除。如果一定要刪除可以刪除topic在重建topic了
No. 1:
如果需要被刪除topic 此時正在被程序 produce和consume,則這些生產和消費程序需要停止。
因為如果有程序正在生產或者消費該topic,則該topic的offset信息一致會在broker更新。調用kafka delete命令則無法刪除該topic。
同時,需要設置 auto.create.topics.enable = false,默認設置為true。如果設置為true,則produce或者fetch 不存在的topic也會自動創建這個topic。這樣會給刪除topic帶來很多意向不到的問題。
所以,這一步很重要,必須設置auto.create.topics.enable = false,並認真把生產和消費程序徹底全部停止。
No. 2:
server.properties 設置 delete.topic.enable=true
如果沒有設置 delete.topic.enable=true,則調用kafka 的delete命令無法真正將topic刪除,而是顯示(marked for deletion)
No. 3:
調用命令刪除topic:
./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
No. 4:
刪除kafka存儲目錄(server.properties文件log.dirs配置,默認為"/data/kafka-logs")相關topic的數據目錄。
注意:如果kafka 有多個 broker,且每個broker 配置了多個數據盤(比如 /data/kafka-logs,/data1/kafka-logs …),且topic也有多個分區和replica,則需要對所有broker的所有數據盤進行掃描,刪除該topic的所有分區數據。
一般而言,經過上面4步就可以正常刪除掉topic和topic的數據。但是,如果經過上面四步,還是無法正常刪除topic,則需要對kafka在zookeeer的存儲信息進行刪除。具體操作如下:
(注意:以下步驟里面,kafka在zk里面的節點信息是采用默認值,如果你的系統修改過kafka在zk里面的節點信息,則需要根據系統的實際情況找到准確位置進行操作)
No. 5:
登陸到zk服務器,使用命令:
bin/zkCli.sh -server 【zookeeper server:port】
登錄到zk shell后,然后找到topic所在的目錄:ls /brokers/topics,找到要刪除的topic,然后執行命令:
rmr /brokers/topics/【topic name】
即可,此時topic被徹底刪除。
如果topic 是被標記為 marked for deletion,則通過命令 ls /admin/delete_topics,找到要刪除的topic,然后執行命令:
rmr /admin/delete_topics/【topic name】
備注:
網絡上很多其它文章還說明,需要刪除topic在zk上面的消費節點記錄、配置節點記錄,比如:
rmr /consumers/【consumer-group】
rmr /config/topics/【topic name】
其實正常情況是不需要進行這兩個操作的,如果需要,那都是由於操作不當導致的。比如step1停止生產和消費程序沒有做,step2沒有正確配置。也就是說,正常情況下嚴格按照step1 – step5 的步驟,是一定能夠正常刪除topic的。
No. 6:
完成之后,調用命令:
./bin/kafka-topics.sh --list --zookeeper 【zookeeper server:port】
查看現在kafka的topic信息。正常情況下刪除的topic就不會再顯示。
但是,如果還能夠查詢到刪除的topic,則重啟zk和kafka即可。
創建topic
bin/kafka-topics.sh --create --zookeeper 【zookeeper server:port】 --replication-factor 3 --partitions 3 --topic 【topic name】
–replication-factor 2 #3個副本
–partitions 1 #3個分區
–topic #主題名為shuaige