什么情况下会造成大量消息积压?

可能消费者突然挂了我们没有发现,可能消费者处理消费能力出现问题,与生产者产生消息速度不匹配。

消息积压会带来什么样的问题?

我们要分析大量消息挤压可能带来的问题:

  • 比如消息存留时间过长,导致失效消失;
  • 比如消息队列集群磁盘被写满;
  • 再比如挤压了几个小时,哪怕是消费者恢复了消费速度还是要很久才能慢慢消费完,效率如此低下怎么办?
如何解决?

1、积压消息太多,恢复速度后消费速度慢,效率低下,那我们就要增加消费速度了。这时候可以申请资源新建一个topic增加partition分区,比如原来是3个,那我们就增加到30个,并且建立30个消费者去同时消费,那速度自然就增加了10倍。原来的3个就需要将原本的数据也写入新的topic中。等到积压消息处理完了,再改回原本的消费者中。

2、如果用了rabbitMQ,并且设置了超时时间,消息积压的时候就有可能会出现超时丢失的情况。一般情况下生产环境是不会设置超时时间的,但是万一设置了出现这种情况,我们首先是要排除问题保证后续消息处理正常,不会再造成丢失。然后等过了数据高峰期再写个临时程序,将丢失的数据一点点查询出来,重新写入topic中。

3、如果长时间没有消费导致磁盘满了怎么办,如果不能临时扩容,那么只有两种方案,要么将消息扔掉等过了高峰期走上面的第二种方案,去补偿数据;要么新建立一个消费者,将消息快速消费存入一个新的地方。

其实这种情况说白了,并没有一种高深的技术性方案,就是靠临时方案去解决,只能我们尽量避免这种情况出现。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐