论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
云原生
›
RocketMQ 架构简析,看这篇就够了!,2024年最新java面 ...
RocketMQ 架构简析,看这篇就够了!,2024年最新java面试常考的编程题及答 ...
种地
金牌会员
|
2024-8-21 23:27:23
|
显示全部楼层
|
阅读模式
楼主
主题
921
|
帖子
921
|
积分
2763
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,现在阿里P7
深知大多数步伐员,想要提拔技能,往往是自己探索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技能停滞不前!
因此收集整理了一份《2024年最新Java开辟全套学习资料》,初衷也很简朴,就是盼望能够帮助到想自学提拔又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提拔的进阶课程,涵盖了95%以上Java开辟知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码课本、实战项目、大纲路线、讲解视频,并且后续会持续更新
假如你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
Producer(消息)生产者
Producer与Namesrv集群中的此中一个节点(随机选择)建立长毗连,定期从Name Server取Topic路由信息,并向提供Topic服务的broker master建立长毗连,且定时向broker master发送心跳。Producer完全无状态,可集群摆设。
Producer负责生产消息,一样平常由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、次序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
Consumer(消息)消耗者
Consumer与Namesrv集群中的此中一个节点(随机选择)建立长毗连,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长毗连,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker设置决定。另外,接待关注我们,公号终码一生,背景复兴“资料”,可以获取相关视频教程和最新面试资料。
Consumer负责消耗消息,一样平常是背景系统负责异步消耗。一个消息消耗者会从Broker服务器拉取消息、并将其提供给应用步伐。从用户应用的角度而言提供了两种消耗形式:拉取式消耗、推动式消耗。
集群模式下:相同Consumer Group的每个Consumer实例平均分摊消息。一个条消息仅能被一个Consumer Group消耗一次。
Producer、Consumer都只需要和集群中一个Namesrv建立长毗连。Broker需要向集群中全部的Namesrv发送心跳包。
其实很好理解:
Namesrv集群提供高可用的定名服务。
Producer、Consumer只需要从此中一台定期同步路由信息。
假如Broker只随机调一台发送心跳包。那么差异的Namesrv保存的路由信息会出现差异等的情况。
消耗者范例:
拉取式消耗(Pull Consumer)
Consumer消耗的一种范例,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消耗过程。
Pull方式里,取消息的过程需要用户自己写(包括提交offset等操作)。
推动式消耗(Push Consumer)
Consumer消耗的一种范例,该模式下Broker收到数据后会主动推送给消耗端,该消耗模式一样平常实时性较高。
Push Consumer原理上也是接纳pull模式。实际上就是长轮询的pull模式。
一些概念
主题(Topic)
表现一类消息的聚集,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ举行消息订阅的根本单位。每个topic可分为若干个分区(queue)
生产者组(Producer Group)
同一类Producer的聚集,这类Producer发送同一类消息且发送逻辑同等。假如发送的是事故消息且原始生产者在发送之后瓦解,则Broker服务器会联系同一生产者组的其他生产者实例以提交或回溯消耗。
消耗者组(Consumer Group)
同一类Consumer的聚集,这类Consumer通常消耗同一类消息且消耗逻辑同等。消耗者组使得在消息消耗方面,实现负载均衡和容错的目的变得非常轻易。要留意的是,消耗者组的消耗者实例必须订阅完全相同的Topic。RocketMQ 支持两种消息模式:集群消耗(Clustering)和广播消耗(Broadcasting)。
平凡次序消息(Normal Ordered Message)
平凡次序消耗模式下,消耗者通过同一个消耗队列收到的消息是有次序的,差异消息队列收到的消息则可能是无次序的。
严格次序消息(Strictly Ordered Message)
严格次序消息模式下,消耗者收到的全部消息均是有次序的。
消息(Message)
消息系统所传输信息的物理载体,生产和消耗数据的最小单位,每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。系统提供了通过Message ID和Key查询消息的功能。
标签(Tag)
为消息设置的标志,用于同一主题下区分差异范例的消息。来自同一业务单元的消息,可以根据差异业务目的在同一主题下设置差异标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消耗者可以根据Tag实现对差异子主题的差异消耗逻辑,实现更好的扩展性。
2
关于消息中间件
消息中间件需要解决的题目:异步化、削峰填谷。
消息中间件应具备的基础能力是:消息发布、订阅、消耗。概念相对简朴这里不外多描述。
消息中间件的一些紧张的机制:
1. 消息优先级(Message Priority;RocketMQ不支持)
优先级是指在一个消息队列中,每条消息都有差异的优先级,一样平常用整数来描述,优先级高的消息先投递,假如消息完全在一个内存队列中,那么在投递前可以按照优先级排序,令优先级高的先投递。
由于RocketMQ全部消息都是长期化的,以是假如按照优先级来排序,开销会非常大,因此RocketMQ没有特意支持消息优先级,但是可以通过变通的方式实现类似功能,即单独设置一个优先级高的队列,和一个平凡优先级的队列,将差异优先级发送到差异队列即可。
2. 次序消息(Message Order)
消息有序指的是一类消息消耗时,能按照发送的次序来消耗。比方:一个订单产生了3条消息,分别是订单创建,订单付款,订单完成。消耗时,要按照这个次序消耗才气故意义。但是同时订单之间是可以并行消耗的。
RocketMQ可以严格的包管消息有序。
投递消息的次序性:
投递消息的次序性可通过将一组消息投递到同一分区实现。比方:借助MessageQueueSelector将对相同订单的操作消息投放到同一分区。
消耗消息的次序性:
RoctetMQ特性保障:特定分区(queue)中的消息不能同时被同一个消耗者组中的多个Consumer消耗,以制止重复消耗。
通过自定义或使用预置的AllocateQueueStrategy可设定分区的分配计谋(哪些分区分配给哪个消耗者消耗)。
3. 高可用、消息可靠性
3.1 消息长期化
RocketMQ、Kafka 以文件记载形式长期化。
RocketMQ接纳了单一的日志文件,即把同1个broker上面全部topic的全部queue的消息,存放在一个文件里面,从而制止了随机的磁盘写入。
如上图所示,全部消息都存在一个单一的CommitLog文件里面,然后有背景线程异步的同步到ConsumeQueue,再由Consumer举行消耗。
TODO 同步、异步刷盘。
TODO RocketMQ充分利用Linux文件系统内存cache来提高性能。
TODO CommitLog index Commitlog segment的大小与页缓存同等
RocketMQ消息存储机制会在背面的文章具体说明。
3.2 broker master/salve
TODO broker group master/salve
TODO Async/Sync Master;
4. 高并发、可扩展 ==> 分布式
提高并发服从 => 提高生产、消耗并行度=>提高分区数量
RocketMQ、kafka都支持topic数据分区存放、动态扩展。
以RocketMQ为例:
topic创建的时间可以用集群模式去创建(如许集群里面每个broker的queue的数量相同),也可以用单个broker模式去创建(如许每个broker的queue数量可以差异等)。
4.1 生产并行度
RocketMQ的生产并行度是由其自身机制及broker的数量决定的。这块背面的文章会具体分析。
4.2 消耗并行度
广播模式下全部消耗者会接受并消耗当前topic下全部Queue的消息。
集群模式下,一个queue只分配给一个consumer实例:
这是由于拉取消息是consumer主动控制的,假如多个实例同时消耗一个queue的消息,会导致同一个消息在差异的实例下被消耗多次,以是算法上都是一个queue只分给一个consumer实例,一个consumer实例可以允许同时分到差异的queue。
Kafka的消耗并行度依赖Topic设置的分区数,如分区数为10,那么最多10台呆板来并行消耗(每台呆板只能开启一个线程),或者一台呆板消耗(10个线程并行消耗)。即消耗并行度和分区数同等。
RocketMQ消耗并行度分两种情况:
次序消耗方式并行度同卡夫卡完全同等;
乱序方式并行度取决于Consumer的线程数,如Topic设置10个队列,10台呆板消耗,每台呆板100个线程,那么并行度为1000。
4.3 消息队列分配计谋
Producer使用MessageQueueSelector选择将消息投放到哪个分区
使用AllocateMessageQueueStrategy将差异分区分配给Consumer Group中的差异Consumer。一个分区(queue)仅允许分配给同一个Consumer Group下的一个Consumer(防止重复消耗)。
MessageQueueSelector
内置实现类:
SelectMessageQueueByMachineRoom
SelectMessageQueueByHash
SelectMessageQueueByRandom
可以通过实现MessageQueueSelector接口,来自定义Producer投递消息时选择分区的算法。
AllocateMessageQueueStrategy
内置实现类:
AllocateMessageQueueAveragely:平均分配算法
AllocateMessageQueueAveragelyByCircle:基于环形平均分配算法
AllocateMachineRoomNearby:基于机房临近原则算法
AllocateMessageQueueByMachineRoom:基于机房分配算法
末了
给各人送一个小福利
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提拔技能、预备面试跳槽、自身职业规划渺茫的朋友们。
网上学习资料一大堆,但假如学到的知识不成体系,遇到题目时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提拔。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才气走的更远!岂论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都接待加入我们的的圈子(技能交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
法
末了
给各人送一个小福利
[外链图片转存中…(img-g2sywN6P-1713646449112)]
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提拔技能、预备面试跳槽、自身职业规划渺茫的朋友们。
[外链图片转存中…(img-TmL7fqQq-1713646449113)]
网上学习资料一大堆,但假如学到的知识不成体系,遇到题目时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提拔。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-fhhomXlO-1713646449113)]
一个人可以走的很快,但一群人才气走的更远!岂论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都接待加入我们的的圈子(技能交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
种地
金牌会员
这个人很懒什么都没写!
楼主热帖
Beta 阶段事后分析
mac下配置Charles,安装证书,连接iOS ...
python经典习题(一)
图的基本术语,邻接矩阵、邻接表表示方 ...
SAP MM 进口采购业务中供应商多送或者 ...
DOS窗口命令和单表简单查询
Archlinux scarlett solo driver insta ...
基于华为云图引擎GES,使用Cypher子查 ...
为什么 SQL 语句使用了索引,但却还是 ...
MAUI Blazor Android 输入框软键盘遮挡 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表