消息队列(六)如何处理消费者故障导致的百万消息积压?

2021/05/06

我们先思考一下导致消息队列消息百万积压都是怎么造成的。首先,可能是消费端出问题了,比如宕机等情况,或者消费端消费突然变得极慢,就会导致消息不断积压;也有可能是消费端依赖的服务器挂掉了,比如依赖的 NoSQL/MySQL 挂掉了,导致消费者自己没法正常运作了,导致消息的积压。

怎么解决百万消息积压问题?

如果积压的这些消息是允许丢失的,那么很简单,马上修改消费者代码直接丢弃消息即可,这个速度会很快,所以积压消息处理起来也非常地迅速。

但是往往来说,很多消息都是不允许直接丢弃的。所以我们还是需要快速地处理,怎么快速地处理呢?最简单高效的办法就是临时部署足够多的消费者,一起来消费这些消息。当然,在此之前,需要先恢复系统的正常服务。

比如对于 RocketMQ 来说,原本一个 Topic 只有 4 个 MessageQueue,对应 4 个消费者。很明显如果消息积压了百万条,那么 4 个消息消费是不能够快速处理掉这一批积压消息的。我们可以修改 4 台原消费者代码,不直接处理消息,而是先把消息发送到一台新的 RocketMQ 中,这台新的 RocketMQ 一个 Topic 有 20 个 MessageQueue,这时我们可以临时部署 20 个消费者一起消费这批数据,消息的消费速度提高了 5 倍,很快积压的百万消息都会被处理完毕。处理完积压的消息之后就可以下线临时部署的 20 台消费者了。

daozhidebaiwanxiaoxijiya_1.png

作者:奈何花开

来源:https://xie.infoq.cn/article/b73758f12905a71b1efe1b4d2

本文为原创文章,转载请标明出处。
本文链接:https://www.fangzhipeng.com/javainterview/2021/05/06/a94b548.html
本文出自方志朋的博客


(转载本站文章请注明作者和出处 方志朋-forezp

宝剑锋从磨砺出,梅花香自苦寒来,用心分享,一起成长,做有温度的攻城狮!
   

Post Directory