面试官:RocketMq消费者是如何获取消息的?

RocketMQ第四章:手把手教老婆实现-顺序消息生产者和顺序消息消费者(1) 在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程) 阅读详情

1:什么是消费者组

消费者组:假设我们现在有一个Topic叫做order_topic,现在营销系统,库存系统系统都要去order_topic去消费消息,那么我们应该为营销系统和库存系统分别建立一个消费者组,比如:营销系统的消费者组名称是 {marking_groups},库存系统的消费者是: {stock_groups}。

比如现在库存系统部署了二台机器,那么这二台机器就组成了一个消费者组。营销系统有二台机器,那么这二台机器也组成一个一个消费者组

这二个消费者组都订阅了order_topic这个topic,那么现在生产者发送了一条消息到Master Broker之后,如下图

现在二个消费者组都会去这个Broker去拉取消息,那么现在库存系统和营销系统都有二台机器,那么对于库存系统来说,是只有一台机器能够获取到这条消息还是说每台机器都会获取到这条消息呢??

这个时候就要介绍一个集群模式和广播模式了

2:集群模式和广播模式

集群模式:也就是说一条消息只会被一个消费者组中的一台机器消费,比如库存系统有二台机器组成的消费者组,那么一条消息只会被其中的一台机器消费

广播模式:每一条消息都会被消费组中的每台机器给消费一次,也就是说库存系统的二台机器都会消费同一条消息

3:重温MessageQueue,ConsumeQueue,CommitLog

之前我们讲过设置一个Topic那么就要设置MessageQueue,这条消息发送到Broker之后也会被写入到CommitLog中,而且每个MessageQueue底层也会对应着一个的ConsumerQueue。

但是对于Broker而言,同一台机器的消息都是存储在CommotLog文件中的。

4:MessageQueue与消费者的关系

对于同一个Topic对应着多个MessageQueue,那么多个MessageQueue是如何让多台机器进行消费的呢??

我们可以简单的理解为,RocketMq会将多个MessageQueue均匀的分配给每台机器来进行消费

举个例子:现在有一个Topic,对应着4个MessageQueue,然后现在有2个Master Broker,那么每个Master Broker上有二个MessageQueue,现在有个库存系统订阅了这个Topic,库存系统有二台机器组成了一个消费者组,那么现在最好的情况就是让库存的2台机器每台负责2个MessageQueue,

所以我们可以大致认为,一个Topic中的多个MessageQueue会均匀分配给消费者组的每台机器去消费,前提是一个MessageQueue只能被一台机器消费,但是一台机器可以消费多个MessageQueue的消息

5:Broker是如何将消息发送给消费者的

我们可以回忆一下,生产者将消息发送给Broker之后,Broker就会将这条消息写入到CommitLog中,每个MessageQueue都有一个对应的ConsumeQueue的磁盘文件,而这个文件就是MessageQueue中的消息在CommitLog中的偏移量。

消费者模式一般都是基于集群模式的,也就是说一条消息只会被消费一次,所以如果此时消费者1要消费MessageQueue1中的消息,那么就会从ConsumeQueue1的文件中找到这条消息在CommitLog中的偏移量,然后将这条消息发送给消费者

6:消费者组中某个消费者挂了或者扩容机器怎么办

假如现在我们有一个Broker0和Broker1,Broker0对应着MessageQueue0,MessageQueue1,Broker1对应着MessageQueue2,MessageQueue3,现在有一个消费者组Consume0,Consume1,

然后现在Consume0消费MessageQueue0,MessageQueue1中的消息,Consume1消费MessageQueue2,MessageQueue3中的消息,如果此时Consume1挂掉了,那么MessageQueue2,MessageQueue3中的消息就会都让Consume0来消费了,同理,如果此时我们给消费组增加一台机器,那么此时就会进入一个rabalance环节,这时候会将其中的一个MessageQueue交给Consume3来消费

RocketMQ - 深入研究一下消费者是如何获取消息处理以及进行ACK 另外Push模式下有一个请求挂起和长轮询的机制,当你的请求发送到Broker,结果Broker发现没有新的消息给你处理的时候,就会让请求线程挂起,默认是挂起15秒,然后这个期间他会有后台线程每隔一会儿就去检查一下是否有新的消息给你,另外如果在这个挂起过程中,如果有新的消息到达了,会主动唤醒挂起的线程,然后把消息返回给你。接着介绍一个概念,就是对于一个消费组而言,他获取到一条消息之后,如果消费组内部有多台机器,到底是只有一台机器可以获取到这个消息,还是每台机器都可以获取到这消息? 阅读详情

相关推荐

离线安装 nvidia-docker2(nvidia-container-toolkit)

很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式。

father_yingying的博客 1181

RocketMQ工作原理_消息的消费

然而默认消费下,offset是异步提交的,这个异步行导致提交到Broker的offset与Consumer实际消费的消息的不一致。例如:异步消费过程中,在第500条突然插进来Consumer2,但是Consumer1已经把500后面的queue的100条进行消费,但是Consumer2插入的时机是500条,这时候出现Rebalance,会出现消息的重复消费。,即Consumer向其关联的Queue注册了监听器,一旦发现有新的消息到来就会触发回调的执行,回调方法是Consumer取Queue拉取消息。

qq_45905724的博客 1849

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 330

简述RocketMQ消息拉取过程

相信每一个使用RocketMQ的开发工程师都想了解一下消息是如何被拉到消费端的,消费者在消息拉取过程中都做了什么操作?这些疑问将在接下来的这篇文章中给大家一一解开;

Java技术攻略的博客 1945

COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误

本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。

weixin_29597551的博客 325

保研考研机试攻略(满分篇):第二章——满分之路上(1)

保研考研机试攻略(满分篇):第二章——满分之路上(1)2.1计算机和基础+2.2进阶背包问题+2.3毛毛虫算法

qq_63349644的博客 1195

RocketMQ源码学习 (五) 消费者-消费者拉消息原理学习

从博客园迁移过来,原地址:https://www.cnblogs.com/jumphua/articles/16816942.html

Misteltoe的博客 531

一文读懂 SAP BTP Application Router 的 Resource Files:从 xs-app.json 到本地开发的默认设置

本文详解SAP BTP中Application Router的资源文件配置与本地开发实践。核心包括:xs-app.json定义路由规则与安全策略,package.json声明依赖与启动脚本,resources/存放静态资源,default-services.json和local-destinations.json用于本地模拟云服务。文章通过真实案例展示如何配置静态资源直出、反向代理后端服务,并强调本地开发时的注意事项与常见问题解决路径。关键配置均提供示例代码,帮助开发者快速实现业务应用的部署与联调。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 180

RocketMQ之消费者,消息拉取流程详解附源码解析

上一篇重平衡篇有提到,重平衡将为消费者负载的队列创建拉取请求并放入队列,后续不会新建而是重复使用这个拉取请求,取出执行一次,拉取完成之后更新拉取偏移量,再将它重新放入队列。消息拉取流控检查,检查处理队列中还未被消费的消息,从待消费消息数量、大小和待消费消息偏移量差来判断。根据队列找到对应的消费队列,读取消费队列判断是否有消息可以消费,如果有则根据消费队列中的索引项,用物理偏移量从消息存储中查找消息。消费者的处理线程池处理拉取完成的回调,将消息从拉取到的响应中解码出来,放入消费队列,让消费服务消费。

通往IT大道的专栏 1744

论文阅读:2024 ACM CCS “Do Anything Now”: Characterizing and Evaluating In-The-Wild Jailbreak Prompts on

大语言模型(LLMs)的滥用问题引起了公众和大语言模型供应商的高度关注。有一种特殊的对抗性提示,叫做越狱提示,它已成为绕过防护措施、让大语言模型生成有害内容的主要攻击手段。在这篇论文中,作者使用新框架JailbreakHub,对2022年12月至2023年12月期间的1405个越狱提示进行了全面分析。作者识别出131个越狱提示社区,发现了越狱提示的独特特征以及主要攻击策略,比如提示注入和权限提升。

CSPhD-winston的博客 1414

【华为OD技术面-手撕算法代码真题】- 最长公共前缀

🌟 强烈推荐:华为OD技术面试手撕算法代码真题 🌟大家好!今天我给大家推荐一份备受赞誉的华为OD技术面试手撕算法代码真题。所有题目均为华为od实际面试过程中出现的算法代码真题。

算法大师! 4885

面试官实战:RocketMQ 消息积压了,增加消费者有用吗?

我:这个要看具体的场景,不同的场景下情况是不一样的。我:如果消费者的数量小于 MessageQueue 的数量,增加消费者可以加快消息消费速度,减少消息积压。比如一个 Topic 有 4 个 MessageQueue,2 个消费者进行消费,如果增加一个消费者,明细可以加快拉取消息的频率。如下图:如果消费者的数量大于等于 MessageQueue 的数量,增加消费者是没有用的。比如一个 Topic 有 4 个 MessageQueue,并且有 4 个消费者进行消费。如下图我:这…,一般情况下是可以的。我:当然

LoveSummer 3万+

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2389

面试官:RocketMQ同一个消费组内的消费者订阅了不同tag,会有问题吗?

面试官:同一个消费组内的消费者,如果订阅了相同的 topic,但是订阅的 tag 不一样,会有什么问题吗? 我:会出现丢消息的情况。 面试官:能详细说一说吗? 我:RocketMQ 要求同一个消费组内的消费者必须订阅关系一致,如果订阅关系不一致,会出现消息丢失的问题。 面试官:什么是订阅关系一致呢? 我:订阅关系一致是指同一个消费者组下所有消费者所订阅的 Topic、Tag 必须完全一致。如下图所示: 其中,消费组 1 中的消费组都订阅了 Topic1 中的 Tag1,消费组 2 中的消费组

zjj2006的专栏 9718

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

面试官:RocketMQ是什么,它有什么特性与使用场景?

面试官:RocketMQ你很精通吗?

真正的大师永远怀着一颗学徒的心 7262

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

阿里二面:RocketMQ 消息积压了,增加消费者有用吗?

比如一个 Topic 有 4 个 MessageQueue,2 个消费者进行消费,如果增加一个消费者,明细可以加快拉取消息的频率。如果消费者的数量大于等于 MessageQueue 的数量,增加消费者是没有用的。这种策略 broker 的命名必须按照格式:机房名@brokerName,因为消费者分配队列的时候,首先按照机房名称过滤出所有的 MessageQueue,然后。:外部系统虽然响应正常,但是增加多个消费者后,外部系统的接口调用量会突增,如果达到吞吐量上限,外部系统会响应变慢,甚至被打挂。

mifffy_java的博客 977

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面试官:RocketMQ 消息会丢失吗?如何解决消息丢失!!

既然在项目中使用了MQ,那么就不可避免的需要考虑消息丢失问题。在一些涉及到了金钱交易的场景下,消息丢失还是很致命的。那么在RocketMQ中存在哪几种消息丢失的场景呢? 先来一张最简单的消费流程图: 上图中大致包含了这么几种场景: 生产者产生消息发送给RocketMQ RocketMQ接收到了消息之后,必然需要存到磁盘中,否则断电或宕机之后会造成数据的丢失 消费者从RocketMQ中获取消息消费,消费成功之后,整个流程结束 这三种场景都可能会产生消息的丢失,如下图所示:

架构文摘 2633

对话面试官:RocketMQ 消息积压了,增加消费者有用吗?

如果消费者的数量小于 MessageQueue 的数量,增加消费者可以加快消息消费速度,减少消息积压。比如一个 Topic 有 4 个 MessageQueue,2 个消费者进行消费,如果增加一个消费者,明细可以加快拉取消息的频率。等外部系统恢复正常后再从本地取出来进行处理。:外部系统虽然响应正常,但是增加多个消费者后,外部系统的接口调用量会突增,如果达到吞吐量上限,外部系统会响应变慢,甚至被打挂。同时也要考虑本地数据库、缓存的压力,如果数据库响应变慢,处理消息的速度就会变慢,起不到缓解消息积压的作用。

m0_69632475的博客 494

面试官:RocketMQ 消息堆积了怎么处理?

在处理方案中,是否能考虑到诸如 “顺序性”、“一致性”、“数据安全性” 和 “时效性” 之间的权衡,以及方案可能带来的副作用。如果是可降级的非关键消息(如通知类、统计类),可以直接消费成功并记录日志,跳过真实业务处理。:如果 Queue 数量(例如 4 个)小于消费者实例数(例如 8 个),多余的消费者将处于空闲状态,无法分担负载。:不处理消费失败的消息,导致消息在队列中反复重试,严重占用资源。:临时增加消费者实例数,或提升单个消费者的消费能力(如调整为批量消费),以最快速度消化堆积。

犬小哈 592

RocketMQ 消息积压了,增加消费者有用吗?

这种策略在消费者启动的时候可以指定消费哪些 MessageQueue。//绑定消费 messageQueue1。

爱琴孩的博客 692

面试官:RocketMQ 怎么保证消息的顺序性?

RocketMQ(以及 Kafka)不提供全局严格有序,因为那意味着将所有消息放入一个队列,由一个消费者处理,会丧失分布式架构的并发和高吞吐优势。:顺序消费线程是串行的,如果某条消息处理耗时过长(如调用外部 API 或进行复杂计算),会阻塞该队列后续所有消息。相结合的方式,实现了高效、实用的分区顺序消息模型。因消息堆积或消费失败被阻塞,只会影响发送到该队列的那一批顺序消息(如特定订单),而不会影响其他队列的消息,这实现了。中并行消费,从而在保证 “用户维度的顺序性” 的同时,获得很高的总体吞吐量。

犬小哈 694

面试官视角:RocketMQ积压了1亿条消息怎么办?回答:加消费者,直接挂!

最近,一位小伙伴到一家心仪的公司面试,面试官问了一个非常经典的生产场景面试题:“突发流量导致生产环境RocketMQ Topic 积压了1亿条消息,下游服务消费速度跟不上,导致系统报警。你作为技术负责人,这时候该怎么救火?”

冰河的专栏 821

RocketMQ事务消息如何保证数据的最终一致性

在面过的几家大厂中,几乎每轮的面试官(「没写错,几乎是每轮面试官」)都问了同样一个问题:你们的系统是分布式的系统吗? 答:是。 面试官:那么你们分布式的系统是如何解决分布式事务这个问题的呢?也就是如何保证数据的一致性。 答:我们的系统中通过 RocketMQ 的事务消息来保证数据的最终一致性。 面试官:那你说说它是如何来保证数据的最终一致性的? 答:分两部分来回答,第一部分先回答事务消息的实现流程,第二部分解释为什么它能保证数据的最终一致性。 事务消息的实现流程 事务消息 首先服务

qq_42093488的博客 4798
上一篇: 从源码角度分析:为什么MyBatis的Mapper接口方法不能重载?
下一篇: 从零开始:深入了解 MySQL 的 Buffer Pool
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值