RocketMQ高可用Q&A

1、rocketmq的主从切换机制

  • 当master所在机器正常运行的情况之下,producer往master中写入消息,consumer从master中读取并消费消息
  • 当master所在机器宕机之后,producer无法进行写消息操作,consumer从该master的slaver机器中读取并消费消息
  • 当master所在机器宕机之后,需要手动重启master机器,重启完之后,producer从nameserver获取到了master信息,两者重新进行连接操作(长连接),这个时候producer可以重新往master发送消息,consumer则自动从master读取并消费消息

相关文档资源链接:https://www.jianshu.com/p/08850de70ec0

2、rocketmq的主从复制策略

  • rocketmq的主从复制策略有两种,分别是异步复制和同步复制:

ASYNC_MASTER:异步master,也就是新的消息存储时不需要等slave同步好; 

SYNC_MASTER:同步master,新消息存现时需要等slave同步好(也就是返回的 Ack Offset >= 当前消息的CommitLog Offset;)

当异步复制时,如果master宕机,则有可能丢失一部分消息;同步复制情况下,不会丢失消息(刷盘同样如此)

3、多master和多slaver的消息策略

多master情况下,producer通过nameserver的负载均衡策略轮询的向每个master发送消息,实现rocketmq的高可用

4、rocketmq的文件删除策略

由于RocketMQ操作CommitLog、ConsumeQueue文件,都是基于内存映射方法并在启动的时候,会加载commitlog、ConsumeQueue目录下的所有文件,为了避免内存与磁盘的浪费,不可能将消息永久存储在消息服务器上,所以需要一种机制来删除已过期的文件。

RocketMQ顺序写Commitlog、ConsumeQueue文件,所有写操作全部落在最后一个CommitLog或ConsumeQueue文件上,之前的文件在下一个文件创建后,将不会再被更新。

RocketMQ清除过期文件的方法是:如果非当前写文件在一定时间间隔内没有再次被更新,则认为是过期文件,可以被删除,RocketMQ不会管这个这个文件上的消息是否被全部消费。默认每个文件的过期时间为72小时。通过在Broker配置文件中设置fileReservedTime来改变过期时间,单位为小时。

相关配置内容:

fileReservedTime:文件保留时间,也就是从最后一次更新时间到现在,如果超过了该时间,则认为是过期文件,可以被删除。
deletePhysicFilesInterval:删除物理文件的间隔,因为在一次清除过程中,可能需要删除的文件不止一个,该值指定两次删除文件的间隔时间。
destroyMapedFileIntervalForcibly:在清除过期文件时,如果该文件被其他线程所占用(引用次数大于0,比如读取消息),此时会阻止此次删除任务,同时在第一次试图删除该文件时记录当前时间戳,destroyMapedFileIntervalForcibly表示第一次拒绝删除之后能保留的最大时间,在此时间内,同样可以被拒绝删除,同时会将引用减少1000个,超过该时间间隔后,文件将被强制删除。

#删除文件时间点,默认凌晨 4点 deleteWhen=04

#commitLog每个文件的大小默认1G 
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

RocketMQ 会每隔10s调度一次cleanFilesPeriodically,已检测是否需要清除过期文件。执行频率可以通过设置cleanResourceInterval,默认为10s。

RocketMQ在如下三种情况任意满足之一的情况下将继续执行删除文件操作。

到了删除文件的时间点,RocketMQ通过deleteWhen设置一天的固定时间执行一次删除过期文件操作,默认为凌晨4点。
判断磁盘空间是否充足,如果不充足,则返回true,表示应该触发过期文件删除操作。
预留,手工触发,可以通过调用excuteDeleteFilesManualy方法手工触发过期文件删除,目前RocketMQ暂未封装手工触发文件删除的命令。

相关链接:https://blog.csdn.net/prestigeding/article/details/79482339

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值