面试题:
-
如何解决消息队列的延时以及过期失效问题?
-
消息队列满了以后该怎么处理?
-
有几百万消息持续积压几小时,怎么解决?
情况:可能消费端出了问题,不消费了,或者消费地极其缓慢。可能你的消息队列集群的磁盘都快写满了,都没人消费,这个时候怎么办?积压的时间太长了,导致 rabbitmq 设置了消息过期时间后消息就没了怎么办?
快速处理积压的消息
临时紧急扩容:具体操作步骤和思路如下:
- 先修复 consumer 的问题,确保其恢复消费速度,然后将现有 consumer 都停掉
- 新建一个 topic ,partition 是原来的 10 倍,临时建立好原先10倍或者20倍的 queue 数量
- 然后写一个临时的分发数据的 consumer 程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的10被数量的 queue
- 接着临时征用10倍的机器来部署 consumer,每一批 consumer 消费一个临时 queue 的数据
这种做法相当于是临时将queue资源和 consumer 资源扩大10倍,以正常的10倍速度来消费数据
等快速消费完积压数据后,需要恢复原先部署架构,重新用原来的 consumer 机器来消费消息