kafka全部資料清空與某一topic資料清空
1. Kafka全部資料清空
kafka全部資料清空的步驟為:
- 停止每臺機器上的kafka;
- 刪除kafka儲存目錄(server.properties檔案log.dirs配置,預設為“/tmp/kafka-logs”)全部topic的資料目錄;
- 刪除zookeeper上與kafka相關的znode節點;
- 重啟kafka、如果刪除topic還在則需要重啟zookeeper;
這裡以192.168.187.201 node1、192.168.187.202 node2、192.168.187.203 node3三臺機器作為kafka的叢集。
注意:kafka版本為kafka_2.11-1.1.1
1.1 停止每臺機器上的kafka
以root使用者分別登入三臺機器,使用命令jps 找出kafka的PID,再使用命令 kill kafka程序。
節點node1
節點node2
節點node3
1.2 刪除kafka儲存目錄
在kafka安裝目錄的config資料夾下server.properties中檢視儲存目錄為:
刪除該目錄所有資料:
1.3 刪除zookeeper上與kafka相關的znode節點
zookeeper上面儲存著kafka的所有topic及其消費資訊,故需要刪除與kafka相關的znode節點:
進入zookeeper的shell介面:
檢視與kafka相關的znode節點:
在上面的znode節點中,除了zookeeper作為zk的安全保障措施,其他znode節點都得刪除
1.4 重啟kafka
分別在node1、node2、node3上面執行如下命令啟動kafka:
/opt/app/kafka_2.11-1.1.1/bin/kafka-server-start.sh /opt/app/kafka_2.11-1.1.1/config/server.properties > /dev/null 2>&1 &
jps命令檢視node1、node2、node3上面的啟動情況:
最後在檢視kafka上面是否還有topic存在:
可以看到topic及其相關資料已被清空刪除
2. 某一topic資料清空
檢視當前所有topic
比如目前需要刪除test這一topic,目前kafka_2.11-1.1.1以上版本預設delete.topic.enable=true,即是說使用命令
./kafka-topics.sh --zookeeper node1:2181 --delete --topic test
該命令將會在zookeeper中刪除與test這一topic相關的znode節點(包括test詳細資訊、生產資料、消費資料的節點),並在kafka的儲存目錄/opt/data/kafka/kafka-logs/下把與test這一topic相關的儲存資料目錄標記為待刪除,稍後會真正刪除這些待刪除的目錄,如下:
使用kafka-topics.sh檢視test在zookeeper中相關znode節點資訊是否已被刪除
在/opt/data/kafka/kafka-logs目錄下檢視test相關儲存目錄是否被標記刪除
在/opt/data/kafka/kafka-logs目錄下檢視test相關儲存目錄已被刪除
3. 思考
kafka全部資料清空步驟比較繁瑣,借鑑某一topic資料清空的方式,可以通過使用kafka-topics.sh --delete命令逐個刪除所有的topic,達到清空kafka全部topic資料的目的,不足的是topic“__consumer_offsets”無法刪除,不過不礙事。
參考資料:
https://blog.csdn.net/belalds/article/details/80575751