RocketMQ工作原理——消息的清理

消息被消费过后会被清理掉吗?

消息是顺序存储在commitlog文件的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以commitlog文件为单位进行清理的。否则会急剧下降清理效率,并实现逻辑复杂。

commitlog文件存在一个过期时间,默认为72小时。除了用户手动清理外,在以下情况下也会自动被清理,无论文件中的消息是否被消费过

  • 文件过期,且到达清理时间点(默认凌晨4点)后
  • 文件过期,且磁盘空间占用率达到过期清理警戒线(默认75%)
  • 磁盘占用率达到清理警戒线(80%),开始按照设定好的规则清理文件,无论是否过期
  • 磁盘占用率达到系统危险警戒线(90%),Broker拒绝写入消息

注意:
1、对于RocketMQ来说,删除一个1G大小的文件,是一个压力巨大的IO操作。在删除过程中,系统性能会骤然下降。所以,其默认清理时间点为凌晨4点,访问量最小的时候。也正因如此,我们要保障磁盘空间的空闲率,不要使系统出现在其他时间点删除commitlog的情况
2、 官方建议RocketMQ服务的Linux文件系统采用ext4,。因为对于文件删除操作,ext4比ext3性能更好

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容