1. 程式人生 > >Kafka資料清理

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具體消費原理可以參見:

http://blog.xiaoxiaomo.com/2016/05/14/Kafka-Consumer%E6%B6%88%E8%B4%B9%E8%80%85/

二、Kafka訊息日誌清除

   操作步驟主要包括:

     1、停止Kafka執行;

     2、刪除Kafka訊息日誌; (配置檔案中記錄日誌的路徑)

     3、修改ZK的偏移量;(刪除/consumers 和 /brokers/topics)我寫了一個java,級聯刪除

     4、重啟Kafka;