一、問題描述
開發過程中。假設 Consumer 當前消費到了某個主題的最新一條消息,位移是n,之后該主題沒有任何新消息產生,故 Consumer 無消息可消費了,所以位移永遠保持在n。由於是自動提交位移,位移主題中會不停地寫入位移=n的消息。顯然 Kafka 只需要保留這類消息中的最新一條就可以了,之前的消息都是可以刪除的。這就要求 Kafka 必須要有針對位移主題消息特點的消息刪除策略,否則這種消息會越來越多,最終撐爆整個磁盤。
二、解決問題
開啟kafka日志壓縮功能。
Kafka 提供了專門的后台線程定期地巡檢待 Compact 的主題,看看是否存在滿足條件的可刪除數據。
這個后台線程叫 Log Cleaner。很多實際生產環境中都出現過位移主題無限膨脹占用過多磁盤空間的問題,如果你的環境中也有這個問題,我建議你去檢查一下 Log Cleaner 線程的狀態,通常都是這個線程掛掉了導致的。