RocketMQ高可用架构涉及常用功能整理

news2024/12/22 9:21:46

RocketMQ高可用架构涉及常用功能整理

  • 1. 集群高可用系统架构和相关组件
    • 1.1 架构说明
    • 1.2 相关概念说明
    • 1.3 消息模型
      • 1.3.1 点对点模型
      • 1.3.2 发布订阅模型
      • 1.3.3 消息过滤
  • 2. rocketmq的核心参数
  • 3. rocketmq常用命令
  • 4. 事务性
    • 4.1 数据写入流程
    • 4.2 数据读流程
    • 4.3 事务消息
  • 5. 疑问和思考
    • 5.1 rocketmq的数据删除策略是怎样的?
  • 6. 参考文档

探讨rocketmq的系统架构以及以及整体常用的命令和系统分析,本文主要探讨高可用版本的rocketmq集群,并基于日常工作中的沉淀进行思考和整理。更多关于分布式系统的架构思考请参考文档关于常见分布式组件高可用设计原理的理解和思考


1. 集群高可用系统架构和相关组件

在常用的3大mq中,各有各自的性能差异,并且也有相互的弊端

  • ActiveMQ: 产品比较成熟,产品出现的比较早,能够支持多种客户端语言,相关的sdk相对丰富。但是产品功能相对简单,并且在设计之初是单机版,虽然后续有高可用版本,但是整体上集群的性能和高可用能力整体偏弱 ActiveMQ高可用架构涉及常用功能整理
  • RocketMQ: 产品上能够提供高可用能力,能够支持多种客户端语言,相关的sdk相对丰富,能够提供丰富的数据路由模式,并且鉴权设计完善。但是在多种模式中(比如镜像模式),数据使用镜像模式,集群的性能整体能力偏弱 RabbitMQ高可用架构涉及常用功能整理
  • Kafka: kafka的数据定位跟MQ略有不同,最大的不同时kafka不能提供消息生产即删除的语义,这会导致在产品定位上略有不同 KAFKA高可用架构涉及常用功能整理

纵观这3大mq的性能特点,似乎缺少一种能够提供强大的高可用扩展能力,并且能够提供丰富的mq特性的产品,并且能够完善的鉴权设计的产品。这也许就是rocketmq这个产品能够生产和问世的出发点。事实上,rocketmq在架构设计上,明显弥补了如上mq所面临的问题。但是由于rocketmq产品问世的时间较短,对java语言能够提供丰富的sdk,但是对于其他开发语言的支持以及社区生态还需要进一步建设。

1.1 架构说明

rocketmq的整体架构如下
在这里插入图片描述

相关核心的组件和角色作用如下

组件部署模式组件作用备注
producer客户端部署生产者创建消息消息一般可以包含 2 个部分: 消息体和标签
consumer客户端部署消费者连接到 RocketMQ 服务器,订阅到队列。消费者消费一条消息时,只消费消息的消息体(payload)在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者只会消费到消息体,也就不知道消息的生产者是谁,当然消费者也不需要知道
NameServer多机部署NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息。
BrokerServer多机部署、主从模式Broker主要负责消息的存储、投递和查询以及服务高可用保证包含多个子模块,提供完整的消息生产、消费服务

1.2 相关概念说明

列出重要的相关概念,更多概念可以参考 官网

角色说明角色作用备注
topicApache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息1.定义数据的分类隔离、2.定义数据的身份和权限,可以基于topic进行多租户的权限隔离设计
queueApache RocketMQ 中消息存储和传输的实际容器,也是 Apache RocketMQ 消息的最小存储单元Apache RocketMQ 的所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储,类似kafka的partition
tagTag标签过滤方式是 Apache RocketMQ 提供的基础消息过滤能力,基于生产者为消息设置的Tag标签进行匹配。生产者在发送消息时,设置消息的Tag标签,消费者需指定已有的Tag标签来进行匹配订阅。

topic和queue之间的关系如下图(类似kafka中的topic和parition关系)
在这里插入图片描述

1.3 消息模型

1.3.1 点对点模型

在这里插入图片描述
点对点模型也叫队列模型,具有如下特点:

  • 消费匿名:消息上下游沟通的唯一的身份就是队列,下游消费者从队列获取消息无法申明独立身份。
  • 一对一通信:基于消费匿名特点,下游消费者即使有多个,但都没有自己独立的身份,因此共享队列中的消息,每一条消息都只会被唯一一个消费者处理。因此点对点模型只能实现一对一通信。

1.3.2 发布订阅模型

在这里插入图片描述
发布订阅模型具有如下特点:

  • 消费独立:相比队列模型的匿名消费方式,发布订阅模型中消费方都会具备的身份,一般叫做订阅组(订阅关系),不同订阅组之间相互独立不会相互影响。
  • 一对多通信:基于独立身份的设计,同一个主题内的消息可以被多个订阅组处理,每个订阅组都可以拿到全量消息。因此发布订阅模型可以实现一对多通信。

发布订阅模式下,rocketmq的topic和queue提供的功能跟kafka的topic和partition关系很类似。

1.3.3 消息过滤

消费者订阅了某个主题后,Apache RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息,可通过设置过滤条件在 Apache RocketMQ 服务端进行过滤,只获取到需要关注的消息子集,避免接收到大量无效的消息。本文介绍消息过滤的定义、原理、分类及不同过滤方式的使用方法、配置示例等。
在这里插入图片描述

Tag标签过滤
Tag标签过滤方式是 Apache RocketMQ 提供的基础消息过滤能力,基于生产者为消息设置的Tag标签进行匹配。生产者在发送消息时,设置消息的Tag标签,消费者需指定已有的Tag标签来进行匹配订阅。
在这里插入图片描述

2. rocketmq的核心参数

参考 Admin Tool

3. rocketmq常用命令

参考 Admin Tool

4. 事务性

4.1 数据写入流程

参考 生产者(Producer)

4.2 数据读流程

参考 消费者分组(ConsumerGroup)

4.3 事务消息

事务消息是 Apache RocketMQ 提供的一种高级消息类型,支持在分布式场景下保障消息生产和本地事务的最终一致性。

事务消息交互流程如下图所示。在这里插入图片描述

  1. 生产者将消息发送至Apache RocketMQ服务端。
  2. Apache RocketMQ服务端将消息持久化成功之后,向生产者返回Ack确认消息已经发送成功,此时消息被标记为"暂不能投递",这种状态下的消息即为半事务消息。
  3. 生产者开始执行本地事务逻辑。
  4. 生产者根据本地事务执行结果向服务端提交二次确认结果(Commit或是Rollback),服务端收到确认结果后处理逻辑如下:
  5. 二次确认结果为Commit:服务端将半事务消息标记为可投递,并投递给消费者。
  6. 二次确认结果为Rollback:服务端将回滚事务,不会将半事务消息投递给消费者。
  7. 在断网或者是生产者应用重启的特殊情况下,若服务端未收到发送者提交的二次确认结果,或服务端收到的二次确认结果为Unknown未知状态,经过固定时间后,服务端将对消息生产者即生产者集群中任一生产者实例发起消息回查。 说明 服务端回查的间隔时间和最大回查次数,请参见参数限制。
  8. 生产者收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
  9. 生产者根据检查到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤4对半事务消息进行处理。

更详细环节参考 事务消息

5. 疑问和思考

5.1 rocketmq的数据删除策略是怎样的?

参考 消息存储和清理机制

6. 参考文档

  • RocketMQ官网

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

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

相关文章

基于Spring Boot的安康旅游网站的设计与实现,计算机毕业设计(带源码+论文)

源码获取地址: 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1760645517548793858

每日五道java面试题之spring篇(二)

目录: 第一题 Spring事务传播机制第二题 Spring事务什么时候会失效?第三题 什么是bean的⾃动装配,有哪些⽅式?第四题 Spring中的Bean创建的⽣命周期有哪些步骤?第五题 Spring中Bean是线程安全的吗? 第一题 Spring事务…

排序算法之——选择排序

选择排序 1.1基本思想1.1.1总体思路1.1.2具体思路 1.2图示详解1.3完整代码1.4动图演示1.5时间复杂度1.6空间复杂度 1.1基本思想 1.1.1总体思路 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排…

【学习iOS高质量开发】——接口与API设计

文章目录 一、用前缀避免命名空间冲突1.为什么用前缀避免明明冲突2.应当如何避免3.要点 二、提供“全能初始化方法”1.什么是全能初始化方法2.如何重写初始化方法3.一个类有多个全能初始化方法要注意的问题3.要点 三、实现description方法1.什么是description方法2.在descripti…

2024 ,Android 15 预览版来了

日前,Android 15 发布了 Preview 1 预览版,预览计划将从 2024 年 2 月持续到 Android 15 公开发布(预计 10 月),3月是开发者预览版 2,4 月将推出 Beta 1,5 月将推出 Beta 2,6 月的 B…

大模型平民化技术之LORA

1. 引言 在这篇博文中, 我将向大家介绍LoRA技术背后的核心原理以及相应的代码实现。 LoRA 是 Low-Rank Adaptation 或 Low-Rank Adaptors 的首字母缩写词,它提供了一种高效且轻量级的方法,用于微调预先训练好的的大语言模型。这包括 BERT 和…

7-liunx服务器规范

目录 概况liunx日志liunx系统日志syslog函数openlog 可以改变syslog默认输出方式 ,进一步结构化 用户信息进程间的关系会话ps命令查看进程关系 系统资源限制改变工作目录和根目录服务器程序后台话 概况 liunx服务器上有很多细节需要注意 ,这些细节很重要…

C++的deque容器->基本概念、构造函数、赋值操作、大小操作、插入和删除、数据存取、排序

#include<iostream> using namespace std; #include <deque> //deque构造函数 void printDeque(const deque<int>& d) { for (deque<int>::const_iterator it d.begin(); it ! d.end(); it) { //*it 100; 容器中的数据不可以修…

【Java网络编程06】HTTPS原理

1. HTTPS基本概念 HTTPS&#xff1a;HTTPS也是一个应用层协议&#xff0c;它在HTTP协议的基础上引入了一个加密层——SSL协议&#xff0c;区别就在于HTTP协议是基于明文传输的&#xff08;不安全&#xff09;&#xff0c;使用HTTPS加密就能在一定程度上防止数据在传输过程中被…

高级语言期末2012级A卷

1.编写函数&#xff0c;输出任意正整数n的位数&#xff08;n默认为存储十进制的整形变量&#xff09; 例如&#xff1a;正整数13&#xff0c;则输出2,&#xff1b;正整数3088&#xff0c;则输出4 #include <stdio.h>int func(int n) {int count0;while(n>0) {n/10;co…

自学Python第十八天-自动化测试框架(二):DrissionPage、appium

自学Python第十八天-自动化测试框架&#xff08;二&#xff09;&#xff1a;DrissionPage、appium DrissionPage环境和安装配置准备工作简单的使用示例控制浏览器收发数据包模式切换 浏览器模式创建浏览器对象访问页面加载模式none 模式技巧 获取页面信息页面交互查找元素ele()…

【学网攻】 第(30)节 -- 综合实验三

系列文章目录 目录 系列文章目录 文章目录 前言 一、综合实验 二、实验 1.引入 实验目标 实验设备 实验拓扑图 实验配置 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节…

个人博客系列-环境配置-gitee(2)

注册gitee账户 地址&#xff1a;https://gitee.com/ 此步骤省略 新建仓库 执行以下命令 即可 拉取代码 创建目录 mkdir myCode && cd myCode 登录gitee找到项目&#xff0c;点击克隆&#xff0c;拉取代码 连接远程仓库命令 git remote add origin 仓库地址http…

负载均衡.

简介: 将请求/数据【均匀】分摊到多个操作单元上执行&#xff0c;负载均衡的关键在于【均匀】。 负载均衡的分类: 网络通信分类 四层负载均衡:基于 IP 地址和端口进行请求的转发。七层负载均衡:根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。 载体维度分类 硬…

证件照(兼容H5,APP,小程序)

证件照由uniappuyui开发完成&#xff0c;并同时兼容H5、App、微信小程序、支付宝小程序&#xff0c;其他端暂未测试。 先看部分效果图吧具体可以下方复制链接体验demo 首页代码 <template><view class""><view class"uy-m-x-30 uy-m-b-20"…

2024移动应用的发展趋势,开发者如何抢占变现先机?

2024年对移动应用市场将是变革之年&#xff0c;社交媒体变现方式的瞬息万变&#xff0c;到人工智能的快速崛起&#xff0c;移动应用市场的换代速度逐渐加快&#xff0c;一些新的机遇也在出现。 data.ai推出的2024全球移动市场预测&#xff1a; •TikTok将打破应用商店支出的所…

Linux中的各类时间 与 find命令的常用参数

之前研究wal日志清理的副产物&#xff0c;wal日志名被修改后文件的哪个时间会变&#xff1f;应该如何删除&#xff1f;由此整理一下Linux中atime、mtime、ctime的区别&#xff0c;以及find的常见用法。 一、 Linux中的各类时间 1. 各类时间的定义 Linux中有三种用于文件时间戳…

基于springboot+vue的桂林旅游景点导游平台(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

3个精美的wordpress企业网站模板

WordPress企业网站模板 https://www.zhanyes.com/qiye/6305.html WordPress企业官网模板 https://www.zhanyes.com/qiye/6309.html WordPress律师模板 https://www.zhanyes.com/qiye/23.html

新代码质量评审标准与评分表格

前面发了一个《代码质量评审标准与评分表格》&#xff0c;是比较宽泛的&#xff0c;下面发一个更贴近具体场景的《新代码质量评审标准与评分表格》。 一、引言 本文档旨在为代码质量评审提供一个统一的标准和评分机制&#xff0c;以确保代码质量、可读性和可维护性。通过遵循这…