Kafka日誌及Topic資料清理

2021-08-20 21:16:10 字數 2133 閱讀 1532

在介紹手動刪除操作之前,先簡單的介紹一下kafka消費offset原理。

一、kafka消費offset

在通過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的偏移量;

4、重啟kafka;

上述步驟重點介紹其中的關鍵步驟。

在進行第2步:刪除kafka訊息日誌時,進入kafka訊息日誌路徑下,使用du -sh * 檢查磁碟占用比較大的目錄,然後刪除此目錄;

在進行第3步:修改zk的偏移量時,進入zk的安裝目錄下,執行./zkcli.sh -server (中間以,分割),如果不帶server預設修改的為本機。

示例如下:

a.執行./zkcli.sh -server aaa:2181,bbb:2181,ccc:2181

b.在zk上執行ls /consumers/對應的分組/offset/對應的topic,就可以看到此topic下的所有分割槽了;

通過get /consumers/對應的分組/offset/對應的topic/對應的分割槽號,可以查詢到該分割槽上記錄的offset;

通過set /consumers/對應的分組/offset/對應的topic/對應的分割槽號 修改後的值(一般為0),即可完成對offset的修改;

三、重建topic

操作步驟主要包括如下:

1、刪除topic;

2、刪除log日誌;

3、刪除zk中的topic記錄

第一步:刪除topic

執行./kafka-topics.sh -delete -zookeeper [zookeeper server] -topic [topic name];如果kafka啟動時載入的配置檔案server.properties沒有配置delete.topic.enable = true,那麼此時的刪除並不是真正的刪除。而只是把topic標記為:marked for deletion,此時就需要執行第3步的操作;

第三步:刪除zk中的topic記錄

示例如下:

a.執行./zkcli.sh -server aaa:2181,bbb:2181,ccc:2181

b.進入/admin/delete_topics目錄下,找到刪除的topic,刪除對應的資訊。

四、常用命令

a.檢視kafka中的訊息

1

2

./kafka-run-class.sh kafka.tools.dumplogsegments -print-data-log -files /data01/middle/kafka-logs/00000002154.log >>aa.txt

find /dataa01 -mtime 0 -name *.log |xargs /kafka-run-class.sh kafka.tools.dumplogsegments -print-data-log -files /data01/middle/kafka-logs/00000002154.log >>aa.txt

0代表當天;-1代表昨天

參考部落格:

Kafka日誌及Topic資料清理

在介紹手動刪除操作之前,先簡單的介紹一下kafka消費offset原理。一 kafka消費offset 在通過client端消費kafka中的訊息時,消費的訊息會同時在zookeeper和kafka log中儲存,如上圖紅線所示。當手動刪除kafka某一分片上的訊息日誌時,如上圖藍線所示,此是只是將...

kafka 徹底刪除 topic 及資料

預設情況,當我們刪除 topic 並不會真正刪除,只是把佇列標記為 marked for deletion 如果我們要徹底刪除 topic 及資料,可採用一下方法 方法一 修改 kafka conf server.properties,增加 delete.topic.enable true,然後重啟...

kafka的Topic和日誌

kafka中所有訊息是通過topic為單位進行管理,每個kafak的topic通常會有多個訂閱者,負責訂閱傳送到該topic的資料。kakfa負責管理集群中每個topic的一組日誌分割槽資料 生產者將資料傳送到相應的topic。負責定址將哪個分割槽傳送到topic的哪個partion?例如 roun...