• 阿里三面:MQ 消息丢失、重复、积压问题,如何解决?


    面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ),基本都会抛出一个问题:在使用 MQ 的时候,怎么确保消息 100% 不丢失?

    这个问题在实际工作中很常见,既能考察候选者对于 MQ 中间件技术的掌握程度,又能很好地区分候选人的能力水平。接下来,我们就从这个问题出发,探讨你应该掌握的基础知识和答题思路,以及延伸的面试考点。

    案例背景

    以京东系统为例,用户在购买商品时,通常会选择用京豆抵扣一部分的金额,在这个过程中,交易服务和京豆服务通过 MQ 消息队列进行通信。在下单时,交易服务发送“扣减账户 X 100 个京豆”的消息给 MQ 消息队列,而京豆服务则在消费端消费这条命令,实现真正的扣减操作。

    那在这个过程中你会遇到什么问题呢?

    案例分析

    要知道,在互联网面试中,引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。

    • 系统解耦:用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如京豆服务的系统需求无论如何变化,交易服务不用做任何改变,即使当京豆服务出现故障,主交易流程也可以将京豆服务降级,实现交易服务和京豆服务的解耦,做到了系统的高可用。
    • 流量控制:遇到秒杀等流量突增的场景,通过 MQ 还可以实现流量的“削峰填谷”的作用,可以根据下游的处理能力自动调节流量。

    不过引入 MQ 虽然实现了系统解耦合流量控制,也会带来其他问题。

    引入 MQ 消息中间件实现系统解耦,会影响系统之间数据传输的一致性。 在分布式系统中,如果两个节点之间存在数据同步,就会带来数据一致性的问题。同理,在这一讲你要解决的就是:消息生产端和消息消费端的消息数据一致性问题(也就是如何确保消息不丢失)。

    而引入 MQ 消息中间件解决流量控制 , 会使消费端处理能力不足从而导致消息积压,这也是你要解决的问题

  • 相关阅读:
    【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通
    递归二进制【典中典】
    你们关心的问题:产品经理面试中的职业规划及项目经历要怎么说?
    基于Springboot实现漫画网站平台
    SpringBoot+ShardingSphere彻底解决生产环境数据库字段加解密问题
    [英雄星球六月集训LeetCode解题日报] 第15日 树状数组
    《活着》思维导图
    基于DIPUM工具箱对图书数字图像进行处理(Matlab代码实现)
    Npm 工具完全删除 - 安装 npm多版本管理工具 nvm
    数值变化跳动效果
  • 原文地址:https://blog.csdn.net/weixin_57907028/article/details/126402858