【11来了】文章导读地址:点击查看文章导读!
消息出现大量堆积的原因是:生产者速度 >> 消费者速度
首先需要排除 代码层面
的问题,再去对 RocketMQ 的配置做处理!
那么对于消息堆积的处理,就分为两种情况:
事发时处理:
扩容消费者(在消费者数量 < MessageQueue 的情况下)
这里 增加消费者的数量
是有依据的,比如一个 Topic 下有 8 个 MessageQueue,那么最多将消费者数量增加到 8 个,因为 Topic 下一个队列只可以被同一消费者组的一个消费者消费,如果消费者的数量比 Topic 下的队列数量多的话,会有部分消费者分不到队列,因此消费者数量最多和 Topic 下的队列数量相同
设置消费者的并发线程数
提高单个消费者的消费并发线程,RocketMQ 支持批量消费消息,可以通过修改 DefaultMQPushConsumer 类中的 consumeThreadMin、consumeThreadMax 来提高单个消费者的并发能力
消费者批量拉取消息
新建临时 Topic 并设置 MessageQueue 数量多一点,将当前堆积信息转发到新建 Topic 中,再使用大量消费者去消费新的 Topic
提前设计预防:
部署架构分为(这里的 Master ):
单 Mastaer
(图片来源于网络)
单 Msater 单 Slave:Master 宕机后集群不可写入消息,但是可以从 Slave 读取消息
(图片来源于网络)
多 Master ,无 Slave
(图片来源于网络)
多 Master,多 Slave,异步复制
(图片来源于网络)
多 Msater,多 Slave,同步复制
(图片来源于网络)
Dledger 模式