什么情况下会造成大量消息积压?
可能消费者突然挂了我们没有发现,可能消费者处理消费能力出现问题,与生产者产生消息速度不匹配。
消息积压会带来什么样的问题?
我们要分析大量消息挤压可能带来的问题:
- 比如消息存留时间过长,导致失效消失;
- 比如消息队列集群磁盘被写满;
- 再比如挤压了几个小时,哪怕是消费者恢复了消费速度还是要很久才能慢慢消费完,效率如此低下怎么办?
如何解决?
1、积压消息太多,恢复速度后消费速度慢,效率低下,那我们就要增加消费速度了。这时候可以申请资源新建一个topic增加partition分区,比如原来是3个,那我们就增加到30个,并且建立30个消费者去同时消费,那速度自然就增加了10倍。原来的3个就需要将原本的数据也写入新的topic中。等到积压消息处理完了,再改回原本的消费者中。
2、如果用了rabbitMQ,并且设置了超时时间,消息积压的时候就有可能会出现超时丢失的情况。一般情况下生产环境是不会设置超时时间的,但是万一设置了出现这种情况,我们首先是要排除问题保证后续消息处理正常,不会再造成丢失。然后等过了数据高峰期再写个临时程序,将丢失的数据一点点查询出来,重新写入topic中。
3、如果长时间没有消费导致磁盘满了怎么办,如果不能临时扩容,那么只有两种方案,要么将消息扔掉等过了高峰期走上面的第二种方案,去补偿数据;要么新建立一个消费者,将消息快速消费存入一个新的地方。
其实这种情况说白了,并没有一种高深的技术性方案,就是靠临时方案去解决,只能我们尽量避免这种情况出现。