RocketMQ 集群高可用

一、故障型高可用

多节点部署以便故障转移

如果Broker以一个集群的方式部署,会有一个master节点和多个slave节点,消息需要从Master复制到Slave上。而消息复制的方式分为同步复制和异步复制。

同步复制:

同步复制是等Master和Slave都写入消息成功后才反馈给客户端写入成功的状态,同步复制会增大数据写入的延迟,降低系统的吞吐量。

异步复制:

异步复制是只要master写入消息成功,就反馈给客户端写入成功的状态。然后再异步的将消息复制给Slave节点在异步复制下,系统拥有较低的延迟和较高的吞吐量。但是如果master节点故障,而有些数据没有完成复制,就会造成数据丢失。

RocketMQ 的主从架构中,Master 是消息的写入和读取主节点,而 Slave 主要是复制 Master 消息,用于容灾和故障转移。

二、容量型高可用

消息积压处理

RocketMQ 消息积压是指 Broker 中待消费消息堆积过多,消费者消费速度跟不上生产者发送速度。

处理方法主要包括:

1️⃣ 监控队列堆积指标,及时发现问题

2️⃣ 对生产者进行流控或延迟发送,缓解高峰

3️⃣ 扩容 Broker 节点、优化磁盘和网络性能

4️⃣ 配合死信队列 DLQ 处理多次消费失败的消息,防止失败消息无限积压

5️⃣ 增加消费者并行度或消费者数量,提高消费速度

对于顺序消息,要注意队列和线程一一对应,否则增加消费者线程未必能提升消费速度