RocketMQ架构原理
集群部署架构结合部署结构图描述集群工作流程1启动NamesrvNamesrv起来后监听端口等待Broker、Produer、Consumer连上来相当于一个路由控制中心。2Broker启动跟所有的Namesrv保持长连接定时发送心跳包。心跳包中包含当前Broker信息(IP端口等)以及存储所有topic信息。注册成功后namesrv集群中就有Topic跟Broker的映射关系。3收发消息前先创建topic创建topic时需要指定该topic要存储在哪些Broker上。也可以在发送消息时自动创建Topic。4Producer发送消息启动时先跟Namesrv集群中的其中一台建立长连接并从Namesrv中获取当前发送的Topic存在哪些Broker上然后跟对应的Broker建长连接直接向Broker发消息。5Consumer跟Producer类似。跟其中一台Namesrv建立长连接获取当前订阅Topic存在哪些Broker然后直接跟Broker建立连接通道开始消费消息。模块功能特性Namesrv就是一个注册中心存储当前集群所有Brokers信息、Topic跟Broker的对应关系。Namesrv用于存储Topic、Broker关系信息功能简单稳定性高。多个Namesrv之间相互没有通信单台Namesrv宕机不影响其他Namesrv与集群即使整个Namesrv集群宕机已经正常工作的ProducerConsumerBroker仍然能正常工作但新起的Producer, ConsumerBroker就无法工作。Namesrv压力不会太大平时主要开销是在维持心跳和提供Topic-Broker的关系数据。但有一点需要注意Broker向Namesr发心跳时会带上当前自己所负责的所有Topic信息如果Topic个数太多万级别会导致一次心跳中就Topic的数据就几十M网络情况差的话网络传输失败心跳失败导致Namesrv误认为Broker心跳失败。nameserver是rocketmq自己实现的配置服务器不是Zookeeper。Broker集群最核心模块主要负责Topic消息存储、管理和分发等功能。1高并发读写服务Broker的高并发读写主要是依靠以下两点消息顺序写每台borker上所有Topic数据同时只会写一个文件一个文件满1G再写新文件真正的顺序写盘使得发消息TPS大幅提高。消息随机读RocketMQ尽可能让读命中系统pagecache因为操作系统访问pagecache时即使只访问1K的消息系统也会提前预读出更多的数据在下次读时就可能命中pagecache减少IO操作。2负载均衡与动态伸缩负载均衡Broker上存Topic信息Topic由多个队列组成队列会平均分散在多个Broker上而Producer的发送机制保证消息尽量平均分布到所有队列中最终效果就是所有消息都平均落在每个Broker上。动态伸缩能力非顺序消息Broker的伸缩性体现在两个维度Topic, Broker。Topic维度假如一个Topic的消息量特别大但集群水位压力还是很低就可以扩大该Topic的队列数Topic的队列数跟发送、消费速度成正比。Broker维度如果集群水位很高了需要扩容直接加机器部署Broker就可以。Broker起来后向Namesrv注册Producer、Consumer通过Namesrv发现新Broker立即跟该Broker直连收发消息。3高可用高可靠高可用集群部署时一般都为主备备机实时从主机同步消息如果其中一个主机宕机备机提供消费服务但不提供写服务。高可靠所有发往broker的消息有同步刷盘和异步刷盘机制同步刷盘时消息写入物理文件才会返回成功异步刷盘时只有机器宕机才会产生消息丢失broker挂掉可能会发生但是机器宕机崩溃是很少发生的除非突然断电4Broker与Namesrv的心跳机制单个Broker跟所有Namesrv保持心跳请求心跳间隔为30秒心跳请求中包括当前Broker所有的Topic信息。Namesrv会反查Broer的心跳信息如果某个Broker在2分钟之内都没有心跳则认为该Broker下线调整Topic跟Broker的对应关系。但此时Namesrv不会主动通知Producer、Consumer有Broker宕机。消费者Consumer消费者启动时需要指定Namesrv地址与其中一个Namesrv建立长连接。消费者每隔30秒从nameserver获取所有topic的最新队列情况这意味着某个broker如果宕机客户端最多要30秒才能感知。连接建立后从namesrv中获取当前消费Topic所涉及的Broker直连Broker。Consumer跟Broker是长连接会每隔30秒发心跳信息到Broker。Broker端每10秒检查一次当前存活的Consumer若发现某个Consumer 2分钟内没有心跳就断开与该Consumer的连接并且向该消费组的其他实例发送通知触发该消费者集群的负载均衡。消费者端的负载均衡先讨论消费者的消费模式消费者有两种模式消费集群消费广播消费。广播消费每个消费者消费Topic下的所有队列。集群消费一个topic可以由同一个ID下所有消费者分担消费。具体例子假如TopicA有6个队列某个消费者ID起了2个消费者实例那么每个消费者负责消费3个队列。如果再增加一个消费者ID相同消费者实例即当前共有3个消费者同时消费6个队列那每个消费者负责2个队列的消费。消费者端的负载均衡就是集群消费模式下同一个ID的所有消费者实例平均消费该Topic的所有队列。但是Consumer 数量要小于等于队列数量如果Consumer 超过队列数量那么多余的Consumer 将不能消费消息。生产者(Producer)Producer启动时也需要指定Namesrv的地址从Namesrv集群中选一台建立长连接。如果该Namesrv宕机会自动连其他Namesrv。直到有可用的Namesrv为止。生产者每30秒从Namesrv获取Topic跟Broker的映射关系更新到本地内存中。再跟Topic涉及的所有Broker建立长连接每隔30秒发一次心跳。在Broker端也会每10秒扫描一次当前注册的Producer如果发现某个Producer超过2分钟都没有发心跳则断开连接。生产者端的负载均衡生产者发送时会自动轮询当前所有可发送的broker一条消息发送成功下次换另外一个broker发送以达到消息平均落到所有的broker上。这里需要注意一点假如某个Broker宕机意味生产者最长需要30秒才能感知到。在这期间会向宕机的Broker发送消息。当一条消息发送到某个Broker失败后会往该broker自动再重发2次假如还是发送失败则抛出发送失败异常。业务捕获异常重新发送即可。客户端里会自动轮询另外一个Broker重新发送这个对于用户是透明的。

相关新闻

关于Linux系统编译C语言代码汉字支持问题

关于Linux系统编译C语言代码汉字支持问题

最近在网上看到很多人问,为什么用Linux编译C语言或者C代码时,汉字输出为乱码。对此问题,网上有很多解决办法,其中有些办法很有效,但对于刚刚接触C语言或者Linux系统的小白来说,部分办法很难理解。下面&…

2026/7/14 22:11:11阅读更多 →
ZYNQ MPSOC Vitis 2022.2 自定义IP Makefile 编译陷阱与修复

ZYNQ MPSOC Vitis 2022.2 自定义IP Makefile 编译陷阱与修复

1. 自定义IP编译报错现象全解析最近在ZYNQ MPSOC平台上用Vitis 2022.2开发时,遇到了一个让人头疼的问题:每次编译包含自定义IP的项目时,控制台都会蹦出一堆Makefile报错信息。刚开始我还以为是环境配置问题,重装了几次软件都没解决…

2026/7/14 22:06:11阅读更多 →
MUSIC测向算法MATLAB实操包:6组参数对比仿真+结果可视化+误差分析文档

MUSIC测向算法MATLAB实操包:6组参数对比仿真+结果可视化+误差分析文档

本文还有配套的精品资源,点击获取 简介:一套开箱即用的MUSIC测向算法MATLAB实践资源,含6个独立脚本(1MUSIC.m至6MUSIC.m),分别对应不同阵列结构、信噪比和快拍数设置,直接运行即可生成角度谱…

2026/7/14 22:06:11阅读更多 →
OpenHarmony 网络请求 axios 封装(@ohos.net.http API23 适配)

OpenHarmony 网络请求 axios 封装(@ohos.net.http API23 适配)

摘要原生ohos.net.http底层 API 写法繁琐,缺少统一拦截、超时、错误统一处理、loading 全局控制、请求取消、token 自动携带等通用能力。基于原生 http 封装类 axios 风格网络工具,统一管理全局请求头、请求拦截、响应拦截、异常捕获、加载弹窗&#xff…

2026/7/15 1:56:41阅读更多 →
玩转集成|告别繁琐!Slack中无缝启用Claude Code的完整指南与实战场景

玩转集成|告别繁琐!Slack中无缝启用Claude Code的完整指南与实战场景

1. 为什么要在Slack中使用Claude Code? 作为一名长期使用AI编程助手的开发者,我深刻体会到在团队协作环境中频繁切换工具的痛苦。每次遇到代码问题都要离开Slack去网页端操作,不仅打断工作流,还容易丢失上下文。Claude Code与Sla…

2026/7/15 1:56:41阅读更多 →
C语言中的exit()函数

C语言中的exit()函数

函数名: exit() 所在头文件:stdlib.h 功 能: 关闭所有文件,终止正在执行的进程。 exit(1)表示异常退出.这个1是返回给操作系统的。 exit(x)(x不为0)都表示异常退出 exit(0)表示正常退出 exit()的参数会被传递给一些操作系统&#…

2026/7/15 1:56:41阅读更多 →
MSP430FR59xx内存映射与寄存器操作实战指南

MSP430FR59xx内存映射与寄存器操作实战指南

1. 项目概述与核心价值如果你正在使用德州仪器(TI)的MSP430FR59xx系列微控制器,比如FR5972或FR5872,并且已经过了点灯、调通串口的入门阶段,那么你迟早会碰到一个绕不开的坎:内存映射和寄存器。这两个概念&…

2026/7/15 1:56:41阅读更多 →
Python零基础入门:从环境搭建到实战项目的完整学习路径

Python零基础入门:从环境搭建到实战项目的完整学习路径

如果你正在考虑学习编程,或者已经尝试过但被各种复杂概念劝退,那么Python可能是你最好的起点。但问题来了:面对网络上铺天盖地的教程,从哪开始才能真正入门而不半途而废?很多教程要么过于理论化,要么直接跳…

2026/7/15 1:56:41阅读更多 →
深入解析TMS320F28035内存映射、启动引导与代码安全模块

深入解析TMS320F28035内存映射、启动引导与代码安全模块

1. 项目概述:深入TMS320F28035-EP的底层架构在工业电机驱动、数字电源或者任何对实时性和可靠性有严苛要求的嵌入式系统里,选对微控制器只是第一步。真正决定项目成败的,往往是开发者对这颗芯片“内在”的理解深度——它的内存如何布局、上电…

2026/7/15 1:51:38阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前,很多Java企业感到尴尬:大模型的接口是各种语言的,AI开发社区以其他语言为主流,似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述:为什么需要关注CC3230x的SD主机、定时器与低功耗?在物联网和嵌入式设备开发领域,我们常常面临一个核心矛盾:设备需要具备强大的连接能力、可靠的数据存储和实时控制功能,同时又必须严格控制功耗以延长电池…

2026/7/15 0:01:30阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/14 15:07:30阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →