RocketMQ(五)——工作原理

RocketMQ的消息生产涉及NameServer的路由查询、Queue选择策略(轮询或最小延迟)以及消息压缩。消息存储在本地文件系统,包括CommitLog和ConsumeQueue。CommitLog按1G大小的mappedFile存储所有Topic的消息,而ConsumeQueue作为索引文件加速查找。消息获取时,Consumer通过索引定位到CommitLog读取。RocketMQ利用mmap和PageCache提高读写效率。

消息的生产

消息的生产过程

Producer可以将消息写入到某Broker中的某Queue中,经历了如下过程:

  1. Producer发送消息之前,会先向Name Server发出获取Topic的路由信息的请求
  2. Name Server返回该Topic的路由表及Broker列表
  3. Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息
  4. Producer对消息做一些特殊处理,例如:消息超过4M,会对其进行压缩
  5. Producer向选出的Queue所在Broker发出消息RPC请求,将消息发送到选择出的Queue
  • 路由表:实际是一个Map,key是topic名称,value是一个Queue Data实例列表。Queue Data并不是一个Queue对应一个Queue Data,而是一个Broker中该Topic所有的Queue对应一个Queue Data。即只要是涉及到该Topic的Broker,一个Broker中该Topic的所有Queue对应一个Queue Data。Queue Data中包含Broker Name。简单来说,路由表的Key为Topic名称,value则为所有涉及该Topic的Broker Name 列表。
  • Broker 列表:实际也是Map。Key为broker name,value为Broker Data 。一套Broker Name 名称相同的Master-Slave集群对应一个Broker Data,Broker Data中包含Broker Name及一个map。该map的key为BrokerID,value为该Broker对应的地址。brokerID为0时表示该Broker 为Master。非0表示Slave

Queue算法

对于无序消息,其 Queue选择算法(消息投递算法)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

稷下学员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值