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…...
数据结构时间空间复杂度笔记
🕺作者: 迷茫的启明星 本篇内容:数据结构时间空间复杂度笔记 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇家人们,码字不易,你的👍点赞🙌收藏❤…...
基于注意力的知识蒸馏Attention Transfer原理与代码解析
paper:Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfercode:https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/AT.py背景一个流行的假设是存…...
利尔达在北交所上市:总市值突破29亿元,叶文光为董事长
2月17日,利尔达科技集团股份有限公司(下称“利尔达”,BJ:832149)在北京证券交易所上市。本次上市,利尔达的发行价格为5.00元/股,发行数量为1980万股,发行市盈率为12.29倍,募资总额为…...
C#操作字符串方法 [万余字总结 · 详细]
C#操作字符串方法总结C#常用字符串函数大全C#常用字符串操作方法C#操作字符串方法总结C#常用字符串函数大全 Compare 比较字符串的内容,考虑文化背景(场所),确定某些字符是否相等 CompareOrdinal 与Compare一样,但不考虑文化背景 Format 格…...
极兔一面:10亿级ES海量搜索狂飙10倍,该怎么办?
背景说明: ES高性能全文索引,如果不会用,或者没有用过,在面试中,会非常吃亏。 所以ES的实操和底层原理,大家要好好准备。 另外,ES调优是一个非常、非常核心的面试知识点,大家要非…...
【Mysql基础 —— SQL语句(一)】
文章目录概述使用启动/停止mysql服务连接mysql客户端数据模型SQLSQL语句分类DDL数据库操作表操作查询创建数据类型修改删除DML添加数据修改数据删除数据DQL基础查询条件查询聚合函数分组查询排序查询分页查询执行顺序DCL管理用户权限控制概述 数据库(Database&#…...
华为OD机试 - 新员工座位安排系统(Python) | 机试题算法思路
最近更新的博客 华为OD机试 - 招聘(Python) | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 五键键盘 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 热点网络统计 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 路灯照明 | 备考思路,刷题要点,答疑 【新解…...
MySQL - 介绍
前言 本篇介绍认识MySQL,重装mysql操作 如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 1.什么是数据库? 数据库: 一种通过SQL语言操作管理数据的软件; 重装数据库的卸载数据库步骤 : ① 停止MySQL服…...
ChatGPT国内镜像站初体验:聊天、Python代码生成等
ChatGPT国内镜像站初体验,聊天、Python代码生成。 (本文获得CSDN质量评分【92】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单………...
SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)
目录 第一步:记录批导步骤编辑数据源对应字段 第二步:维护数据源 第三步:维护数据源对应字段(重要) 第四步:维护数据源关系。 第五步:维护数据源与导入字段的对应关系。 第六步࿰…...
第9天-商品服务(电商核心概念,属性分组开发及分类和品牌的级联更新)
1.电商核心概念 1.1.SPU与SKU SPU:Standard Product Unit(标准化产品单元) 是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个 产品的特性。 决定商品属性的值 SKU:Stock…...
免费的x网站域名/最近有新病毒出现吗
MySQL数据库、Qt数据库、MySQLworkbench1、Qt中的数据库编程:1、在Qt中,所有和数据库编程相关的类都归在命名空间QSql中,这些类主要包含:QSqlDriver(数据库驱动)、QSqlDatabase(数据库)、QSqlQuery(数据库在线操作)2、QSqlDriver(…...
做网站推广的方法有哪些/java培训班
案例介绍: 我们在日常生活中,经常与朋友们玩猜数字的游戏,非常的有趣。现在我们通过java把这个猜数字游戏编写出来。 猜数字案例是要完成什么样的功能呢?顾名思义,这个游戏就是你出个数字、我来猜。 游戏操作如下&…...
宝塔wordpress更换域名/上海比较好的seo公司
来源|雷锋网作者|李帅飞市场终是无情,时间更是无情。三星不想缺席中国智能手机市场——哪怕手机业务在中国市场的存在感接近于无,但这是世界第一大智能手机市场,三星并不言弃。毕竟,就算三星手机卖不出去&a…...
如何做内部优惠券网站/网页制作源代码
hadoop distcp -i hdfs://192.168.10.211:9000/fileinfo hdfs://192.168.24.46:9000/fileinfo distcp [OPTIONS] <srcurl>* <desturl> -i Ignore failures 转载于:https://www.cnblogs.com/yanghuahui/p/3490713.html...
wordpress安全漏洞/什么是seo推广
“应用软件创造客户价值”是我们的经营理念。我们强调客户的价值,因为软件企业生存的基础是客户的价值,如果不能为客户带来价值的软件,软件也就没有价值。所以我们把这样的理念作为公司经营的发展方向,我们始终把公司的价值体系建…...
厦门网站建设求职简历/温州seo结算
背景 近几年,前端应用(WebApp)正朝着大规模方向发展,在这个过程中我们会对项目拆解成多个模块/组件来组合使用,以此提高我们代码的复用性,最终提高研发效率。 在编写一个复杂组件的时候,总会依…...