当前位置: 首页 > news >正文

分布式消息队列RocketMQ

一、RocketMQ概述


1.1 MQ 概述

MQ,Message Queue,是一种提供消息队列服务的中间件,也成为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据

1.2 MQ 用途

MQ的用途总结起来可分为以下三点

  • 限流削峰

MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮

  • 异步解耦

上游系统对下游系统的调用若为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两层间添加一个MQ层

  • 数据收集

分布式系统会产生海量数据,如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或批量采集汇总,然后对这些数据流进行大数据分析,这是当前互联网平台的必备技术。通过MQ完成此类数据收集是最好的选择

1.3 常见 MQ 产品

  • ActiveMQ

ActiveMQ 是使用Java语言开发一款MQ产品。早期很多公司与项目中都在使用。但现在的社区活跃度已经很低。现在的项目中已经很少使用了

  • RabbitMQ

RabbitMQ 是使用 ErLang 语言开发的一款MQ产品。其吞吐量较 Kafka 与 RocketMQ 要低,且由于其不是Java语言开发,所以公司内部对其实现定制化开发难度较大。对于Spring Cloud Netflix,其仅支持 RabbitMQ 与 Kafka。吞吐量在5.95w/s,CPU资源消耗较高

  • Kafka

Kafka 是使用Scala / Java语言开发的一款MQ产品。其最大的特点就是高吞吐量,常用于大数据领域的实时计算、日志采集等场景。其没有遵循任何常见的MQ协议,而是使用自研协议,会出现数据丢失,功能比较单一。吞吐量高达17.w/s,这主要取决于它的队列模式保证了写磁盘的过程是线性IO。此时broker磁盘IO已达瓶颈

  • RocketMQ

RocketMQ 是使用Java语言开发的一款MQ产品。经过数年阿里双11的考验,性能与稳定性非常高。其没有遵循任何常见的MQ协议,而是使用自研协议。对于Spring Cloud Alibaba,其支持RabbitMQ、Kafka,但没有提倡使用 RocketMQ。吞吐量在11.6w/s,磁盘IO%util已接近100%。RocketMQ的消息写入内存后即返回ack,由单独的线程专门做刷盘的操作,所有的消息均是顺序写文件

1.4 MQ 的优缺点

  • 系统可用性减低

系统引入外部依赖增多,系统的稳定性就会变差。一旦MQ宕机,对业务会产生影响。这就需要考虑如何保证MQ的高可用

  • 系统复杂度提高

引入MQ后系统复杂度会大大提高。以前服务之间可以进行同步的服务调用,引入MQ后,就会变成异步调用,数据的链路就会变得更加复杂。并且还会带来其他一些问题。比如:如何保证消费的消息不会丢失?不会重复消费消息?如何保证消息的顺序性等问题

  • 消息一致性问题

A系统处理完业务,通过MQ发送消息给B、C系统进行后续的业务处理。如果B系统处理成功,C系统处理失败,这事就需要考虑如何保证消息数据处理的一致性

1.5 MQ 常见协议

  • JMS

JMS,Java Messaging Service(Java消息服务)。是Java平台上有关MOM(Message Oriented Middleware,面向消息的中间件)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口,简化企业应用开发。AcitveMQ是该协议的典型实现

  • STOMP

STOMP,Streaming Text Oriented Message Protocol(面向文本流消息协议),是一种MOM设计的简单文本协议。STOMP提供一个可互操作的连接格式,允许客户端与任意STOMP消息代理(Broker)进行交互。ActiveMQ是该协议的典型实现,RabbitMQ通过插件可以支持该协议

  • AMQP

AMQP,Advanced Message Queuing Protocol(高级消息队列协议),是一个提供统一消息服务的应用层标准,是应用层协议的一个开放标准,是一种MOM设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端 / 中间件不同产品,不同开发语言等条件限制。RabbitMQ是该协议的典型实现

  • MQTT

MQTT,Message Queuing Telemetry Transport(消息队列遥感测传输),是IBM开发的一个即时通讯协议,是一种二进制协议,主要用于服务器和低低功耗IoT(物联网)设备间的通信。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当作传感器和制动器的通信协议。RabbitMQ通过插件可以支持该协议

1.6 参考约束和建议

Apache RocketMQ 系统中存在很多自定义参数和资源命名,您在使用 Apache RocketMQ 时建议参考如下说明规范系统设置,避对某些具体参数设置不合理导致应用出现异常

参数建议范围说明
Topic名称字符建议:字母az或AZ、数字0~9以及下划线()、短划线(-)和百分号(%)。 长度建议:1~64个字符。 系统保留字符:Topic名称不允许使用以下保留字符或含有特殊前缀的字符命名。 保留字符: TBW102 *BenchmarkTest* SELF_TEST_TOPIC *OFFSET_MOVED_EVENT* SCHEDULE_TOPIC_XXXX *RMQ_SYS_TRANS_HALF_TOPIC* RMQ_SYS_TRACE_TOPIC *RMQ_SYS_TRANS_OP_HALF_TOPIC 特殊前缀:* rmq_sys %RETRY% %DLQ% rocketmq-broker-Topic命名应该尽量使用简短、常用的字符,避免使用特殊字符。特殊字符会导致系统解析出现异常,字符过长可能会导致消息收发被拒绝
ConsumerGroup名称字符建议:支持字母az或AZ、数字0~9以及下划线()、短划线(-)和百分号(%)。 长度建议:1~64个字符。 系统保留字符:ConsumerGroup不允许使用以下保留字符或含有特殊前缀的字符命名。 保留字符: *DEFAULT_CONSUMER* DEFAULT_PRODUCER *TOOLS_CONSUMER* FILTERSRV_CONSUMER *__MONITOR_CONSUMER* CLIENT_INNER_PRODUCER *SELF_TEST_P_GROUP* SELF_TEST_C_GROUP *CID_ONS-HTTP-PROXY* CID_ONSAPI_PERMISSION *CID_ONSAPI_OWNER* CID_ONSAPI_PULL *CID_RMQ_SYS_TRANS* 特殊字符 * CID_RMQ_SYS * CID_HOUSEKEEPING
ACL Credentials字符建议:AK(AccessKey ID)、SK(AccessKey Secret)和Token仅支持字母az或AZ、数字0~9。 长度建议:不超过1024个字符
请求超时时间默认值:3000毫秒。 取值范围:该参数为客户端本地行为,取值范围建议不要超过30000毫秒请求超时时间是客户端本地同步调用的等待时间,请根据实际应用设置合理的取值,避免线程阻塞时间过长
消息大小默认值:不超过4 MB。不涉及消息压缩,仅计算消息体body的大小。 取值范围:建议不超过4 MB消息传输应尽量压缩和控制负载大小,避免超大文件传输。若消息大小不满足限制要求,可以尝试分割消息或使用OSS存储,用消息传输URL
消息自定义属性字符限制:所有可见字符。 长度建议:属性的Key和Value总长度不超过16 KB。 系统保留属性:不允许使用以下保留属性作为自定义属性的Key。 保留属性Key
MessageGroup字符限制:所有可见字符。 长度建议:1~64字节MessageGroup是顺序消息的分组标识。一般设置为需要保证顺序的一组消息标识,例如订单ID、用户ID等
消息发送重试次数默认值:3次。 取值范围:无限制消息发送重试是客户端SDK内置的重试策略,对应用不可见,建议取值不要过大,避免阻塞业务线程。 如果消息达到最大重试次数后还未发送成功,建议业务侧做好兜底处理,保证消息可靠性
消息消费重试次数默认值:16次消费重试次数应根据实际业务需求设置合理的参数值,避免使用重试进行无限触发。重试次数过大容易造成系统压力过量增加
事务异常检查间隔默认值:60秒事务异常检查间隔指的是,半事务消息因系统重启或异常情况导致没有提交,生产者客户端会按照该间隔时间进行事务状态回查。 间隔时长不建议设置过短,否则频繁的回查调用会影响系统性能
半事务消息第一次回查时间默认值:取值等于[事务异常检查间隔] * 最大限制:不超过1小时
半事务消息最大超时时长默认值:4小时。 * 取值范围:不支持自定义修改半事务消息因系统重启或异常情况导致没有提交,生产者客户端会按照事务异常检查间隔时间进行回查,若超过半事务消息超时时长后没有返回结果,半事务消息将会被强制回滚。 您可以通过监控该指标避免异常事务
PushConsumer本地缓存默认值: *最大缓存数量:1024条。 *最大缓存大小:64 M。 取值范围:支持用户自定义设置,无限制消费者类型为PushConsumer时,为提高消费者吞吐量和性能,客户端会在SDK本地缓存部分消息。缓存的消息的数量和大小应设置在系统内存允许的范围内
PushConsumer重试间隔时长默认值: *非顺序性投递:间隔时间阶梯变化,具体取值,请参见PushConsumer消费重试策略。 *顺序性投递:3000毫秒
PushConsumer消费并发度默认值:20个线程
获取消息最大批次默认值:32条消费者从服务端获取消息时,一次获取到最大消息条数。建议按照实际业务设置合理的参数值,一次获取消息数量过大容易在消费失败时造成大批量消息重复
SimpleConsumer最大不可见时间默认值:用户必填参数,无默认值。 取值范围建议:最小10秒;最大12小时消费不可见时间指的是消息处理+失败后重试间隔的总时长,建议设置时取值比实际需要耗费的时间稍微长一些

相关文章:

分布式消息队列RocketMQ

一、RocketMQ概述 1.1 MQ 概述 MQ,Message Queue,是一种提供消息队列服务的中间件,也成为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据 1.2 MQ 用途 MQ的用途总结起来可分为以下三点 限流削峰…...

诗韵--代码之外的生活:2025 元旦歌

2025 元旦歌 1 说明2 正文3 简评 1 说明 又是一年元旦,在公司抽个空,写首诗纪念一下。 本系列博客:诗韵–代码之外的生活 2 正文 2025 元旦歌 一年又一年, 又到新元旦。 恍若零五年, 已是二五年。 工作忙连连&#x…...

SpringBoot项目启动的时候,指定jvm内存大小的3种方式

1. 通过命令行固定参数 在命令行中运行 Spring Boot 应用程序时,可以使用 -Xms 和 -Xmx 选项指定初始和最大堆内存大小。例如: java -Xms512m -Xmx1024m -jar mySpringBootApp.jar 优点: 简单明了 缺点: 是写死的,…...

学习vue3的笔记

一、vue和react的对比 1、基础介绍 vue:https://cn.vuejs.org/ vue3是2020年创建的 react:https://react.dev/ react是一个2013年开源的JavaScript库,严格意义上来说不是一个框架 2、diff算法 两个框架采用的都是同级对比策略 两节点对…...

MySQL UNION

关于《MySQL UNION》的操作,我查找到了一些有用的信息。 MySQL的UNION操作符用于将两个或多个SELECT语句的结果组合到一个结果集中,并去除重复的行。每个SELECT语句的列数和对应位置的数据类型必须相同。其基本语法格式如下: SELECT column…...

day21-ubuntu入门

小趣味docker 1.安装docker&#xff0c;从阿里云的yum yum install docker -y 2.需要提前准备好docker镜像&#xff0c;确保可用 docker -v 3.导入该游戏镜像&#xff08;先用systemctl start docker&#xff09; docker load < game_v2.tar 4.一条命令&#xff0c;在…...

开发小工具:ping地址

开发小工具&#xff1a;ping地址 import socketdef tcp_port_scan(ip,port):#创建套接字socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置超时sock.settimeout(0.2)try:#发请求result sock.connect_ex((ip,port))if result 0:print(f{ip}--{port}接口连接成功)res…...

在 Python 中使用 ADX 进行算法交易

在阅读本文前&#xff0c;可查阅以往文章: 技术指标-ATR 技术指标有几个分支&#xff0c;其中趋势指标使用最广泛。这些工具可帮助交易者确定市场趋势的方向和强度&#xff0c;使他们能够相应地调整交易。如果趋势指标得到有效应用&#xff0c;它们通常会产生积极的结果。 在…...

Unity 3D 从入门到精通:开启游戏开发的奇幻之旅

一、引言 在当今数字化的时代&#xff0c;游戏产业蓬勃发展&#xff0c;成为了全球娱乐领域的重要支柱。Unity 3D 作为一款功能强大、跨平台的游戏开发引擎&#xff0c;凭借其易用性、高效性和丰富的资源&#xff0c;吸引了无数开发者投身于游戏创作的世界。无论是独立开发者怀…...

神经网络-VggNet

2014年VggNet被推出&#xff0c;获取了ILSVRC2014比赛分类项目的第二名&#xff0c;第一名是GoogleNet&#xff0c;该网络在下节介绍&#xff0c;本节主要介绍VggNet。 VggNet可以称为是一个家族&#xff0c;根据层数的不同包括了A、A-LRN、B、C、D等网络结构&#xff0c;其中…...

用AI生成PPT,告别繁琐,一键生成高效方案

用AI生成PPT&#xff0c;告别繁琐&#xff0c;一键生成高效方案&#xff01;制作PPT曾经是一件非常繁琐的工作。让人又爱又恨&#xff0c;爱的是它可以让你的想法可视化&#xff0c;恨的是&#xff0c;要做出一份精美的PPT&#xff0c;往往需要耗费大量时间和精力。现在AI技术的…...

基于 `android.accessibilityservice` 的 Android 无障碍服务深度解析

基于 android.accessibilityservice 的 Android 无障碍服务深度解析 目录 引言无障碍服务概述架构设计核心功能设计模式核心要点实现细节性能优化安全与隐私案例分析未来展望结论引言 在当今的移动应用生态系统中,无障碍服务(Accessibility Service)扮演着至关重要的角色。…...

UE5材质节点Frac/Fmod

Frac取小数 Fmod取余数 转场效果 TimeMultiplyFrac很常用 Timesin / Timecos 制作闪烁效果...

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。动图演示&#xff1a; 在微服务系统…...

Kafka 性能提升秘籍:涵盖配置、迁移与深度巡检的综合方案

文章目录 1.1.网络和io操作线程配置优化1.2.log数据文件刷盘策略1.3.日志保留策略配置1.4.replica复制配置1.5.配置jmx服务1.6.系统I/O参数优化1.6.1.网络性能优化1.6.2.常见痛点以及优化方案1.6.4.优化参数 1.7.版本升级1.8.数据迁移1.8.1.同集群broker之间迁移1.8.2.跨集群迁…...

小程序租赁系统构建指南与市场机会分析

内容概要 在当今竞争激烈的市场环境中&#xff0c;小程序租赁系统正崭露头角&#xff0c;成为企业转型与创新的重要工具。通过这个系统&#xff0c;商户能够快速推出自己的小程序&#xff0c;无需从头开发&#xff0c;节省了大量时间和资金。让我们来看看这个系统的核心功能吧…...

SOME/IP 协议详解——远程过程调用(RPC)

文章目录 1. 传输协议绑定1.1 UDP 绑定1.2 TCP 绑定1.3 多服务实例&#xff08;重要&#xff09;1.4 通过 UDP 传输大型 SOME/IP 消息&#xff08;SOME/IP - TP&#xff09; 2. 请求 / 响应通信3. Fire&Forget 通信4. 通知事件5. 字段6. 错误处理6.1 返回码6.2 错误消息6.3…...

C++ 设计模式:命令模式(Command Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 访问者模式 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装成一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志…...

安卓/system/bin下命令中文说明(AI)

ATFWD-daemon&#xff1a;AT指令转发守护进程&#xff0c;用于将AT指令从应用层转发到调制解调器。 PktRspTest&#xff1a;数据包响应测试工具。 StoreKeybox&#xff1a;存储密钥盒工具&#xff0c;用于安全地存储加密密钥。 WifiLogger_app&#xff1a;WiFi日志记录应用&…...

MATLAB程序转C# WPF,dll集成,混合编程

工作中遇到一个需求&#xff0c;有一部分算法的代码需要MATLAB来进行处理&#xff0c;而最后需要集成到C#中的wpf项目中去&#xff0c;选择灵活性更高的dll&#xff0c;去进行集成。&#xff08;可以简单理解为&#xff1a;将MATLAB的函数&#xff0c;变为C#中类的函数成员&…...

别再为焊缝偏差头疼了!手把手教你用ROBOGUIDE V9.4配置FANUC机器人电弧跟踪

工业机器人焊接精度革命&#xff1a;FANUC电弧跟踪技术实战解析 焊接车间里刺眼的弧光下&#xff0c;老师傅擦了擦护目镜上的焊渣&#xff0c;第3次调整机器人路径——这批不锈钢管件的装配误差比预期大了0.8毫米&#xff0c;传统示教点焊出的焊缝像醉汉走路般歪歪扭扭。这正是…...

为什么很多商城系统,只适合“创业期”,却撑不起“增长期”?——真正成熟的系统,核心从来不是“今天能跑”,而是“业务增长后依然可控”

很多企业第一次做商城系统时&#xff0c;通常都会特别关注&#xff1a; 能不能快速上线功能够不够用页面能不能快速交付能不能尽快开始运营 因为在业务初期。 企业最重要的&#xff1a; 通常都是&#xff1a; 先把业务跑起来 所以很多系统前期的发展逻辑都很类似&#xff…...

算力基石:CPU、GPU与嵌入式AI的技术逻辑与融合发展

在人工智能全面普及的时代&#xff0c;算力已经成为数字产业发展的核心驱动力。从日常使用的智能手机、家用电脑&#xff0c;到云端大模型、智能汽车、工业传感设备&#xff0c;各类智能终端的运转都离不开处理器的算力支撑。其中&#xff0c;CPU作为通用计算核心、GPU作为并行…...

CHI协议WriteZero事务的DBIDResp与Comp响应机制解析

1. CHI协议中WriteZero事务的响应机制解析在AMBA 5 CHI协议中&#xff0c;WriteZero类事务&#xff08;包括WriteUniqueZero和WriteNoSnpZero&#xff09;的响应流程存在一个看似冗余的设计特点&#xff1a;它们会同时接收DBIDResp和Comp两种响应。这种现象常常让硬件设计工程师…...

FPGA+DDR3+千兆以太网:构建实时高清图像传输与显示系统(附源码)

1. 实时高清图像传输系统的核心价值 想象一下这样的场景&#xff1a;医疗内窥镜手术中&#xff0c;医生需要实时查看1080p高清影像&#xff1b;工业检测线上&#xff0c;高速摄像头每秒产生数百帧4K画面&#xff1b;无人机航拍时&#xff0c;需要将拍摄的高清视频实时回传到地面…...

NotebookLM相似文档推荐不准,深度解析向量维度坍缩、跨域语义漂移与上下文窗口截断三大根源问题

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM相似文档推荐不准的系统性现象观察 在实际使用 NotebookLM 过程中&#xff0c;用户频繁反馈其“相似文档推荐”功能存在显著偏差&#xff1a;高语义相关但低表面重合度的文档常被遗漏&#x…...

【免费下载】 AD7124中文手册(非常完整)

AD7124中文手册&#xff08;非常完整&#xff09; 【下载地址】AD7124中文手册非常完整 AD7124-8是一款高性能模拟前端&#xff0c;设计用于在各种苛刻环境中实现精确的数据采集。这款芯片的特点在于其内置的高精度24位Σ-Δ模数转换器(ADC)&#xff0c;能够灵活配置以支持8个差…...

【免费下载】 青藏高原矢量边界数据下载

青藏高原矢量边界数据下载 【下载地址】青藏高原矢量边界数据下载 青藏高原矢量边界数据下载 项目地址: https://gitcode.com/open-source-toolkit/7d915 数据简介 本仓库提供青藏高原的矢量边界数据下载。该数据可在ARCGIS中直接导入并打开&#xff0c;附带坐标系统信…...

Claude帮用户找回40万美元Bitcoin:AI在密码破解上真正擅长的是什么?

一名美国男子在2013年买了5个BTC&#xff0c;2015年在醉酒后修改钱包密码&#xff0c;忘记了新密码。 11年后&#xff0c;他用Claude找回了价值40万美元的资产。 网友&#xff1a;AI真的很神奇。 但很少有人问这个问题&#xff1a;Claude到底是怎么做到的&#xff0c;以及更重要…...

UE5新手必看:给你的自定义Pawn加上碰撞,别再让它“穿墙”了!

UE5碰撞系统实战&#xff1a;从零构建防穿墙Pawn的完整指南 当你在UE5中第一次创建自定义Pawn时&#xff0c;最令人沮丧的莫过于看着自己精心设计的角色像幽灵一样穿过墙壁和障碍物。这种"穿模"现象不仅破坏游戏体验&#xff0c;更会导致后续游戏逻辑的全面崩溃。本文…...