面试系列MQ:消息堆积如何处理

普通情况: 

1、后台定时任务每隔72小时,删除旧的没有使用过的消息信息
2、根据不同的业务实现不同的丢弃任务,选择不同的策略淘汰任务,例如FIFO/LRU等
3、消息定时转移,或者对某些重要的 TAG 型(支付型)消息真正落库

 突发大量消息在 mq 里积压了几个小时了还没解决

一般这个时候,只能临时紧急扩容了,具体操作步骤和思路如下:

1、先修复 consumer 的问题,确保其恢复消费速度,然后将现有 consumer 都停掉。
2、新建一个 topic,partition 是原来的 10 倍,临时建立好原先 10 倍的 queue 数量。
3、然后写一个临时的分发数据的 consumer 程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的 10 倍数量的 queue。
4、接着临时征用 10 倍的机器来部署 consumer,每一批 consumer 消费一个临时 queue 的数据。这种做法相当于是临时将 queue 资源和 consumer 资源扩大 10 倍,以正常的 10 倍速度来消费数据。
5、等快速消费完积压数据之后,得恢复原先部署的架构,重新用原先的 consumer 机器来消费消息。

你可能感兴趣的:(技术面试,分布式)