如果只是用kafka-topics.sh的delete命令刪除topic,會有兩種情況:
- 如果當前topic沒有使用過即沒有傳輸過信息:可以徹底刪除
- 如果當前topic有使用過即有過傳輸過信息:並沒有真正刪除topic只是把這個topic標記為刪除(marked for deletion)。
要徹底把情況2中的topic刪除必須把kafka中與當前topic相關的數據目錄和zookeeper與當前topic相關的路徑一並刪除。
相關組件的版本
zookeeper: 3.4.6
kafka: 0.9.0.0
這里假設要刪除的topic是test,kafka的zookeeper root為/kafka
刪除kafka相關的數據目錄
數據目錄請參考目標機器上的kafka配置:server.properties -> log.dirs=/var/kafka/log/tmp
su rm -r /var/kafka/log/tmp/test*
刪除kafka topic
/home/kafka/bin/kafka-topics.sh --delete --zookeeper HadoopMaster:2181/kafka --topic test
刪除zookeeper相關的路徑
- 打開zookeeper client
/home/ZooKeeper/bin/zkCli.sh
- 執行下面的命令
把test替換成你要刪除的topic
#刪除topic test的consumer group,如果有消費記錄的話
rmr /kafka/consumers/test-group
rmr /kafka/config/topics/test rmr /kafka/brokers/topics/test rmr /kafka/admin/delete_topics/test
完成
重啟zookeeper和kafka可以用下面命令查看相關的topic還在不在:
/home/kafka/bin/kafka-topics.sh --list --zookeeper HadoopMaster:2181/kafka