1 消息的生产过程

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

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

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

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

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

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

    路由表:实际是一个Map,key为Topic名称,value是一个QueueData实例列表。QueueData并不
    是一个Queue对应一个QueueData,而是一个Broker中该Topic的所有Queue对应一个
    QueueData。即,只要涉及到该Topic的Broker,一个Broker对应一个QueueData。QueueData中
    包含brokerName。简单来说,路由表的key为Topic名称,value则为所有涉及该Topic的BrokerName列表。

    Broker列表:其实际也是一个Map。key为brokerName,value为BrokerData。一个Broker对应一
    个BrokerData实例,对吗?不对。一套brokerName名称相同的Master-Slave小集群对应一个
    BrokerData。BrokerData中包含brokerName及一个map。该map的key为brokerId,value为该
    broker对应的地址。brokerId为0表示该broker为Master,非0表示Slave。

2 Queue选择算法

对于无序消息,其Queue选择算法,也称为消息投递算法,常见的有两种:

轮询算法

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

该算法存在一个问题:由于某些原因,在某些Broker上的Queue可能投递延迟较严重。从而导致
Producer的缓存队列中出现较大的消息积压,影响消息的投递性能。

最小投递延迟算法

该算法会统计每次消息投递的时间延迟,然后根据统计出的结果将消息投递到时间延迟最小的Queue。
如果延迟相同,则采用轮询算法投递。该算法可以有效提升消息的投递性能。

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

https://github.com/apache/rocketmq/blob/master/docs/cn/design.md

【RocketMQ工作原理】消息的生产过程相关推荐

  1. rocketMQ —— 02(集群搭建、rocketmq工作原理)

    目录标题 一.相关推荐 二.基本架构图: 三.集群模式 1.单Master模式(这种单节点的理论上不叫集群) 2.多Master模式 3.多Master多Slave模式(异步) 4.多Master多S ...

  2. 分布式消息队列RocketMQ工作原理与应用(一)

    第 1 章 RocketMQ概述 一.MQ概述 1 .MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产.存储.消费全过程API的软件系 ...

  3. 【RocketMQ工作原理】

    什么是消费幂等 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消 费并未对业务系统产生任何负面影响,那么这个消费过程就是消费幂等的. 幂等:若某操作执行多次与 ...

  4. 【RocketMQ工作原理】消息的清理

    消息被消费过后会被清理掉吗?不会的. 消息是被顺序存储在commitlog文件的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以commitlog文件为单位进行清理的.否则会急 ...

  5. 【RocketMQ工作原理】消息的存储

    RocketMQ中的消息存储在本地文件系统中,这些相关文件默认在当前用户主目录下的store目录中. abort:该文件在Broker启动后会自动创建,正常关闭Broker,该文件会自动消失.若在没有 ...

  6. 【RocketMQ工作原理】消息堆积与消费延迟

    概念 消息处理流程中,如果Consumer的消费速度跟不上Producer的发送速度,MQ中未处理的消息会越来 越多(进的多出的少),这部分消息就被称为堆积消息.消息出现堆积进而会造成消息的消费延迟. ...

  7. 【RocketMQ工作原理】消息的消费

    消费者从Broker中获取消息的方式有两种:pull拉取方式和push推动方式.消费者组对于消息消费的模 式又分为两种:集群消费Clustering和广播消费Broadcasting. 获取消费类型 ...

  8. RocketMQ工作原理 高级功能介绍

    1.1 消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储. 消息生成者发送消息 MQ收到消息,将消息进行持久化,在存储中新增一条记录 返回ACK给生产者 MQ push 消息给对应的 ...

  9. 【RocketMQ工作原理】offset管理

    这里的offset指的是Consumer的消费进度offset 消费进度offset是用来记录每个Queue的不同消费组的消费进度的.根据消费进度记录器的不同,可以 分为两种模式:本地模式和远程模式. ...

最新文章

  1. vue js中报红_vue:我和node、webpack的情深似海
  2. 答应我,别再if/else走天下了可以吗
  3. m3u8 php防盗链代码,Nginx-accesskey权限模块使用——简单的m3u8防盗链
  4. es6 WeakSet
  5. 缺失值填充5——AutoEncoder填充序列缺失值
  6. LeetCode 动态规划《简单》部分 Python实现
  7. fireFox模拟 post请求、上传插件,火狐浏览器中文postman插件
  8. Java同步关键字的C#版本?
  9. java什么是工作空间_[Java教程]Java开发工具(Eclipse工作空间的基本配置)
  10. Webpack常用插件总结
  11. 网上书店管理系统mysql代码_网上书店管理系统(附程序源代码).pdf
  12. qt4谷歌输入法 linux,linux mint设置google pinyin输入法
  13. FPGA基本开发设计流程
  14. 迅歌KTV服务器各型号,2017年ktv必点歌曲排行榜
  15. 常见的网络准入控制技术对比表
  16. N880e 刷机记录和一些经验
  17. NASA Ames Stereo Pipelin(ASP)软件学习过程(一)
  18. 学习虚幻引擎UMG的基础
  19. Skipping MapperFactoryBean with name ‘xxxMapper‘ and ‘xxx.xxx.xxx.mapper.xxxxxMapper‘ nterface. Bean
  20. vulnhub Monitoring: 1

热门文章

  1. TiM:rDNA拷贝数的种内变化影响微生物群落分析吗?
  2. ISME:宿主性别可以决定肠道微生物对寄生虫感染的响应
  3. R语言ggridges包可视化山脊图(Ridgeline Plots)并且在山脊图中添加均值竖线(Add Mean Line to RIdgeline Plot with ggridges in R)
  4. R语言ggplot2可视化散点图实战:绘制基础散点图、为所有散点添加标签、只为大于阈值的散点添加标签
  5. Error in xy.coords(x, y, xlabel, ylabel, log) : ‘x‘ and ‘y‘ lengths differ
  6. jupyter notebook xdg-settings 错误
  7. 深度学习多变量时间序列预测:Bi-LSTM算法构建时间序列多变量模型预测交通流量+代码实战
  8. 下载 NCBI sra 文件
  9. 基于多准则决策分析的多因素降维方法检测基因基因相互作用 Multi-factor dimensionality reduction method based on multi-criteria dec
  10. TensorFlow基础8-实现单层神经网络