Kafka資料清理
https://www.cnblogs.com/moonandstar08/p/6204581.html
由於專案原因,最近經常碰到Kafka訊息佇列擁堵的情況。碰到這種情況為了不影響線上系統的正常使用,需要大家手動的清理Kafka Log。但是清理Kafka Log又不能單純的去刪除中間環節產生的日誌,中間關聯的很多東西需要手動同時去清理,否則可能會導致刪除後客戶端無法消費的情況。
在通過Client端消費Kafka中的訊息時,消費的訊息會同時在Zookeeper和Kafka Log中儲存,如上圖紅線所示。
當手動刪除Kafka某一分片上的訊息日誌時,如上圖藍線所示,此是隻是將Kafka Log中的資訊清0了,但是Zookeeper中的Partition和Offset資料依然會記錄。當重新啟動Kafka後,我們會發現如下二種情況:
A、客戶端無法正常用消費;
B、在使用Kafka Consumer Offset Monitor工具進行Kafka監控時會發現Lag(還有多少訊息數未讀取(Lag=logSize-Offset))為負數;其中此種情況的刪除操作需要我們重點關注,後面我們也會詳細介紹其對應的操作步驟。
一般正常情況,如果想讓Kafka客戶端正常消費,那麼需要Zookeeper和Kafka Log中的記錄保持如上圖黃色所示。
Kafka具體消費原理可以參見:
二、Kafka訊息日誌清除
操作步驟主要包括:
1、停止Kafka執行;
2、刪除Kafka訊息日誌; (配置檔案中記錄日誌的路徑)
3、修改ZK的偏移量;(刪除/consumers 和 /brokers/topics)我寫了一個java,級聯刪除
4、重啟Kafka;