kafka kafka的日誌清理機制

2021-10-09 09:40:00 字數 2384 閱讀 8279

kafka的消費者們只消費訊息,消費後並不是立即清除,那麼kafka是怎樣進行日誌清理?

kafka的日誌清理機制一般分為兩種:日誌清除和日誌壓縮。這兩種機制是需要config/server.properties檔案配置後才會選中,二選一。常見使用的是日誌清除,至於日誌壓縮 適合特別場景。

config/server.properties檔案配置如下

# 日誌片段檔案的檢查週期,檢視它們是否達到了刪除策略的設定(log.retention.hours或log.retention.bytes)

log.retention.check.interval.ms=60000

# 日誌清理策略(delete|compact)

log.cleanup.policy = delete

# 日誌儲存時間 (hours|minutes),預設為7天(168小時)。超過這個時間會根據policy處理資料。bytes和minutes無論哪個先達到都會觸發。

log.retention.hours=168

# 日誌資料儲存的最大位元組數。超過這個bytes會根據policy處理資料。

#log.retention.bytes=1073741824

#檔案在索引中清除後保留的時間一般不需要去修改【被標記.deleted的檔案會在這個延遲時間後清除】

log.delete.delay.ms =60000

第乙個配置是kafka日誌管理器中有專門的任務負責周期性地檢測、刪除不符合條件的日誌分段檔案,該週期可通過引數log.rentention.check.interval.ms來配置。

第二個配置是log.cleanup.policy=delete。表明選中日誌清除機制。日誌清除機制又分為三種:基於時間的刪除策略基於日誌大小的刪除策略基於日誌起始偏移量的刪除策略

# 日誌儲存時間 (hours|minutes),預設為7天(168小時)。超過這個時間會根據policy處理資料。bytes和minutes無論哪個先達到都會觸發。

log.retention.hours=168

#檔案在索引中清除後保留的時間一般不需要去修改【被標記.deleted的檔案會在這個延遲時間後清除】

log.delete.delay.ms =60000

一般是加上上面的兩個配置。

定期檢查日誌檔案是否有超過log.retention.hours時間【根據日誌分段的最大時間戳largesttimesta mp計算,查詢該segment分段所對應的時間戳索引檔案.timeindex中最後一條索引項】的日誌segment分段。

執行日誌分段的刪除任務時,會首先從log物件中維護的日誌分段的跳躍表中移除需要刪除的日誌分段,然後將日誌分段所對應的資料檔案和索引檔案新增.deleted字尾。最後轉交給名稱為delete-file任務來刪除以.deleted為字尾的檔案,執行延遲時間可通過引數log.delete.delay.ms控制,預設為1分鐘。

# 日誌資料儲存的最大位元組數。超過這個bytes會根據policy處理資料。

#log.retention.bytes=1073741824

#檔案在索引中清除後保留的時間一般不需要去修改【被標記.deleted的檔案會在這個延遲時間後清除】

log.delete.delay.ms =60000

配置檔案中不能少上面的配置資訊。

該策略會依次檢查每個日誌中的日誌分段是否超出指定的大小(log.retention.bytes),對超出指定大小的日誌分段採取刪除策略。

如果log.retention.bytes和log.retention.hours同時配置,一般任意乙個滿足條件的話,都會刪除的。

乙個partiton分割槽會有很多分割槽segment段檔案。

log.retention.hours比較好理解。確定這個分割槽上的segment檔案們的時間,超過時間的刪除。

log.retention.bytes是表示的這個分割槽總的超過閾值【總大小- log.retention.bytes值=超過閾值】大於乙個segment段的大小時,才會觸發刪除。

例如:假設日誌段大小是500mb,當前分割槽共有3個日誌段檔案,大小分別是500mb,500mb,130mb【130m那個檔案是最新正在使用的segment檔案】。此時該分割槽總日誌大小是2*500mb+130mb=1130m,如果log.retention.bytes閾值設定為1000mb,那麼超出閾值的部分就是130m < 500m,故kafka不會執行任何刪除操作;如果log.retention.bytes閾值設定為600mb,超過閾值是530m,此時kafka會刪除最老的那個日誌段檔案,到時會剩下500m,130m的兩個segment檔案。

Hadoop Yarn的日誌清理

hadoop yarn的日誌清理可以分為兩個子話題討論 我們這裡討論的日誌清理並不是通過定時的日誌刪除命令去實現,這一做法顯然優雅,具體的做法下面會分別進行討論。hadoop yarn使用log4j進行日誌輸出,所以對於它們本地日誌的清理,最好的方式是通過修改log4j的配置配置檔案,以rollin...

日誌清理 sh

bin bash log dir var log root uid 0 lines 50 e xcd 66 e notroot 67 e wrongargs 65 if uid ne root uid then echo must be root to run this script.exit e ...

清理登入日誌

root localhost root echo var log wtmp 此檔案預設開啟時亂碼,可查到ip等資訊 root localhost root last 此時即查不到使用者登入資訊 清除登陸系統失敗的記錄 root localhost root echo var log btmp 此檔案...