【RocketMQ 十七】RocketMQ工作原理之消息的清理

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

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

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

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RocketMQ是一款开源的分布式消息队列系统,它的工作原理如下: 1. Producer发送消息:Producer将消息发送到RocketMQ中,消息可以是单向发送、同步发送或异步发送。 2. NameServer注册:NameServer是RocketMQ的一个重要组件,用于管理Broker集群的路由信息。Producer在发送消息前需要向NameServer注册,获取Broker的路由信息。 3. Broker接收消息:Broker是RocketMQ的核心组件,用于存储和分发消息。当Broker接收到Producer发送的消息时,会将消息存储到磁盘中,并返回消息存储的结果。 4. Consumer订阅消息:Consumer在接收消息前需要向NameServer注册,获取Broker的路由信息,并订阅想要接收的消息。 5. Broker分发消息:当Consumer订阅了某个Topic的消息后,Broker会将该Topic的消息分发给对应的Consumer。 6. Consumer消费消息:Consumer接收到消息后,可以根据业务逻辑进行处理,处理完成后向Broker发送消费结果。 7. Broker更新消息状态:当Broker接收到Consumer发送的消费结果后,会更新消息的状态,标记该消息已被消费。 总的来说,RocketMQ工作原理就是Producer向Broker发送消息,Broker存储和分发消息,Consumer订阅消息并消费消息。其中,NameServer用于管理Broker的路由信息,实现了Broker的动态扩展和负载均衡。RocketMQ具有高可靠性、高吞吐量和灵活的分布式部署等特点,适用于大规模分布式系统的消息通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能吃辣的JAVA程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值