保证RocketMQ高可用性之消息的存储

RocketMQ消息的持久化,producer(消息的生产者)发送消息到broker(相当于投递消息的邮局),broker把消息存储到磁盘,存储成功后再反馈给producer,这里的反馈也叫ACK确认,在发送ACK确认的时机有分为两种,一种叫同步刷盘,一种叫异步刷盘,同步刷盘是在消息成功落盘之后再发送ACK确认给producer,异步刷盘是消息发送到内存之后,就给producer发送ACK确认,同步刷盘的话可以保证消息的高可靠,但是性能会相对差,同步刷盘和异步刷盘可以在rocketMQ的安装目录中broker的配置文件中配置,同步刷盘可以配置成flushDiskType=SYNC_FLUSH,异步刷盘可以配置成flushDiskType=ASYNC_FLUSH,消息消费的时候,consumer消费成功,返回ACK确认给broker,broker收到消息消费成功的反馈删除磁盘的消息,如果在指定时间没有收到消费成功的反馈,默认的话会重新发送消息给consumer,默认重试16次,如果16次之后还没有成功消费消息,MQ不会立即删除消息,而是把消息发送到特殊队列中,也称为死信队列,被发送到死信队列的消息称为死信消息,死信不会被正常消费,有效期和正常消息一样,都是三天,三天后会自动删除。一个死信队列对应一个GroupID,而不是对应单个消费者实例,如果一个GroupID未产生死信消息,MQ不会为其创建相应的死信队列,一个死信队列包含了GroupID所有的死信消息,而不论消息来自于哪个Topic。

RocketMQ在发送消息和消费消息的性能的保证,消息发送到broker进行持久化,为了提高写入磁盘的写入速度,直接使用文件系统进行存储,高性能磁盘的顺序写的速度可以达到600M每秒,而随机写的速度是100k每秒,两者相差了6000倍,而rocketMQ使用的是顺序写的方式,在 读取消息发送到consumer的时候,使用的是零拷贝技术,正常的读取消息,是先将消息复制到内核态再复制到用户态再复制到网卡驱动内核态再到网卡,而使用零拷贝技术直接越过用户态,提高了性能,但是零拷贝技术的限制是一次映射的文件大小在1.5到2G,所以单个commitlog文件的大小一般都是1g。

消息的存储结构

打开broker对应的配置文件找到这行

#存储路径
storePathRootDir=E:\\rocketmq-all-4.4.0-bin-release\\store\\broker-a-s

配置,打开E:\\rocketmq-all-4.4.0-bin-release\\store\\broker-a-s目录发现目录下有三个文件夹commitlog,consumequee,index。commitlog里面存储的就是消息的所有消息,里面的每个文件大小文件都是1G,consumequee文件夹里面存储的是消费逻辑队列,每个文件里面存储了消息的最小偏移量minoffset,已经消费的偏移量consumeroffset,和最大偏移量maxoffset等信息,每个consumequee里面的文件对应着一个消息的消费队列,该文件的存在是为了加快查找消息的索引文件,index里面的文件也是索引文件,为了加快查找消息的,只不过它里面的文件提供了通过key和时间区间来索引消息。

主从复制,为了保证roketmq的高可用,一般会搭建rocketmq集群,那么在masterbroker主节点的主节点宕机之后,还可以从salve节点获取消息,那么master可以负责读和写,slave只负责读,那么slave上的消息就是从master复制过来的,那么复制的方式分为同步复制和异步复制,同步复制的时候,producer发送消息到broker,主从节点完成的复制之后才返回存储成功反馈给producer,异步复制,只要master存储成功就返回存储成功反馈给producer,同步复制在broker配置文件中配置成brokerRole=SYNC_MASTER,异步复制配置成brokerRole=ASYNC_MASTER,从节点配置成brokerRole=SLAVE,同步复制消息可靠性相对高,性能相对低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敲代码的翠花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值