提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
消息的处理
提示:RocketMQ中的消息被消费过后如何被清理
一、消息清理机制
消息是被顺序存储在commitlog文件的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以commitlog文件为单位进行清理的。否则会极具下降清理效率,并实现逻辑复杂。
commitlog文件存在一个过期时间,默认为72小时,即三天。除了用户手动清理外,在以下情况下也会被自动清理,无论文件中的消息是否被消费过:
- 文件过期,且到达清理时间点(默认为凌晨4点)后,自动清理过期文件
- 文件过期,且磁盘空间占用率以达过期清理警戒线(默认75%)后,无论是否达到清理时间点,都会自动清理过期文件
- 磁盘占用率达到清理警戒线(默认85%)后,开始按照设定好的规则清理文件,无论是否过期。默认会从最老的文件开始清理
- 磁盘占用率达到系统危险警戒线(默认90%)后,Broker将拒绝消息写入
需要注意以下几点:
1)对于系统来说,删除一个1G大小的文件,是一个压力巨大的IO操作。在删除过程中,系统性能会骤然下降。所以,其默认清理时间点为凌晨4点,访问量最小的时间。也正因如此,我们要保障磁盘空间的空闲率,不要使系统出现在其他时间点删除commitlog文件的情况
2)官方建议RocketMQ服务的linux文件采用ext4,因为对于文件删除操作,ext4要比ext3性能更好