RocketMQ常见面试题及答案梳理

本文深入剖析RocketMQ,涉及异步通信、架构设计、消息处理挑战,如消息堆积和一致性问题,以及负载均衡策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、RocketMQ有什么作用?

  1. 异步:数据的产生方不需要关心谁来使用数据,只需要将数据发送到broker,后续需要管消费流程,Rocket也有保证消息可靠性的方案
  2. 消峰:正常业务系统当流量激增时,有可能会将系统压垮,有了消息队列可以将大量请求缓存起来,慢慢进行消费处理
  3. 解耦:系统的耦合性越高,容错性就越低,以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用。这时可以用MQ进行解耦,生产者向broker投递消息,即使子系统出现故障也会先保存在broker中,当故障恢复时,消费者会通过消费队列获取消息

2.RoctetMQ的架构

  • NameServer:类似于注册中心,管理组件的注册实例信息,不参与消息的传输
  • produce:生产者,消息的发送方
  • Consumer:消费者,消息消费方
  • broker:暂存和传输消息(包含:commitLog、ConsumeQueue、IndexFile)
  • Topic:区分消息的种类,一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息
  • commitLog:CommitLog是存储消息的主体;borker接收到生产者投递来的消息,会存储到commitLog文件中
  • ConsumeQueue:逻辑消费队列;可以看成基于topic的commitLog的索引文件因为CommitLog是按照顺序写入的,不同的topic消息都会混淆在一起,而Consumer又是按照topic来消费消息的,这样的话势必会去遍历commitLog文件来过滤topic,这样性能肯定会非常差,所以rocketMq采用ConsumeQueue来提高消费性能。即每个Topic下的每个queueId对应一个Consumequeue
  • IndexFile:IndexFile提供了一种可以通过key(topic+msgId)或时间区间来查询消息的方法

3、 RoctetMQ的优缺点

3.1消息堆积的问题:

        如果生产者大量发送消息,消费者消费能力不够,会造成broker消息堆积,需要根据实际场景制定解决方案。

3.2系统复杂度提高

MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?

3.3一致性问题

A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。如何保证消息数据处理的一致性?

4.RoctetMQ顺序消息,如何保证顺序<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值