RocketMq使用规范(纯技术和实战建议)
概述:
- 使用规范主要从,生产、可靠性、和消费为轴线定义使用规范;
- kafka使用核心:削峰、解耦、向下游并行广播通知(无可靠性保证)和分布式事务,本规范仅从削峰、解耦、向下游并行广播通知论述;
1、可靠性(强制):
可靠性包括Producer发送消息机制的可靠性,RocketMQ Server(Broker)消息持久化刷盘机制和Broker主从节点消息同步机制,Consumer消息的消费机制。
1.1、Producer发送消息的可靠性:
1.1.1、核心参数设置:
生产端(Producer):
- sendMsgTimeout:消息发送超时时长,默认:3000,单位毫秒;
- retryTimesWhenSendFailed:同步发送重试次数,默认:2;
- retryTimesWhenSendAsyncFailed:异步发送重试次数,默认:2;
- compressMsgBodyOverHowmuc:消息body需要压缩的阈值,默认:4K;
- maxMessageSize:客户端验证,允许发送的最大消息体大小,默认:4M;
注:
- rocketmq 的 client 端及 broker 端均有对消息体大小是否超出 maxMessageSize 进行校验;
- client 端的 DefaultMQProducer 定义了 maxMessageSize,默认是 4M 大小;
- send 方法及 batch 方法都会校验消息的大小;
- 服务端 conf/broker.conf 可以指定 maxMessageSize 大小,如果需要修改 maxMessageSize 大小需要跟服务端配合一起修改,否则可能投递失败;
消费端(Consumer):
- pullBatchSize:每批次从broker拉取消息的最大个数,默认值是32;
- consumeMessageBatchMaxSize:单次消费时一次性消费多少条消息;
- consumeFromWhere:指定消息消费读取策略,CONSUME_FROM_FIRST_OFFSET:初次从消息队列头部开始消费,后续再启动接着上次消费的进度开始消费;CONSUME_FROM_LAST_OFFSET:默认策略,初次从该队列最尾开始消费,即跳过历史消息,后续再启动接着上次消费的进度开始消费;CONSUME_FROM_TIMESTAMP:从某个时间点开始消费,默认是半个小时以前,后续再启动着上次消费的进度开始消费;
-
consumeThreadMin:最小消费线程池数量;
- consumeThreadMax:最大消费线程池数量;
- messageModel:消费者消费模式,CLUSTERING:集群模式,默认是CLUSTERING;BROADCASTING:广播模式;
注:
- pullBatchSize 的大小受制于 Broker 配置文件中 maxTransferCountOnMessageInMemory 参数的设置,该参数默认设置为 32,也即是每次从服务端拉取的最大的数量不能超过 32,因此即使设置 pullBatchSize 超过32,最后也只返回 32。因此,若要每次拉取的消息量超过 32,可以修改 broker 配置文件里该参数的值,并重启 broker 服务;
- 当从 Broker 拉取消息的大小超过 consumeMessageBatchMaxSize 的大小时,将会对消息进行拆分,然后提交到线程池进行处理;
1.1.2、刷盘机制:
rocketmq 刷盘机制分为同步刷盘,和异步刷盘。
1.1.2.1、同步刷盘:
同步刷盘数据可靠性更高,主要是防止异常断电消息丢失,但消息发送效率不高。
1.1.2.2、异步刷盘:
异步刷盘数据可靠性不高,异常断电消息可能会丢失,但消息发送效率高。
注: 刷盘方式可以通过Broker配置文件里的flushDiskType参数设置,这个参数有两种值:
- SYNC_FLUSH (同步刷盘);
- ASYNC_FLUSH (异步刷盘);
这个参数开发人员无法决定,运维人员确定。
1.1.3、同步机制:
同步机制主要指,Broker 主从节点之间同步消息,防止单点故障消息丢失,同步机制有同步复制、异步复制两种策略。通过 Broker 配置文件里的 brokerRole 参数设置,有三种选项:sync_master、async_master 和 slave。sync_master 和 async_master 用于 Master 角色 Broker 的配制,sync_master 同步复制,async_master 异步复制。slave 则是在 slave 的 Broker 中指定。
- 在 SYNC_MASTER 场景下:消息发送到 Master 后,暂时不返回成功/失败,而是等待 slave 拉取,若在规定时间内(默认3s)没有拉取到该消息,则 Master 会返回一个 FLUSH_SLAVE_TIMEOUT 异常给发送方,此时该消息发送即算作失败;
- 在 ASYNC_MASTER 场景下:消息发送到 Master 后,不管 slave 有没有拉取到该消息,Master 都会返回成功;
注:不管是哪一种策略,底层同步逻辑是一致的:均是由slave不断轮询master拉取消息,并提交同步offset。
1.1.4、消息生产(producer):
Rocketmq 投递消息有三种方式:单向消息、同步消息、异步消息。
1.1.4.1、单向消息:
单向(Oneway)发送特点只负责发送消息,不等待服务器回应,且没有回调函数触发。即:只发送请求不等待应答。发送效率极高,但极易丢失消息。

1.1.4.2、同步消息:
同步发送指消息发出后,会阻塞工作线程,直致成功,或者失败返回。发送效率极低,但数据可靠性极高。

1.1.4.3、异步消息:
异步发送指消息发出后,不会阻塞当前工作线程。异步发送实现发送回调接口,异步处理响应结果,成功、失败、或异常。

1.1.5、消息消费(consumer):
RocketMq 消息的消费机制可分为分组消费、广播消费、消费模式、消费可靠性和死信队列。
1.1.5.1、分组消费:
分组消费,指多个消费端通过同一消费组ID去消费,此种消费同一组,一对一消费模式。分组消费初次订阅Topic时,可以指定Offset从哪消费,即从Topic头开始消费,还是末端消费(最新),消费以后会以消费组维度记录Topic的消费Offset。
1.1.5.2、广播消费:
广播消费所有 Consumer 都能收到订阅以后最新的 Topic 消息,即:只消费最新的,Consumer 停了以后也不会去记录 Consumer 消费的 Offset。而且失败不会进入重试和死信队列。
1.1.5.3、消费模式:
RocketMq 的消费模式分为,push 和 pull 消费两种,pull 即:主动从消息服务器拉取信息,push 即 Broker 主动推送消息到 Counsumer (其实 RocketMq 没有做到,本质上还是拉取,仅是拉取的频率高,近似推送。)
1.1.5.4、消费可靠性:
消息的可靠性分为消息消费的提交方式和重试机制。
提交方式指:
- 先提交后消费;
- 先消费,消费成功后再提交;
1可以解决重复消费的问题但是会丢失消息(不可靠),2会导制消息重复(可靠),得去从幂等。
重试机制:
消费者消费消息后,需要给 Broker 返回消费状态,Topic 消息队列的 Offset 才会下移,否则会重试,重试分为:
- 异常重试:由于 Consumer 端逻辑出现了异常,导致返回了 RECONSUME_LATER 状态,那么 Broker 就会在一段时间后尝试重试;
- 超时重试:如果 Consumer 端处理时间过长,或者由于某些原因线程挂起,导致迟迟没有返回消费状态,Broker 就会认为 Consumer 消费超时,此时会发起超时重试;
RocketMQ 可在 broker.conf 文件中配置 Consumer 端的重试次数和重试时间间隔,如下:
messageDelayLevel = 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
但是在大部分情况下,如果 Consumer 端逻辑出现异常,重试太多次也没有很大的意义,我们可以在代码中指定最大的重试次数。
RocketMQ 会有一个针对消费组创建重试队列,当消费失败后会放入重试队列,后续消息周期间隔性消费是通过重试队列实现的,达到最大次数会放入死信队列。
1.1.5.5、死信队列:
当一条消息初次消费失败,消息队列 RocketMQ 会自动进行消息重试,达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息。此时消息队列 RocketMQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中,即死信队列,具有以下特性:
- 一个死信队列对应一个 Group ID, 而不是对应单个消费者实例;
- 如果一个 Group ID 未产生死信消息,消息队列 RocketMQ 不会为其创建相应的死信队列。一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic;
- 死信队列是一个特殊的 Topic,名称为%DLQ%consumerGroup;
死信队列中的消息需要人工干预,在 RocketMQ 中,可以通过使用 console 控制台对死信队列的权限更改为读写,然后对消息进行重发,或者订阅对应的 Topic 使得消费者实例再次进行消费。
相关文章:
RocketMq使用规范(纯技术和实战建议)
概述: 使用规范主要从,生产、可靠性、和消费为轴线定义使用规范;kafka使用核心:削峰、解耦、向下游并行广播通知(无可靠性保证)和分布式事务,本规范仅从削峰、解耦、向下游并行广播通知论述&am…...
matlab离散系统仿真分析——电机
目录 1.电机模型 2.数字PID控制 3.MATLAB数字仿真分析 3.1matlab程序 3.2 仿真结果 4. SIMULINK仿真分析 4.1simulink模型 4.2仿真结果 1.电机模型 即: 其中:J 0.0067;B 0.10 2.数字PID控制 首先我们来看一下连续PID࿱…...
一文学会进程控制
目录进程的诞生fork函数fork的本质fork的常规用法fork调用失败的原因进程的死亡进程退出的场景常见的进程退出方法正常终止(代码跑完)echo $?main函数返回调用exit调用_exitexit和_exit的区别进程等待进程等待的重要性进程等待的函数waitwaitpid进程退出…...
5.2 BGP水平分割
5.2.2实验2:BGP水平分割 1. 实验目的 熟悉BGP水平分割的应用场景掌握BGP水平分割的配置方法 2. 实验拓扑 实验拓扑如图5-2所示: 图5-2:BGP水平分割 3. 实验步骤 (1)配置IP地址 R1的配置 <Huawei>…...
华为OD机试 - TLV 编码 | 备考思路,刷题要点,答疑 【新解法】
最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...
【C语言每日一题】——猜名次
【C语言每日一题】——猜名次😎前言🙌猜名次🙌解题思路分享:😍解题源码分享:😍总结撒花💞😎博客昵称:博客小梦 😊最喜欢的座右铭:全神…...
Agilent E4982A、Keysight E4982A、LCR 表,1 MHz 至 3 GHz
Agilent E4982A、Keysight E4982A、HP E4982A LCR 表,1 MHz 至 3 GHz 产品概览 KEYSIGHT E4982A(安捷伦) Keysight E4982A LCR 表为需要高频(1 MHz 至 3 GHz)阻抗测试的无源元件制造行业提供一流的性能,…...
SAP 系统的配置传输
在SAP项目的实施过程中,经常会遇到关于配置传输的问题。即我们在某个client下面做系统配置,配好了之后再传到其他系统之中。 配置传输分为两种情况:同服务器配置传输,异服务器配置传输。同服务器配置传输: 在DEV配置cl…...
华为OD机试 - 喊七(Python)
喊七 题目 喊 7,是一个传统的聚会游戏, N 个人围成一圈,按顺时针从1 - 7编号, 编号为1的人从1开始喊数, 下一个人喊得数字是上一个人喊得数字+1, 但是当将要喊出数字7的倍数或者含有7的话, 不能喊出,而是要喊过。 假定N个人都没有失误。 当喊道数字k时, 可以统计每…...
Docker下快速搭建RabbitMQ单例及集群
引子生命在于折腾,为上数据实时化用到了消息传送的内容,当时也和总公司人员商量选型,kafka不能区分分公司就暂定用了RbtMQ刚好个人也在研究容器及分布式部署相关内容就在docker上实践单机 docker(要想快 先看问题 避免踩坑&#x…...
python代码写开心消消乐
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 一.python是什么 二.游戏代码效果呈现 三.主代...
【郭东白架构课 模块一:生存法则】09|法则四:为什么要顺应技术的生命周期?
你好,我是郭东白。今天我们来讲架构师的第四条生存法则,那就是尊重技术的生命周期。 人类的各种活动都要遵循事物的客观生命周期。不论是农业社会种田打渔,还是资本社会投资创业,行动太早或太晚,都会颗粒无收。技术也…...
Linux之进程控制
一.进程创建 1.1 fork函数 我们创建进程的方式有./xxx和fork()两种 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。 #include <unistd.h> pid_t fork(void); 返回值:自进程…...
SpringBoot社区版专业版带你配置热部署
💟💟前言 友友们大家好,我是你们的小王同学😗😗 今天给大家打来的是 SpringBoot社区版专业版带你配置热部署 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞👍 收藏⭐ 评论…...
影响AFE采样精度的因素有哪些?
**AFE(Analog Front End)**是模拟前端电路的缩写,它是模拟信号传感器和数字信号处理器之间的连接点。AFE采样精度是指模拟信号被数字化后的准确度,对于很多电子设备来说,这是一个至关重要的性能指标。本文将介绍影响AF…...
mysqlbackup备份报error:redo log was overwritten
问题原因 备份时redo log被覆盖 解决方案 方法1:增加innodb_log_file_size、innodb_log_files_in_group大小,需要重启数据库 vi my.cnf innodb_log_file_size 2G innodb_log_files_in_group 4 方法2: 动态配置redo log archive,不需要重启…...
Android支持库
# 支持库 注意:Android 9.0(API 级别 28)发布后,新版支持库 AndroidX 也随之诞生,它属于 Jetpack。除了现有的支持库,AndroidX 库还包含最新的 Jetpack 组件。 您可以继续使用此支持库以往的工件(这里指的是版本 27 及更早版本,且已打包为 android.support.*)在 Googl…...
Vue:filters过滤器
日期、时间格式化是Vue前端项目中较为常遇到的一个需求点,此处,围绕Vue的过滤器来介绍如何更为优雅的解决此类需求。 过滤器filters使用注意点 Vue允许开发者自定义过滤器,可以实现一些常见的文本格式化等需求。 使用时要注意的点在于&#…...
Windows环境下安装和配置Gradle
1. 概述 Gradle是Google公司基于JVM开发的一款项目构建工具,支持Maven,JCenter多种第三方仓库,支持传递性依赖管理,使用更加简洁和支持多种语言的build脚步文件,更多详情可以参阅Gradle官网 2. 下载 由于Gradle与S…...
数据结构时间空间复杂度笔记
🕺作者: 迷茫的启明星 本篇内容:数据结构时间空间复杂度笔记 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇家人们,码字不易,你的👍点赞🙌收藏❤…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
