其他分享
首页 > 其他分享> > RabbitMQ消息中间件面试专题

RabbitMQ消息中间件面试专题

作者:互联网

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