互联网全景消息(6)之RocketMq-NameServer源码分析

一、RocketMQ介绍

        RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性,是阿里巴巴双 11 使用的核心产品。

二、RocketMQ版本发展

         2011年,Linkin(领英:全球知名的职场社交平台)推出Kafka消息引擎,阿里巴巴中间件团队在研究了Kafka的整体机制和架构设计之后,基于Kafka(Scala语言编写)的设计使用Java进行了完全重写并推出了MetaQ 1.0版本,主要是用于解决顺序消息和海量堆积的问题,由开源社区killme2008维护。具体见:GitHub - killme2008/Metamorphosis: A high available,high performance distributed messaging system.         2012年,阿里巴巴发现MetaQ原本基于Kafka的架构在阿里巴巴如此庞大的体系下很难进行水平扩展,于是对MetaQ进行了架构重组升级,开发出了MetaQ 2.0,同年阿里把Meta2.0从阿里内部开源出来,取名RocketMQ,为了命名上的规范以及版本上的延续,对外称为RocketMQ3.0。因为RocketMQ3只是RocketMQ的一个过渡版本。

          2016年11月28日,阿里巴巴宣布将开源分布式消息中间件RocketMQ捐赠给Apache,成为Apache 孵化项目。在孵化期间,RocketMQ完成编码规约、分支模型、持续交付、发布规约等方面的产品规范化,同时RocketMQ3也升级为RocketMQ4。现在RocketMQ主要维护的是4.x的版本,也是大家使用得最多的版本,项目地址:GitHub - apache/rocketmq: Apache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications.       2015年,阿里基于RocketMQ开发了阿里云上的Aliware MQ,Aliware MQ(Message Queue)是RocketMQ的商业版本,是阿里云商用的专业消息中间件,是企业级互联网架构的核心产品,基于高可用分布式集群技术,搭建了包括发布订阅、消息轨迹、资源统计、定时(延时)、监控报警等一套完整的消息云服务。因为Aliware MQ是商业版本产品地址:云消息队列 RocketMQ 版_云原生分布式消息中间件_削峰填谷_容器与中间件-阿里云

2.1 RocketMQ4.X版本更新概要 

  • 在 RocketMQ 4.3.0 版本之后,正式发布事务消息,通过类似于两阶段的方式去解决上下游数据不一致问题。

  • 在 RocketMQ 4.4.0 版本中,RocketMQ 增加了消息轨迹的功能,使用户可以更好定位每一条消息的投放接收路径,帮助问题排查,另外还增加 ACL 权限控制,提高了 RocketMQ 的管控能力和安全性。

  • 在 4.5.0 版本中,RocketMQ 推出了多副本,也就是 Raft 模式。在 Raft 模式下,一组 Broker 如果 Master 挂了,那么 Broker 中其他 Slave 就会重新选出主。因此 Broker 组内就拥有了自动故障转移的能力,也解决了像高可用顺序消息这样的问题,进一步提高了 RocketMQ 的可用性。

  • 在 4.6.0 版本中,我们推出了轻量级 Pull Consumer,用户可以使用更加适合于流计算的 API,这一版本也开始支持全新的 Request-Reply 消息,使得 RocketMQ 具备了同步调用 RPC 的能力,RocketMQ 可以更好的打破网络隔离网络之间的调用,这个版本中 RocketMQ 也开始支持 IPV6,并且是首个支持 IPV6 的消息中间件。

  • 在 4.7.0 版本中,RocketMQ 重构了主备同步复制流程,通过线程异步化,将同步复制和刷盘的过程 Pipeline 化,同步双写性能有将近数倍提升。

  • 在 4.8.0 版本中,RocketMQ Raft 模式有了一个质的提升,包括通过异步化、批量复制等手段将性能提升了数倍,在稳定性上利用 OpenChaos 完成包括宕机、杀死进程,OOM、各种各样的网络分区和延迟的测试,修复了重要 Bug。在功能上,支持 Preferred Leader,从而 Broker 组内可以优先选主,也支持了批量消息等功能。

  • 在 4.9.0 版本,主要是提升了可观测性,包括支持 OpenTracing,事务消息和 Pull Consumer 支持 Trace 等功能。

三、RocketMQ源码分析

3.1 RocketMQ的核心三流程

        整体模块如下 

  1.  rocketmq-namesrv:命名服务,更新和路由发现 broker服务。NameServer 要作用是为消息生产者、消息消费者提供关于主题 Topic 的路由信息,NameServer除了要存储路由的基础信息,还要能够管理 Broker节点,包括路由注册、路由删除等功能
  2. rocketmq-broker:mq的核心。 它能接收producer和consumer的请求,并调用store层服务对消息进行处理。HA服务的基本单元,支持同步双写,异步双写等模式。
  3. rocketmq-store:存储层实现,同时包括了索引服务,高可用HA服务实现。
  4. rocketmq-remoting:基于netty的底层通信实现,所有服务间的交互都基于此模块。
  5. rocketmq-common:一些模块间通用的功能类,比如一些配置文件、常量。
  6. rocketmq-client:java版本的mq客户端实现.
  7. rocketmq-filter:消息过滤服务,相当于在broker和consumer中间加入了一个filter代理。
  8. rocketmq-srvutil:解析命令行的工具类ServerUtil。
  9. rocketmq-tools:mq集群管理工具,提供了消息查询等功能

        RocketMQ的源码是非常的多,我们没有必要把RocketMQ所有的源码都读完,所以我们把核心、重点的源码进行解读,RocketMQ核心流程如下:

  • 启动流程

        RocketMQ服务端由两部分组成NameServer和Broker,NameServer是服务的注册中心,Broker会把自己的地址注册到NameServer,生产者和消费者启动的时候会先从NameServer获取Broker的地址,再去从Broker发送和接受消息。

  • 消息生产流程 

         Producer将消息写入到RocketMQ集群中Broker中具体的Queue。

  • 消息消费流程

       Comsumer从RocketMQ集群中拉取对应的消息并进行消费确认。

 3.2 NameServer整体流程

         NameServer是整个RocketMQ的“大脑”,它是RocketMQ的服务注册中心,所以RocketMQ需要先启动NameServer再启动Rocket中的Broker。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550585.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux]:线程(二)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 与Windows环境不同,我们在linux环境下需要通过指令进行各操作&…

MAC的几个常见的快捷方式

1.mac 查看图片好的方式 默认查看图片的方式无法直接切换上一张下一张 解决方法: 1.(最好的方法)选中图片直接按空格,进入快速预览图片 2.就是全部选中然后打开,但是说实话有点奇怪,而且很占内存 3.直接显示…

【JAVA开源】基于Vue和SpringBoot的网上租赁系统

本文项目编号 T 050 ,文末自助获取源码 \color{red}{T050,文末自助获取源码} T050,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 用…

[Linux]:线程(一)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 初识线程 1.1 线程的概念 在操作系统中,进程与线程一直是我们…

Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)

目录 1. 简介 2. JTAG to AXI Master 2.1 添加 IP Core 2.2 基本TCL命令 2.2.1 复位 JTAG-to-AXI Master 2.2.2 创建并运行写入传输事务 2.2.3 创建并运行读取传输事务 2.2.4 命令列表 2.3 帮助信息 2.4 创建TCL读写程序 2.4.1 Read proc 2.4.2 Write proc 2.4.3 …

cuda程序编译流程

cuda程序编译流程 本文以cuda example的matrixMul矩阵乘法为例说明cuda程序的编译流程。 1. 源代码 .cu 文件 在matrixMul示例中,源代码文件 matrixMul.cu 是典型的CUDA程序,包含以下部分: 流程图 主机代码(Host Code&#xf…

GNSS定位中自适应调整电离层延迟参数过程噪声的方法

文章目录 前言一、非差非组合PPP模型二、电离层功率谱密度计算三、具体实现方法3.1 不平滑3.2 三阶多项式平滑 参考文献 前言 GNSS定位中不少技术手段如PPP和长基线RTK需要将电离层延迟作为参数估计,电离层延迟的变化通常被描述为随机游走过程,而功率谱密…

1.2.1 计算机网络分层结构(上)

体系结构可分层使得不同的层次承担不同的功能。 知识点: 1.不同类型的节点,实现的功能层次可能不一样。 2.分层结构的设计并不唯一,可以根据实际需求增加或减少层次。 3.一个功能可以放在不同的层次反复出现。 根据分层结构不同可以分为&…

CORE MVC 过滤器 (筛选器)《2》 TypeFilter、ServiceFilter

TypeFilter、ServiceFilter ServiceFilter vs TypeFilter ServiceFilter和TypeFilter都实现了IFilterFactory ServiceFilter需要对自定义的Filter进行注册,TypeFilter不需要 ServiceFilter的Filter生命周期源自于您如何注册(全局、区域)&…

推荐4款2024年热门的PDF转ppt工具

有时候,我们为了方便,需要将PDF里面的内容直接转换的PPT的格式,既方便自己演示和讲解,也让我们可以更加灵活的进行文件的编辑和修改。如果大家不知道要如何进行操作的话,我可以为大家推荐几个比窘方便实用的PDF转换工具…

STM32LL库之printf函数重定向

1. 加入以下代码 int fputc(int ch,FILE *f) {LL_USART_TransmitData8(USART1,ch);while(!LL_USART_IsActiveFlag_TXE(USART1));//需要等待发送完成return(ch); }记得添加 stdio.h 头文件 2. 在MDK中勾选:Use MicroLIB

swiper+fixed的错误,splice函数的使用,提取年月日substring

做项目时的一些问题 swiperfixedsplice函数的使用重点在 alldata.splice(0, alldata.length, ...response.data.data);splicealldata.splice(0, alldata.length, ...response.data.data) 这行代码的功能为什么不直接赋值 提取年月日 substring swiperfixed 项目中的一个错误&a…

【人人都是P8程序员】Cursor 使用的十大技巧

Cursor 使用的十大技巧 总是在一个空的文件夹中创建一个新的项目 表述需求时尽量明确但谨慎 让Cursor从项目一开始就写README文档,让其记录清楚产品功能、实现技术栈等等,并在完成关键步骤后对README文档做及时的更新,第二天继续完成项目时…

npj Climate and Atmospheric Science I 新疆生地所陈亚宁研究员团队孙帆博士后发表最新研究进展

题目:The dominant warming season shifted from winter to spring in the arid region of Northwest China 主导中国西北干旱区升温的季节已从冬季转变为春季 期刊:npj Climate and Atmospheric Science IF及分区:实时IF/JCR分区/中科院分…

【Linux】Docker下载与使用-nginx

目录 一、Docker介绍 二、Docker结构 三、下载Daocker 1. 在linux上下载docker,执行以下命令即可: 2. 开启docker 3. 执行以下操作并进行使用 四、在Docker上安装nginx 一、Docker介绍 Docker:是给予Go语言实现的开源项…

召回12 曝光过滤 Bloom Filter

在推荐系统中,如果用户看过某个物品,就不再把物品推荐给这个用户。小红书、抖音都这样做曝光过滤,原因是实验表明重复曝光同一个物品会损害用户体验。但也不是所有推荐系统都有曝光过滤,像 YouTube 这样的长视频就没有曝光过滤&am…

ASR-01语音模块+C8T6实现语音控制LED

不说废话,简单直接,上教程,包会的,看不会,后台私我 一、接线图 STM32F103C8T6 ASR-01OLED屏PA10(RX接收串口)TX(发送串口)PB8SCL PB9 SDAVCCVCCGNDGND 二、天问软件Block图形编程 大家不要问…

Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录

概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…

fastadmin 搜索提交重置按钮文本修改

默认 修改require-backend.min.js文件 效果 当然最好还是去需修改lang文件 效果 如果修改没生效记得清楚一下缓存,再刷新 完结 赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你…

Tair简介

概述 Tair是淘宝团队开源的高可用分布式KV存储引擎,采用服务端自动负载均衡方式,使客户端逻辑简单。Tair,即TaoBao Pair缩写,Pair表示一对、一双等意思,即Key-Value数据对。 Tair分为持久化和非持久化两种方式。非持…