【RocketMQ工作原理】消息的生产过程
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工作原理】消息的生产过程相关推荐
- rocketMQ —— 02(集群搭建、rocketmq工作原理)
目录标题 一.相关推荐 二.基本架构图: 三.集群模式 1.单Master模式(这种单节点的理论上不叫集群) 2.多Master模式 3.多Master多Slave模式(异步) 4.多Master多S ...
- 分布式消息队列RocketMQ工作原理与应用(一)
第 1 章 RocketMQ概述 一.MQ概述 1 .MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产.存储.消费全过程API的软件系 ...
- 【RocketMQ工作原理】
什么是消费幂等 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消 费并未对业务系统产生任何负面影响,那么这个消费过程就是消费幂等的. 幂等:若某操作执行多次与 ...
- 【RocketMQ工作原理】消息的清理
消息被消费过后会被清理掉吗?不会的. 消息是被顺序存储在commitlog文件的,且消息大小不定长,所以消息的清理是不可能以消息为单位进行清理的,而是以commitlog文件为单位进行清理的.否则会急 ...
- 【RocketMQ工作原理】消息的存储
RocketMQ中的消息存储在本地文件系统中,这些相关文件默认在当前用户主目录下的store目录中. abort:该文件在Broker启动后会自动创建,正常关闭Broker,该文件会自动消失.若在没有 ...
- 【RocketMQ工作原理】消息堆积与消费延迟
概念 消息处理流程中,如果Consumer的消费速度跟不上Producer的发送速度,MQ中未处理的消息会越来 越多(进的多出的少),这部分消息就被称为堆积消息.消息出现堆积进而会造成消息的消费延迟. ...
- 【RocketMQ工作原理】消息的消费
消费者从Broker中获取消息的方式有两种:pull拉取方式和push推动方式.消费者组对于消息消费的模 式又分为两种:集群消费Clustering和广播消费Broadcasting. 获取消费类型 ...
- RocketMQ工作原理 高级功能介绍
1.1 消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储. 消息生成者发送消息 MQ收到消息,将消息进行持久化,在存储中新增一条记录 返回ACK给生产者 MQ push 消息给对应的 ...
- 【RocketMQ工作原理】offset管理
这里的offset指的是Consumer的消费进度offset 消费进度offset是用来记录每个Queue的不同消费组的消费进度的.根据消费进度记录器的不同,可以 分为两种模式:本地模式和远程模式. ...
最新文章
- vue js中报红_vue:我和node、webpack的情深似海
- 答应我,别再if/else走天下了可以吗
- m3u8 php防盗链代码,Nginx-accesskey权限模块使用——简单的m3u8防盗链
- es6 WeakSet
- 缺失值填充5——AutoEncoder填充序列缺失值
- LeetCode 动态规划《简单》部分 Python实现
- fireFox模拟 post请求、上传插件,火狐浏览器中文postman插件
- Java同步关键字的C#版本?
- java什么是工作空间_[Java教程]Java开发工具(Eclipse工作空间的基本配置)
- Webpack常用插件总结
- 网上书店管理系统mysql代码_网上书店管理系统(附程序源代码).pdf
- qt4谷歌输入法 linux,linux mint设置google pinyin输入法
- FPGA基本开发设计流程
- 迅歌KTV服务器各型号,2017年ktv必点歌曲排行榜
- 常见的网络准入控制技术对比表
- N880e 刷机记录和一些经验
- NASA Ames Stereo Pipelin(ASP)软件学习过程(一)
- 学习虚幻引擎UMG的基础
- Skipping MapperFactoryBean with name ‘xxxMapper‘ and ‘xxx.xxx.xxx.mapper.xxxxxMapper‘ nterface. Bean
- vulnhub Monitoring: 1
热门文章
- TiM:rDNA拷贝数的种内变化影响微生物群落分析吗?
- ISME:宿主性别可以决定肠道微生物对寄生虫感染的响应
- R语言ggridges包可视化山脊图(Ridgeline Plots)并且在山脊图中添加均值竖线(Add Mean Line to RIdgeline Plot with ggridges in R)
- R语言ggplot2可视化散点图实战:绘制基础散点图、为所有散点添加标签、只为大于阈值的散点添加标签
- Error in xy.coords(x, y, xlabel, ylabel, log) : ‘x‘ and ‘y‘ lengths differ
- jupyter notebook xdg-settings 错误
- 深度学习多变量时间序列预测:Bi-LSTM算法构建时间序列多变量模型预测交通流量+代码实战
- 下载 NCBI sra 文件
- 基于多准则决策分析的多因素降维方法检测基因基因相互作用 Multi-factor dimensionality reduction method based on multi-criteria dec
- TensorFlow基础8-实现单层神经网络