如何处理消息积压

319 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

前言

在实际的应用场景中,只要使用了消息队列,产生消息积压的情况还是很常见的,一般这种情况处理起来也不是那么简单。

原因

首先分析出现消息积压的原因,正常的系统运转,构成消费的流程有生产者、消息队列、消费者,如果出现了消息积压,那一定是这主要的三个参与者发生了性能问题、有系统故障、宕机或者有突然流量之类的情况,才会出现消息积压,

其实看了原因后,大概就知道了处理优化的思路,那么如何来优化代码以提高性能避免消息积压呢?如何紧急处理线上出现的消息积压问题呢,避免对业务造成严重影响?

处理思路

既然有三个参与者,那么就需要从三个方面去着手优化:

  1. 生产者:正常系统稳定运行过程中,系统的流量是稳定的,消费者也一定能匹配生产的数据量,那么在数据突发骤增的情况下,生产者的消息生产量也成倍增长,而消费者数量是固定的,此时就可以对生产者的流量专门进行优化
  2. 消息队列:一般成熟的系统,为了保障系统的高可用性,一般都会集群部署消息队列,而且消息队列本身的吞吐量是很大的,处理能力也很强,每秒性能可以达到万条数据至百万条数据,这也是取决于使用哪种消息队列,所以消息队列出现性能问题的几率很小,但是如果出现了的话,则需要横向扩展消息队列的实例即可解决。
  3. 消费者:出现消息积压,消费者出现问题的几率就相对大很多了,很多情况下是消费者性能不足,无法消费生产者生产的庞大数据量。这里的性能不足有很多种情况:实例数不足、消费者发生实例宕机或者服务器宕机、消费者出现死锁、消费者出现内存泄漏等。可能出现的情况很多,解决起来也比较棘手,之所以说消息积压的问题处理起来不简单,主要的难度也就在这个地方。针对如此多的故障情况,则需要一一排查,一一解决。