消息被消費(fèi)過后會(huì)被清理掉嗎合敦?
消息是順序存儲(chǔ)在commitlog文件的瘟忱,且消息大小不定長(zhǎng)蚀狰,所以消息的清理是不可能以消息為單位進(jìn)行清理的坐漏,而是以commitlog文件為單位進(jìn)行清理的薄疚。否則會(huì)急劇下降清理效率,并實(shí)現(xiàn)邏輯復(fù)雜赊琳。
commitlog文件存在一個(gè)過期時(shí)間街夭,默認(rèn)為72小時(shí)。除了用戶手動(dòng)清理外躏筏,在以下情況下也會(huì)自動(dòng)被清理板丽,無(wú)論文件中的消息是否被消費(fèi)過
- 文件過期,且到達(dá)清理時(shí)間點(diǎn)(默認(rèn)凌晨4點(diǎn))后
- 文件過期,且磁盤空間占用率達(dá)到過期清理警戒線(默認(rèn)75%)
- 磁盤占用率達(dá)到清理警戒線(80%)埃碱,開始按照設(shè)定好的規(guī)則清理文件猖辫,無(wú)論是否過期
- 磁盤占用率達(dá)到系統(tǒng)危險(xiǎn)警戒線(90%),Broker拒絕寫入消息
注意:
1砚殿、對(duì)于RocketMQ來說啃憎,刪除一個(gè)1G大小的文件,是一個(gè)壓力巨大的IO操作似炎。在刪除過程中辛萍,系統(tǒng)性能會(huì)驟然下降。所以羡藐,其默認(rèn)清理時(shí)間點(diǎn)為凌晨4點(diǎn)贩毕,訪問量最小的時(shí)候。也正因如此传睹,我們要保障磁盤空間的空閑率耳幢,不要使系統(tǒng)出現(xiàn)在其他時(shí)間點(diǎn)刪除commitlog的情況
2、 官方建議RocketMQ服務(wù)的Linux文件系統(tǒng)采用ext4,欧啤。因?yàn)閷?duì)于文件刪除操作睛藻,ext4比ext3性能更好