解决MQ消息积压

场景

很多系统会用到MQ做消息缓存,但是随之而来会带来一些问题,比如系统由于故障消费组的消费能力突然大幅度降低,导致几千万条的数据积压在MQ里几个小时,假设故障之前的消费者已经允许是消费组最大的数量了,即使消费者数量已经全部恢复,消费能力恢复到故障之前的状态,也需要经过一段时间才能消费完积压的消息,如果是在生产环境,这有可能就会带来灾难,那么我们如何解决这个问题呢?

问题分析

导致MQ消息积压的根本原因就是因为消费者的消费速度不够,如果我们能提高消费者的消费能力,问题就能够解决,那么问题就来了,我们的消费者数量已经是允许的最大数量了,这个时候如果单纯的增加消费者数量是毫无作用的,问题就转化为如何可以额外增加消费者呢?以Kafka为例如果我们能够增加partition数量那么消费组消费者的数量是不是就可以相应的增加了,基于这个思路,问题就变成了怎么增加partition的数量了。

解决方案

通过上面的分析,可以考虑临时扩容partition,增加消费者数量

  1. 临时新建一个topic,partition数量是之前的几倍
  2. 这时候需要临时只用于消息分发的消费者,把之前的topic积压的消息转发到新的topic
  3. 部署消费者,由于partition的数量是之前的几倍,那么消费者的数量也可以是之前的几倍

这样的做法相当于临时将partion数量和消费者数量扩容为以前的几倍,因此消费速度同样增加几倍,在消费积压的消息的时候,可以去修复之前消费者,等待积压消息消费完之后,有可以切换到之前的部署结构

欢迎有更好方案的大佬一起交流

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值