编程知识 cdmana.com

RocketMQ消息生产过程以及Queue选择算法

RocketMQ消息生产

  1. 消息生产的过程

    • 获取Producer发送消息之前会先向NameServer发送获取该消息Topic的路由信息的请求

    • NameServer返回该Topic的路由表以及Broker列表

    • Producer根据代码中指定的Queue选择策略,从Queue列表中选出一个队列,用于后续存储消息

    • Produer对消息做一些特殊处理,例如,消息本身超过4M,则会对其进行压缩

    • Producer向选择出的Queue所在的Broker发出RPC请求,将消息发送到选择出的Queue

      ​ 路由表是一个Map,Key是Topic名称,V是QueueData实例列表(一个Broker中该topic对应的所有queue对应一个QueueData)QueueData中包含BrokerName

      ​ Broker列表,K为BrokerName,v为BrokerData。一套brokerName名称相同的Master-Slave小集群对应一个 BrokerDataBrokerData中包含brokerName及一个map。该mapkeybrokerIdvalue为该 broker对应的地址**

  2. Queue选择算法

  • 轮询算法

    默认选择该算法,该算法保证了每个Queue中可以均匀的获取到消息。

    但是如果在某些Broker上的Queue可能投递延迟较严重。从而导致 Producer的缓存队列中出现较大的消息积压,影响消息的投递性能

  • 最小投递延迟算法

    该算法会统计每次消息投递的时间延迟,然后根据统计出的结果将消息投递到时间延迟最小的Queue。

    如果延迟相同,则采用轮询算法投递。该算法可以有效提升消息的投递性能。

    该算法也存在一个问题:消息在Queue上的分配不均匀。投递延迟小的Queue其可能会存在大量的消息。而对该Queue的消费者压力会增大,降低消息的消费能力,可能会导致MQ中消息的堆积。

版权声明
本文为[ordinaryBlog]所创,转载请带上原文链接,感谢
https://blog.csdn.net/kang2411212/article/details/122115242

Scroll to Top