2015-11-10 61 views
1

我知道,在新的Kafka版本中,我們有新的保留策略選項 - 壓縮日誌,使用相同的密鑰刪除舊版本的消息。但是很長一段時間後,我們會得到太多壓縮日誌段與舊消息。我們如何自動清理這個壓縮日誌?來自壓縮日誌的乾淨老段卡夫卡0.8.2

UDPATE

我要澄清的是,我們需要緊湊的日誌和方式來清理舊消息這在那些時間。 我在這裏找到同樣問題的討論http://grokbase.com/t/kafka/users/14bv6gaz0t/kafka-0-8-2-log-cleaner 但沒有找到我們如何手動發佈消息的thomstone標記,並沒有任何想法。

+0

只是爲了澄清,你問如何清理已經壓縮的日誌? – morganw09dev

+0

是的,我們將擁有帶有唯一密鑰的最新版消息,但是這個序列可能會增長到非常大的尺寸。例如,我希望以任何方式來壓縮最近的日誌段並刪除最舊的日誌段。或者也許還有其他的方式來標記要刪除的郵件對不起,我的英語不好,但我真的很想理解這項技術。 – mechanikos

回答

0

降低卡夫卡日誌大小的唯一方法是通過日誌保留配置設置。

log.retention.{ms,minutes,hours} 
log.retention.bytes 

還要注意,如果兩個log.retention.hours和log.retention.bytes都設置我們刪除段超過某個極限時。

這兩個規定在卡夫卡中刪除日誌的時間。 log.retention.bytes默認爲-1,我很確定將其保留爲-1,只允許時間配置來確定日誌何時被刪除。

日誌保留和壓實工作相互獨立。使用保留,日誌可以在特定時間或大小後刪除,即使日誌壓縮也是如此。所以如果你理論上有一個100Mb的日誌限制,並設置你的log.retention.bytes = 104857600(100Mb)。 Kafka會壓縮日誌,直到它達到100Mb的大小,然後刪除必要的消息(最早的第一個),直到日誌大小不到100Mb。

編輯:

事實證明,日誌保留和壓實是互斥在此基礎上通過link提供mechanikos。雖然卡夫卡的設計看起來很奇怪,但是日誌會無限增長,無法刪除舊的日誌消息。

+0

但官方文檔中提到「如果我們使用」刪除「保留策略,此配置將控制日誌可以增長到的最大大小,然後我們將丟棄舊日誌段以釋放空間。默認情況下,沒有大小限制僅限於時間限制「。例如log.retention.ms。它會工作,如果我們設置「刪除」選項,但爲了壓縮,我們需要設置「緊湊」 – mechanikos

+1

你引用來自主題級別的配置,對嗎?我將我的答案置於經紀人配置中。設置代理配置,log.cleaner.enable = true和log.retention.ms = 10000,消息在時間到期後從Kafka主題中刪除。 (我運行了一個示例主題只是爲了仔細檢查)我不完全知道目前主題級配置如何與代理級配置交互。 – morganw09dev

+0

好的,謝謝你的工作和答案,我會嘗試在工作中測試你的建議。 – mechanikos