消息队列MQ面试题及学习笔记

本文详述了消息队列在系统架构中的重要性,包括异步处理、解耦和消峰等优势,以及引入MQ可能带来的系统复杂性和一致性问题。对比了Kafka、ActiveMQ、RabbitMQ、RocketMQ、Pulsar等MQ中间件的特性和适用场景,并探讨了确保MQ高可用性的策略,如RabbitMQ的镜像集群和Kafka的副本机制。此外,面对消息积压、延迟和过期失效等问题,提出了临时扩容、数据补救和架构设计思路。

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

前段时间看了中华石杉老师讲解的消息队列,感受很深刻,之前也了解MQ,在工作中也会用到,但是没有进行过系统的整理和反思,当看到一些问题时,一时间真不知道怎么回答。所以在此处进行记录一下,自己也对消息队列有个深刻的认识。

面试题

  1. 为什么使用消息队列?
  2. 消息队列有什么优点和缺点?
  3. Kafka、ActiveMQ、RabbitMQ、RocketMQ、Pulsar不同MQ中间件有什么区别及适用场景?
  4. 如何保证消息队列的高可用?
  5. 有几百万消息持续积压几小时,你会如何处理?
  6. 如何解决消息队列的延时以及过期失效问题?
  7. 消息队列满了以后该怎么处理?
  8. 如果让你写一个消息队列,该如何进行架构设计?
  9. ······

1 为什么使用消息队列

其实是问消息队列都有哪些使用场景,然后你说一下你项目里具体是什么业务场景,有什么技术挑战,如果不用MQ就会很麻烦,,在这个场景里为什么用,解决了什么问题,有什么好处。
MQ,消息队列,消息可以理解为一个业务现场,而队列则是保存这个业务现场的容器,而B服务对消息的处理,则是一个对业务现场的异步处理。所以,消息队列的本质,就是将某个业务现场暂存下来,异步处理。异步,解耦,消峰,MQ的三大主要应用场景。

  • 异步。异步就是MQ的第一个能力。可以将一些非核心流程,如日志,短信,邮件等,通过MQ的方式异步去处理。这样做的好处是缩短主流程的响应时间,提升用户体验。

  • 解耦。假设现在,日志不光要插入到数据库里,还要在硬盘中增加文件类型的日志,同时,一些关键日志还要通过邮件的方式发送给指定的人。那么,如果按照原来的逻辑,A可能就需要在原来的代码上做扩展,除了B服务,还要加上日志文件的存储和日志邮件的发送。但是,如果你使用了MQ,那么,A服务是不需要做更改的,它还是将消息放到MQ中即可,其它的服务,无论是原来的B服务还是新增的日志文件存储服务或日志邮件发送服务,都直接从MQ中获取消息并处理即可。这就是解耦,它的好处是提高系统灵活性,扩展性。

  • 消峰。这个其实也很好理解,因为MQ的本质就是业务的排队。所以,面对突然到来的高并发,MQ也可以不用慌忙,先排好队,不要着急,一个一个来。消峰的好处就是避免高并发压垮系统的关键组件,如某个核心服务或数据库等。

2 使用消息队列有什么优缺点?

优点就是上面说的,在特殊场景下可以解决特定的问题,有其对应的好处:异步,解耦,削峰;
缺点:

  • 系统可用性降低:系统引
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值