首页 > 其他分享 >简单说说 RocketMQ的消费原理

简单说说 RocketMQ的消费原理

时间:2024-10-15 12:18:57浏览次数:8  
标签:消费 消费者 队列 拉取 任务 消息 简单 原理 RocketMQ

消费方式

并发消费:一个消费者队列中的消息可以同时被消费者的多个线程并发消费

顺序消费:一个消费队列中的消息同一时间只能被一个消费者的一个线程消费

消费流程

消费流程主要分为以下几个步骤:队列分配、拉取消息、消息处理

队列分配

队列分配目的:指定消费者负责的队列集合,默认使用的是平均分配算法

由RebalanceService 组件定时触发,周期为20s一次。

分配流程如下

1 获取指定topic下的消息队列集合

2 如果是广播模式,则不需要进行负载均衡,每个消费者均负责所有消息队列

3 集群模式则根据负载均衡策略分配给消费者

4 消息队列分配完毕后,则需要给每个消息队列创建【任务队列】 ProcessQueue。

5 为每个【任务队列】创建【消息拉取任务】 PullRequest(一个topic创建一个消息拉取任务)

拉取消息

消息的拉取依赖PullMessageService,这是一个后台运行的服务,只要任务队列中存在任务就会拉取

如果拉取消息成功,则将消息加入到待处理任务队列中(ProcessQueue),并且提交一个消费请求给ConsumeMessageService,并且提交下一次拉取任务。

如果没有拉取成功,则根据服务端返回的offset进行矫正,并且提交下一次拉取任务。

注意:在默认情况下,一次拉取数据的条数最大为32

注意:拉取下来的消息,会存入一个有序的TreeMap中,key就是offsetId

消息处理

ConsumeMessageService有两个实现类

并发处理:ConsumeMessageConcurrentlyService

顺序处理:ConsumeMessageOrderlyService

并发消费

在拉取到消息之后,并且提交给ConsumeMessageConcurrentlyService ,会依次为每一条消息创建一个ConsumeRequest,然后交给一个线程池进行处理。

如果消费成功:则把此次消费的消息从任务队列中【移除】,并且【更新消费位点】。

如果消费失败:会把消息重发至broker,等待后续的重新消费。

如果重发broker失败:则会将消息重新提交到任务队列等待消费者处理。

注意:在获取需要更新的消费位点的时候,会获取TreeMap的第一条数据,换言之,就是如果offsetId大的消息先被消费,是无法被及时上报的,如果这个时候产生宕机,会存在重复消费的风险

顺序消费

RocketMQ可以通过将消息发送至同一个队列中,利用队列天然的有序性实现顺序消费。

但是,通过这种方式只能实现发送到同一个队列,在某些情况下还是会打破这个有序性。

例子

1 消费者A正在消费消息,消费者B发生了负载均衡,也分配到了A,这种情况下相当于有两个消费者同时进行消费。

2 当队列A有一个消费者,但是队列A内部可以进行并发消费。

在RocketMQz中还会通过锁机制来实现顺序消费。

同一时间,一个队列只能分配给一个消费者,通过给broker队列上锁进行实现

同一时间,一个队列只能有一个消费线程进行消费,需要给本地队列上锁

在顺序消费中如果消费失败,会直接将消息放回任务队列中等待重新消费

标签:消费,消费者,队列,拉取,任务,消息,简单,原理,RocketMQ
From: https://blog.csdn.net/sjdxx/article/details/142943938

相关文章

  • 【前端】如何制作一个简单的网页(3)
    接下来我们为html元素添加网页内容。网页内容按照功能的不同可以区分为网页头与网页体两个部分。先来说说什么是网页头。网页头网页头(又称为网页头部信息)向浏览器提供文档的一些信息。这些信息包括网页的名称、编码方式、样式、JS代码等。<head>文档的所有信息均包......
  • FMC设计原理图:FMC154-基于FMC 八路SFP+万兆光纤子卡
    FMC154-基于FMC八路SFP+万兆光纤子卡    一、板卡概述   本卡是一个FPGA夹层卡(FMC)模块,可提供高达8个SFP / SFP +模块接口,直接插入千兆位级收发器(MGT)的赛灵思FPGA。支持业界标准的小型可插拔(SFP / SFP +)收发器模块接口。   板卡支持8路光纤......
  • VU9P处理板设计原理图:412-基于单XCVU9P+双DSP C6678的双FMC接口 100G光纤传输加速计算
    基于单XCVU9P+双DSPC6678的双FMC接口100G光纤传输加速计算卡一、板卡概述板卡包括一片Xilinx FPGA  XCVU9P,两片 TI 多核DSP TMS320C6678及其控制管理芯片CFPGA.设计芯片满足工业级要求。FPGA VU9P 需要外接4路QSFP+(100Gbps)及其两个FMC HPC接口。DS......
  • 【Unity】mesh绘制简单图形
    应用使用mesh绘制一个彩虹色三角形、四边形、多四边形瓦片控制mesh移动,实现游戏的对象的身体关节的动作步骤mesh(网格类)Meshmesh=newMesh();vertices:顶点数组,包括mesh中的所有顶点,如三角形三个顶点//三角形三个顶点Vector3[]vertices=newVector3[3];vertices[0......
  • proxy代理机制和工作原理,reactive是怎么通过proxy实现响应式的
    1.什么是ProxyProxy是JavaScript中一个用于创建代理对象的构造函数,允许你定义基本操作(如属性查找、赋值、枚举、函数调用等)的自定义行为。通过Proxy,你可以对一个对象进行拦截,并在该对象的操作上添加自定义逻辑。在Vue3中,Proxy被广泛用于实现响应式系统。2.代理......
  • Ros环境创建相关!超级简单!!超级详细!!
    1、创建工作空间workspace其中catkin_ws后面的ws是work_space的简写,指代工作空间<catkin_ws是你的工作空间的名字,随便取>mkdir-p~/catkin_ws/srccd~/catkin_ws/src/catkin_init_workspace以下为执行结果:2、编译生成build、devel代码等cd~/catkin_wscatkin_make3......
  • [C++] 红黑树的实现:原理与底层解析
    文章目录@[toc]红黑树的概念红黑树的规则红黑树如何确保最长路径不超过最短路径的2倍红黑树规则最短路径与最长路径的分析最短路径:全黑路径最长路径:红黑交替路径结论:红黑树的平衡性如何保障操作效率红黑树的实现红黑树的节点结构红黑树的插入操作插入基本步骤插入......
  • HTML—盒子模型基础(概念和属性)简单易懂
    1、盒子模型的概念    W3C建议把网页上所有元素都放在一个个盒模型(boxmodel)中,通过CSS来控制这些盒子的显示属性,以及对这些盒子进行定位,完成整个页面的布局        在CSS视角下,所有HTML元素可以看作盒子、所谓的盒子在HTML中就是一个盛装元素内容的容器。 ......
  • 动态规划(4)——简单多状态Ⅱ
    题一.买卖股票的最佳时机含冷静期题目描述给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格。​设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票(即冷冻期为1......
  • 天气预报大模型有哪些?原理都是怎么实现的?
    天气预报一直以来是科学和技术进步的重要领域,从传统的物理方程计算到如今依赖大数据和人工智能的预测模型,天气预报技术不断革新。随着计算机和人工智能的飞速发展,天气预报的准确性有了显著提高,而“天气预报大模型”的引入更是大大提升了短期、中长期以及极端天气事件预测的能力......