RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读
文章目录
- Rocketmq整体架构
- namesrv
- broker
- producer & consumer
- 通信方式
Rocketmq整体架构
RocketMQ-初体验RocketMQ(01)_RocketMQ初体验中 对 RocketMQ 架构图做了一个大体的介绍
接下来,我们再细说一下RocketMQ的架构
如上图
整体由4部分组成
- namesrv
- broker
- producer
- consumer
namesrv
当broker服务启动后,会向namesrv注册信息,比如broker中的 主题、消费偏移量、队列、ip、端口等,由broker的心跳发送到namesrv。
broker cluster中的每一个节点都会注册到namesrv上。
比如 你有4个broker节点,2个namesrv,那么注册如下
这种情况的话,即使一个namesrv节点挂了,剩下的一个namesrv节点仍然包含所有的broker信息。
需要注意的是: namesrv是无状态的, namesrv之间不会相互通信,跟zk是不一样的。一个namesrv挂了,不会影响另外一个namesrv,这俩namesrv是没有关联的。
broker
来南下每个broker的组成吧
每一个broker节点 ,储存消息,都会对应一个commitlog , commitlog 负责存储真实的消息的内容。
broker中的每个topic , 如果不设置的话, 默认创建4个队列, 队列编号 0 , 1 ,2 , 3. 每个队列都会对应一个持久化文件 。
当producer向broker中的topic发送消息的时候, 如果发现队列没有创建持久化文件,会自动创建。 然后该队列的持久化信息都会存放在该持久化文件中。
每个broker下面会创建一个consumerOffset.json文件. 这个json文件用来记录当前你消费节点已经消费的数据位置,即消费的偏移量。这个也是需要持久化的。 这个偏移量的来源 是 consumer 来上报的。(如下图)
consumer从broker中拉取消息后,要进行消费,消费了多多少消息,要把消费这些对应的这些偏移量上报到broker上去。 主要是为了什么呢? ---->最大可能的避免消息重复的推送。
producer & consumer
Q: producer & consumer 到底选择跟哪个broker去连接,去消费哪个broker中的消息?
A: producer & consumer也是无状态的,每一个producer之间 ,每一个consumer之间都不会通信, 每个producer和consumer内部都有自己的一套负载均衡的算法 ,默认的选择策略: 已发送的消息数量对queuecount取mod .
消费者的两种消费模式主要有两种: 推跟拉
拉取式消费(Pull Consumer):Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。
推动式消费(Push Consumer):Consumer消费的一种类型,该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。
pull的方式,由客户端来主动获取,通过定时任务或者需要的时候从broker端获取,这种方式用的比较少。 如果消息量比较少, 堆积也不会太多,对安全性要求不高的应用,可以考虑。
与此对应的另外一种push方式:
push的方式,在RocketMQ中其实也是基于pull模式的一个深度封装,consumer对broker进行一个长轮询,一直监听broker中的数据,就好像是broker主动推送给consumer似的。
通信方式
producer/consumer broker namesrv 通信方式
producer/consumer 给 broker发送消息/消费消息,或者从 namesrv拉取消息 , 通信是基于netty的方式,优先选用epoll方式,如果操作系统不支持epoll的话,会选择NIO。
RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读相关推荐
- rocketmq 初体验(二)AsyncProducer No name server address, please set it.
AsyncProducer No name server address, please set it. 报错log No name server address, please set it. 原因 ...
- RocketMQ-初体验RocketMQ(01)_RocketMQ初体验
文章目录 RocketMQ的由来 RocketMQ 版本 RocketMQ 基本概念 消息模型 消息生产者(producer) 消息消费者(Consumer) 主题(Topic) 代理服务器(Brok ...
- RocketMQ-初体验RocketMQ(03)_RocketMQ多机集群部署
文章目录 环境准备 参考配置 集群搭建 130主机 broker 配置文件 启动namesrv 启动broker Master 和 broker Slave 131主机 broker 配置文件 启动n ...
- RocketMQ-初体验RocketMQ(06)-使用API操作RocketMQ ,理解RocketMQ的存储结构
文章目录 RocketMQ集群基本信息 目标 知识预习 发送方式 发送结果 环境搭建 使用Java API操作RocketMQ-Simple Message Step1. pom.xml增加依赖和bu ...
- ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门
前言 来啦老铁! 笔者学习Spring Boot有一段时间了,截至目前已实践.总结了26篇Spring Boot系列学习文章,感兴趣的同学可以关注专题一起学习吧! Spring Boot全家桶 在上一 ...
- rocketmq 顺序消费_必须先理解的RocketMQ入门手册,才能再次深入解读
推荐阅读一下下 2020年后想跳槽?MQ.ZK.Nginx.Kafk等分布式技术你都掌握了? 阿里架构师推荐学习的<RabbitMQ实战指南>,渣渣的你都看过吗? RocketMQ入门手册 ...
- RocketMQ-初体验RocketMQ(11)-过滤消息_自定义Java类筛选消息
文章目录 概述 集群信息 项目结构 生产者 自定义类 消费者 测试结果 概述 RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息 通过SQL92的方式,消费者可以过滤 ...
- rocketmq 订阅组_必须先理解的RocketMQ入门手册,才能再次深入解读
推荐阅读一下下 2020年后想跳槽?MQ.ZK.Nginx.Kafk等分布式技术你都掌握了? 阿里架构师推荐学习的<RabbitMQ实战指南>,渣渣的你都看过吗? RocketMQ入门手册 ...
- rocketmq 如何保证高可用_RocketMq容灾、高可用方案
一.实现分布式集群多副本的三种方式 1.1 M/S模式 即Master/Slaver模式.该模式在过去使用的最多,RocketMq之前也是使用这样的主从模式来实现的.主从模式分为同步模式和异步模式,区 ...
最新文章
- GitHub for Windows使用教程(一)安装配置
- Codeforces Round #722 (Div. 2)
- MongoDB 4.6.1 c++ driver 编译
- mysql查询操作的5种子句
- Element-UI-简单介绍---Element-UI工作笔记001
- apache kafka系列之server.properties配置文件参数说明
- ASP.NET中的回调技术(CallBack)
- android java_Android开发和JAVA开发有什么区别?
- 泰勒·斯威夫特(Taylor Swift)最好听歌曲专辑,喜欢的可以下载保存
- 小草客户端android2.2.4 g,小草客户端android2.2.5-小草app安卓版客户端android2.2.5预约 v2.2.5-优盘手机站...
- VS2015如何添加头文件
- 怎么理解函数式编程?
- 用创新思考模式制作人工智能机器人模型
- 搜狗微信爬虫获取文章信息
- 第5组UI 让你的界面酷炫到底-ViewAniMator之ViewSwitcher、ImageSwitcher(图像切换器)、TextSwitcher(文本切换器)、ViewFlipper
- VsCode使用Git连接Gitee和GitHub
- Reading Ingestion —— Bigtable: A Distributed Storage System for Structured Data
- 浅谈FTP(文件传输协议)
- 上海汉得校园招聘面试经历
- Windows下U盘安装Ubuntu双系统