张三求职日记--面试题篇--消息中间件

29 阅读2分钟

张三求职日记--面试题篇--消息中间件封面图.jpg

常见的消息中间件有哪些

  1. RabbitMQ:基于Erlang编写,可靠性好,吞吐量不高,如果出现问题因为编写语言的原因可能不太好进行分析定位。
  2. ActiveMQ:MQ的功能基本都具备,综合性能有些落后,当前行业内选择较少。
  3. Kafka:吞吐量高,性能好,但功能没有其他MQ全面,非常适合大数据场景。
  4. RocketMQ:阿里开源的产品,相对Kafka功能更为全面,更加易用。
  5. redis:较为简单的场景可使用redis的stream作为消息中间件。

消息中间件的作用

  1. 解耦:消息中间件能生产者和消费者互不感知状态,一定程度上能提升系统的可靠性,在消费者遇到瓶颈时,能更方便地进行扩容。
  2. 异步处理:非核心业务能通过消息中间件进行异步处理,保证主流程的运行效率。
  3. 削峰填谷:消息中间件作为处理任务的缓冲区,能挡住突发流量的冲击。
  4. 跨系统传递消息:部分不好直接调用的系统可通过消息中间件完成消息传递。

消息中间件的应用场景

  • 订单完成后通过消息异步发送给积分、优惠券等非核心流程。
  • 日志收集,常见的如ELK使用kafka
  • 订单的流量削峰
  • 定时、延迟任务,如超时取消订单

如何保证消息的幂等性

通常此问题来自于消息的重复消费,为了解决重复消费的问题,消费者的消息可生成全局唯一业务ID,消费者进行消费的时候先检查此ID是否已经处理。
入库时检查业务主键是否已被使用。
加分布式锁。

如何解决消息积压

消息积压通常是消费者消费不过来,大体思路是增加消费者的消费能力。
可行的操作有:

  1. 增加消费者数量,即进行扩容。
  2. 可对消费者中的部分功能进行熔断降级,以满足当前的消息消费。
  3. 优化消费者中的耗时点(后续处理)。