RocketMQ设计原理

  • 设计模式

发布订阅模式和生产消费模式

  • 路由机制

1 NameServer存储broker注册的topic数据

2 productor和cosumer从NameServer中获取topic数据,从而得知将消息发到哪个broker上

3 nameserver和broke互相发送心跳包,注册topic数据和剔除不可用broker

  • 高可用机制

1 producer发消息给broker,如果消息发送失败会采取两个措施:(1)一定时间内不发给该broker(消息发送失败的broker) (2)消息发送重试(默认两次)

2 broker和nameserver都可集群部署,每个broker都可以一主多从部署

  • 消息存储

1 commitLog:所有topic消息存储在commitlog中,commitlog一个文件1G(可动态配置),文件名长度20位,名称为物理偏移量,前面位数不够用0补齐,这样可以通过物理偏移量快速找到消息在哪个文件。

2 consumerLog:commitLog落盘后,会异步存储消息的起始物理偏移量 + 消息大小 + 消息tag的hashcode到consumerLog。(tag设计:在消息拉取层面对消息进行隔离,而不是拉取完成后在系统中进行消息隔离)

3 所以消息的查找过程是:先从consumerLog中读取消息索引数据,再通过索引数据去commitlog拿topic消息。

4 mmap:rocketMQ通过mmap技术(用户空间的虚拟内存映射到磁盘存储地址)将消息换成到os cache中,后续os线程将cache的数据异步写到磁盘

5 indexFile:messageKey进行hash然后slot总数取模得到slot位置,每个slot都是4位整形,存储index的数据量。hash必然产生冲突,操作和hashmap一样,采用链表的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值