消息的生产
消息的生产过程
Producer可以将消息写入到某Broker中的某Queue中,经历了如下过程:
- Producer发送消息之前,会先向Name Server发出获取Topic的路由信息的请求
- Name Server返回该Topic的路由表及Broker列表
- Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息
- Producer对消息做一些特殊处理,例如:消息超过4M,会对其进行压缩
- 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选择算法(消息投递算法)

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

被折叠的 条评论
为什么被折叠?



