Kafka配置消息保存时间的方法
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
配置參考
然后不廢話,直接貼最終的關(guān)鍵配置:
# 想實(shí)現(xiàn)消息隊(duì)列中保存2小時(shí)的消息,那么配置應(yīng)該像這樣: log.roll.hours=1 log.retention.hours=2 log.segment.delete.delay.ms=0Kafka日志存儲(chǔ)機(jī)制分析
首先先貼一下對(duì)我?guī)椭艽蟮囊黄臋n: https://www.zybuluo.com/jewes/note/64450 。這篇文章詳細(xì)闡述了kafka的日志存儲(chǔ)機(jī)制,建議深入閱讀。
然后我簡(jiǎn)述一下。我們將對(duì)照kafka的broker配置簡(jiǎn)單說(shuō)明一下: http://kafka.apache.org/documentation.html#brokerconfigs
Kafka的持久化策略更像redis —— 數(shù)據(jù)都在內(nèi)存中,定期flush到硬盤(pán)上持久化存儲(chǔ),以保證重啟的時(shí)候數(shù)據(jù)不丟。flush策略由log.flush.*這些properties控制。
每個(gè)topic可以存儲(chǔ)于多個(gè)partition,每個(gè)partition在kafka的log目錄下表現(xiàn)為topicname-id這樣的文件夾,如mytopic-0。kafka隊(duì)列中的內(nèi)容會(huì)按照日志的形式持久化到硬盤(pán)上。每個(gè)日志文件稱為“段”(segment)。
Kafka清理隊(duì)列中過(guò)期message的方式實(shí)際上就是刪除過(guò)期的segment,這種表現(xiàn)形式十分類(lèi)似于日志滾動(dòng)。因此,控制kafka隊(duì)列中消息的保存時(shí)間的方式實(shí)際上就是日志文件定期分段,然后定期清理掉過(guò)期的段文件。
與控制分段策略相關(guān)的幾個(gè)properties:
log.roll.{hours,ms} —— 日志滾動(dòng)的周期時(shí)間(小時(shí),毫秒,log.roll.ms優(yōu)先級(jí)更高),到達(dá)指定周期時(shí)強(qiáng)制生成一個(gè)新的segment。 log.segment.bytes —— 每個(gè)segment的最大容量上限(默認(rèn)1GB)。到達(dá)指定容量時(shí)會(huì)強(qiáng)制生成一個(gè)新的segment。與過(guò)期segment處理策略相關(guān)的幾個(gè)properties:
cleanup.policy={compact,delete} —— 過(guò)期segment處理算法,默認(rèn)delete。 log.retention.{hours,minutes,ms} —— 日志保留時(shí)間(小時(shí),分鐘,毫秒。優(yōu)先級(jí)依次升高),超出保留時(shí)間的日志執(zhí)行cleanup.policy定義的操作 log.segment.delete.delay.ms —— 刪除日志文件前的保留一段時(shí)間。默認(rèn)60000。 log.retention.check.interval.ms —— log checker的檢測(cè)是否需要?jiǎng)h除文件的周期。默認(rèn)300000。現(xiàn)在解釋一下開(kāi)頭的配置段的含義——每小時(shí)滾動(dòng)一個(gè)日志文件,日志刪除(cleanup.policy默認(rèn)為delete)時(shí)間為2小時(shí),
轉(zhuǎn)載于:https://my.oschina.net/abcfy2/blog/634973
總結(jié)
以上是生活随笔為你收集整理的Kafka配置消息保存时间的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用Apache下poi创建和读取exc
- 下一篇: html5学习笔记(audio)