ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RabbitMQ消息中间件面试专题

2022-07-18 16:04:06  阅读:234  来源: 互联网

标签:消费 回溯 RabbitMQ 面试 消息 消息中间件 Consumer RocketMQ 堆积


RocketMQ是什么?

RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等

2RocketMQ具有的优点:

(1) 消息低延迟:
在消息不不堆积情况下,消息到达Broker后,能⽴立刻到达Consumer。RocketMQ使⽤用⻓长轮询Pull⽅方式,可保证消息⾮非常
实时,消息实时性不不低于Push。
(2) 每个消息⾄至少投递⼀一次:
RocketMQ Consumer先pull消息到本地,消费完成后,才向服务器器返回ack,如果没有消费⼀一定不不会ack消息,所以
RocketMQ可以很好的⽀支持此特性。
(3) 每个消息只消费⼀一次:

  1、前提:
  i. 发送消息阶段,不不允许发送重复的消息。
  ii. 消费消息阶段,不不允许消费重复的消息。
  2、只有以上两个条件都满⾜足情况下,才能认为消息是“Exactly Only Once”,⽽而要实现以上两点,在分布式系统环境
下,不不可避免要产⽣生巨⼤大的开销。所以RocketMQ为了了追求⾼高性能,并不不保证此特性,要求在业务上进⾏行行去重,也就是说消费
消息要做到幂等性。RocketMQ虽然不不能严格保证不不重复,但是正常情况下很少会出现重复发送、消费情况,只有⽹网络异常,
Consumer启停等异常情况下会出现消息重复。

 (4)回溯消息:
a. 回溯消费是指Consumer已经消费成功的消息,由于业务上需求需要重新消费,要⽀支持此功能,Broker在向
Consumer投递成功消息后,消息仍然需要保留留。并且重新消费⼀一般是按照时间维度,例例如由于Consumer系统故障,
恢复后需要重新消费1⼩小时前的数据,那么Broker要提供⼀一种机制,可以按照时间维度来回退消费进度。
b. RocketMQ⽀支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。
(5). 消息堆积:
a. 消息中间件的主要功能是异步解耦,还有个重要功能是挡住前端的数据洪峰,保证后端系统的稳定性,这就要求消
息中间件具有⼀一定的消息堆积能⼒力力,消息堆积分以下两种情况:
i. 消息堆积在内存Buffer,⼀一旦超过内存Buffer,可以根据⼀一定的丢弃策略略来丢弃消息,如CORBA Notification规
范中描述。适合能容忍丢弃消息的业务,这种情况消息的堆积能⼒力力主要在于内存Buffer⼤大⼩小,⽽而且消息堆积后,
性能下降不不会太⼤大,因为内存中数据多少对于对外提供的访问能⼒力力影响有限。
ii. 消息堆积到持久化存储系统中,例例如DB,KV存储,⽂文件记录形式。 当消息不不能在内存Cache命中时,要不不可
避免的访问磁盘,会产⽣生⼤大量量读IO,读IO的吞吐量量直接决定了了消息堆积后的访问能⼒力力。
b. 评估消息堆积能⼒力力主要有以下四点:
i. 消息能堆积多少条,多少字节?即消息的堆积容量量。
ii. 消息堆积后,发消息的吞吐量量⼤大⼩小,是否会受堆积影响?
iii. 消息堆积后,正常消费的Consumer是否会受影响?
iv. 消息堆积后,访问堆积在磁盘的消息时,吞吐量量有多⼤大?
(6). 分布式事务:
1. 已知的⼏几个分布式事务规范,如XA,JTA等。其中XA规范被各⼤大数据库⼚厂商⼴广泛⽀支持,如Oracle,Mysql等。其中
XA的TM实现佼佼者如Oracle Tuxedo,在⾦金金融、电信等领域被⼴广泛应⽤用。
2. 分布式事务涉及到两阶段提交问题,在数据存储⽅方⾯面的⽅方⾯面必然需要KV存储的⽀支持,因为第⼆二阶段的提交回滚需
要修改消息状态,⼀一定涉及到根据Key去查找Message的动作。RocketMQ在第⼆二阶段绕过了了根据Key去查找Message
的问题,采⽤用第⼀一阶段发送Prepared消息时,拿到了了消息的Offset,第⼆二阶段通过Offset去访问消息,并修改状态,
Offset就是数据的地址。
3. RocketMQ这种实现事务⽅方式,没有通过KV存储做,⽽而是通过Offset⽅方式,存在⼀一个显著缺陷,即通过Offset更更改
数据,会令系统的脏⻚页过多,需要特别关注。
(7). 定时消息:
a. 定时消息是指消息发到Broker后,不不能⽴立刻被Consumer消费,要到特定的时间点或者等待特定的时间后才能被消
费。
b. 如果要⽀支持任意的时间精度,在Broker层⾯面,必须要做消息排序,如果再涉及到持久化,那么消息排序要不不可避免
的产⽣生巨⼤大性能开销。
c. RocketMQ⽀支持定时消息,但是不不⽀支持任意时间精度,⽀支持特定的level,例例如定时5s,10s,1m等

标签:消费,回溯,RabbitMQ,面试,消息,消息中间件,Consumer,RocketMQ,堆积
来源: https://www.cnblogs.com/yang66/p/16490741.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有