[转帖]RocketMQ - nameSrv和Broker
RocketMQ
RocketMQ是一个统一的消息传递引擎,轻量级的数据处理平台。
Name Server
Name Server充当路由消息的提供者,生产者(Producer)或消费者(Customer)可以通过Name Server查找各主题对应的Broker IP列表,多个Name Server实例组成集群,但相互独立,没有信息交换。支持Broker的动态注册与发现。主要包括两个功能:
Broker管理:Name Server接收Broker集群的注册信息并且保存下来作为路由信息的基本数据,然后提供心跳检测机制,检查Broker是否存活;
路由信息管理:每个Name Server将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息,然后生产者(Producer)和消费者(Conumser)通过Name Server就可以知道整个Broker集群的整个路由信息和用于客户端查询的队列信息,从而进行消息的投递和消费。
Broker Server
负责存储消息、转发消息。Broker Server在RocketMQ系统中负责接收从生产者(Producer)发送来的消息并存储、同事为消费者的拉取请求做准备。Borker Server也存储消息相关的元数据,包括消费者组、消费进度偏移、主题和队列信息等。
Broker启动后需要完成一次将自己注册至NameServer的操作;随后每隔30s时间定时向NameServer上报Topic路由信息。
为了实现Broker中消息的存储、投递、查询以及服务高可用的保证,囊括一下几个重要的子模块信息:
Remoting Module:整个borker的实体,负责处理来自客户端的请求;
Client Manager:负责管理客户端(Producer/Consumer)和维护Consumer的Topic订阅信息;
Store Service:提供简单的API接口处理消息存储到物理硬盘和查询功能;
HA Service:高可用服务,提供Master Broker和Slaver Broker之间的数据同步功能;
Index Service:根据特定的Message key对投递到Broker的消息进行索引服务,以提供消息的快速查询。
Broker 架构
消息存储是RocketMQ中至关重要的一部分,想对其他来说会比较复杂。
消息存储架构
- CommitLog:消息主体以及元数据的存储主体,存储Producer端写入的消息主体内容,消息内容不是定长的,单个文件大小默认1G,文件名长度20位,左边补0,剩余为其实偏移量,比如00000000000000000000代表了第一个文件,其实偏移量为0,文件大小为1G=1073741824;当第一个文件写满了,第二个文件为00000000001073741824,起始偏移量为1073741824,以此类推,消息主要是顺序写入日志文件,当文件满了,写入下一个文件;
- ConsumeQueue:消息消费队列,引入的目的主要是提高消费消息的性能,由于RocketMQ是基于主题topic的订阅模式,消息消费是针对主题进行的,如果要遍历commitlog文件中根据topic检索消息非常低效的,Consumer即可根据ConsumeQueue来查找待消费的消息,其中,ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存指定Topic下的队列消息在CommitLog中的起始物理偏移量offset,消息大小size和消息Tag的hashCode值,consumequeue文件可以看成是基于topic的commitLog索引文件,所以consumequeue文件夹组织方式如下:topic/queue/file三层组织结构,具体存储路径为:$HOME/store/consumequeue/{topic}/{queueId}/{fileName},同样consumequeue文件采用定长设计,每一个条目共20个字节,分别为8字节的commitlog物理偏移量,4字节消息长度,8字节tag hashcode,单个文件由30W个条目组成,可以像数组一样随机访问每一个条目,每个ConsumeQueue文件大小约为5.72M;
- IndexFile:IndexFile(索引文件)提供了一种可以通过key或时间区间来查询消息的方法。Index文件的存储位置是:$HOME/store/index/{fileName},文件名fileName是以创建时的时间戳命名的,固定的单个IndexFile文件大小约为400M,一个IndexFile可以保存 2000W个索引,IndexFile的底层存储设计为在文件系统中实现HashMap结构,故rocketmq的索引文件其底层实现为hash索引。
消息刷盘
- 同步刷盘:只有在消息真正持久化至磁盘后RocketMQ的Broker端才会真正返回给Producer端一个成功的ACK响应。同步刷盘对MQ消息可靠性来说是一种不错的保障,但是性能上会有较大影响,一般适用于金融业务应用该模式较多。
- 异步刷盘:能够充分利用OS的PageCache的优势,只要消息写入PageCache即可将成功的ACK返回给Producer端。消息刷盘采用后台异步线程提交的方式进行,降低了读写延迟,提高了MQ的性能和吞吐量。
Broker 角色
Broker角色分为ASYNC_MASTER(异步主机)、SYNC_MASTER(同步主机)以及SLAVE(从机)。
SYNC_MASTER(同步主机):对信息的可靠性要求比较严格;
ASYNC_MASTER(异步主机):对消息可靠性要求不高;
Broker 配置
| 参数名 | 默认值 | 说明 |
|---|---|---|
| listenPort | 10911 | 接受客户端连接的监听端口 |
| namesrvAddr | Null | nameServer地址 |
| brokerIP1 | 网卡的InetAddress | 当前broker监听的IP |
| brokerIP2 | 跟brokerIP1一样 | 存在主从broker时,如果在broker主节点上配置了brokerIP2属性,broker从节点会连接主节点配置的brokerIP2进行同步 |
| brokerName | null | broker的名称 |
| brokerClusterName | DefaultCluster | broker的名称 |
| brokerId | 0 | 0表示master,其他的正整数表示slave |
| storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
| storePathConsumerQueue | $HOME/store/consumequeue/ | 存储 consume queue 的路径 |
| mappedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
| deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
| fileReservedTime | 72 | 以小时计算的文件保留时间 |
| brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
| flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
nameSrv和Broker简单的架构图

</article>
[转帖]RocketMQ - nameSrv和Broker的更多相关文章
- rocketmq那些事儿之本地调试环境搭建
上一篇文章中我们已经介绍过rocketmq的集群环境搭建,然而在源码的学习中我们还需要进行本地的调试和问题的定位查找,毕竟还是在本地方便些,今天就说一说如何进行源码的本地调试 下载编译 对于rocke ...
- RocketMQ原理解析-Broker
broker 1. broker的启动 brker的启动 Broker向namesrv注册 1. 获取namesrv的地址列表(是乱序的) 2. 遍历向每个namesrv注册topic的配置信息top ...
- RocketMQ的broker启动失败解决
RocketMQ的broker用如下命令启动: nohup sh bin/mqbroker -n localhost:9876 & 使用jps查看,系统非常卡顿,broker的名字也未显示.使 ...
- RocketMQ 创建和删除 topic,以及 broker 和 nameserver 之间的心跳
命令行主类:org.apache.rocketmq.tools.command.MQAdminStartup 客户端创建 topic 程序参数:updateTopic -n localhost:987 ...
- RocketMQ系列-搭建Namesrv源码调试环境
RocketMQ系列-搭建Namesrv源码调试环境 在学习任何一个技术框架的时候,我们通常都是先了解是什么,有什么作用.解决什么问题.设计亮点和设计思想是什么:当然对于技术学习上来说,这只是纸上谈兵 ...
- rocketmq查看命令
首先进入 RocketMQ 工程,进入/RocketMQ/bin 在该目录下有个 mqadmin 脚本 . 查看帮助: 在 mqadmin 下可以查看有哪些命令 a: 查看具体命令的使 ...
- 分布式消息队列RocketMQ部署
一.RocketMQ简介: RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 1.支持严格的消息顺序: 2.支持Topic与Queue两种模式: 3.亿级消息堆积能力: 4.比较友好 ...
- rocketmq简单搭建
摘要: 简单的部署管理RocketMQ队列 (nameserver broker在同一机器上) RocketMQ 是alibaba开源的消息队列. 本文使用的是开源版本v3.18 系统: centos ...
- RocketMQ常用命令
转自:http://jameswxx.iteye.com/blog/2091971 1.1. 控制台使用 RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等信息 ...
- RocketMQ在linux平台下环境搭建
RocketMQ在linux下部署运行和window类似,只不过启动namesrv和broker是通过mqnamesrv.sh 和 mqbroker.sh来启动的. 一. 环境搭建 需要jdk1.6 ...
随机推荐
- 为什么Java中“1000==1000”为false,而”100==100“为true?
在日常编程中,我们经常遇到一些看似简单却隐藏着复杂逻辑的问题. 比如,你是否想过为什么在 Java 中表达式1000==1000会返回 false,而 100==100 却返回 true 呢? Int ...
- C# 添加OLE到PPT幻灯片
本文介绍通过C#程序代码来添加OLE对象到PPT幻灯片的方法.这里以将Excel文档为对象插入到PPT幻灯片中的指定位置:添加时,将Excel中的单元格范围保存为图片,将图片以嵌入的方式添加到幻灯片, ...
- 华为云GaussDB打造最可信的数据库,给世界一个更优选择
近日,第14届中国数据库技术大会(DTCC2023)在北京国际会议中心顺利举行.大会以"数智赋能 共筑未来"为主题,邀请了上百位行业专家,一起探讨新时代下各类型数据库的最新动态和应 ...
- 基于Fabric的性能测试与调优实践
摘要:本文聚焦Fabric核心业务,构建一个测试模型,对社区原生的Fabric和华为云区块链(基于Fabric)进行实测,识别社区原生Fabric的性能瓶颈,并尝试通过华为区块链提供的动态伸缩.快速P ...
- 6种方法帮你搞定SimpleDateFormat类不是线程安全的问题
摘要:本文主要讲述在高并发下SimpleDateFormat类为何会出现安全问题,以及如何解决SimpleDateFormat类的安全问题. 本文分享自华为云社区<[高并发]SimpleDate ...
- 基于CREATE TYPE语法自定义新数据类型
摘要:介绍CREATE TYPE语法可以在数据库中定义一种新的数据类型. 本文分享自华为云社区<GaussDB(DWS)数据类型之自定义数据类型(复合类型)>,作者: 清道夫. CREAT ...
- 论文解读丨无参数的注意力模块SimAm
摘要:本文提出了一个概念简单但对卷积神经网络非常有效的注意力模块. 本文分享自华为云社区<论文解读系列三十:无参数的注意力模块SimAm论文解读>,作者:谷雨润一麦. 摘要 本文提出了一个 ...
- 火山引擎 DataTester:A/B 实验如何应用在抖音的产品优化流程中?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 日前,在 WOT 全球创新技术大会上,火山引擎 DataTester 技术负责人韩云飞做了关于字节跳动 A/B 测 ...
- Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons
新建一个配置类 package com.cloud.client.user.feign; import org.springframework.beans.BeansException; import ...
- SpringBoot 配置 Swagger
Profile Config 多环境不同配置 1.添加 Pom 文件 <dependency> <groupId>io.springfox</groupId> &l ...