一、RocketMQ中解决消息堆积问题
1.1、概述
消息堆积是RocketMQ中很常见的一个问题,也是面试官很喜欢问的一个问题,那么什么是消息堆积呢?消息堆积,顾名思义是指某个时间段队列里面堆积了大量来不及消费的消息,一般认为单条队列中的消息差值 >= 10w时算消息堆积。
1.2、消息堆积产生的原因
RocketMQ中消息堆积产生的主要原因有两种,即:
(1)生产者生产消息的速度太快了,消费者根本来不及消费;
(2)消费者自身有问题,一般就是程序员代码写的有问题;
1.3、如何解决消息堆积问题
上面分析了消息堆积产生的原因,既然知道了原因,那解决方案就比较容易知道了,关于消息堆积问题也是围绕着产生原因来解决的,有如下方案进行解决:
(一)针对生产者生产消息的速度太快了,消费者根本来不及消费的情况,生产方可以做业务限流,具体采取的措施可能如下:
a、增加消费者的数量。但是需要注意消费者的数量 <= 队列的数量
b、适当设置最大的消费线程数量。(如果你的系统I/O操作比较频繁,最大线程数量可以设置为2n;如果你的系统是CPU密集型,最大线程数量设置为n+1;其中n为你的电脑的cpu核数)
(二)针对消费者自身的问题,这个就需要对应的开发同学优化代码去解决了。