消息的清理
消息被消费过后会被清理掉吗?不会的。
消息是被顺序存储在 commitlog 文件的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以 commitlog 文件为单位进行清理的。否则会急剧下降清理效率,并实现逻辑复杂。
commitlog 文件存在一个过期时间,默认为 72 小时,即三天。除了用户手动清理外,在以下情况下也会被自动清理,无论文件中的消息是否被消费过:
- 文件过期,且到达清理时间点(默认为凌晨 4 点)后,自动清理过期文件
- 文件过期,且磁盘空间占用率已达过期清理警戒线(默认 75%)后,无论是否达到清理时间点,都会自动清理过期文件
- 磁盘占用率达到清理警戒线(默认 85%)后,开始按照设定好的规则清理文件,无论是否过期。默认会从最老的文件开始清理
- 磁盘占用率达到系统危险警戒线(默认 90%)后,Broker 将拒绝消息写入
需要注意以下几点:
(1)对于 RocketMQ 系统来说,删除一个 1G 大小的文件,是一个压力巨大的 IO 操作。在删除过程中,系统性能会骤然下降。所以,其默认清理时间点为凌晨 4 点,访问量最小的时间。也正因如果,我们要保障磁盘空间的空闲率,不要使系统出现在其它时间点删除 commitlog 文件的情况。
(2)官方建议 RocketMQ 服务的 Linux 文件系统采用 ext4。因为对于文件删除操作,ext4 要比 ext3 性能更好
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
2021-08-08 JavaWeb 之 JSP
2021-08-08 JavaWeb 之 备用
2021-08-08 JavaWeb 之 备用
2021-08-08 JavaWeb 之 备用
2021-08-08 JavaWeb 之 备用
2021-08-08 JavaWeb 之 web项目中的路径问题
2021-08-08 JavaWeb 之 请求与响应的乱码问题