mirror of
https://github.com/doocs/advanced-java.git
synced 2026-08-18 10:43:29 +08:00
docs(high-concurrency): recommend Quorum Queues (#332)
This commit is contained in:
@@ -48,6 +48,36 @@ RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模
|
||||
|
||||
这样的话,好处在于,你任何一个机器宕机了,没事儿,其它机器(节点)还包含了这个 queue 的完整数据,别的 consumer 都可以到其它节点上去消费数据。坏处在于,第一,这个性能开销也太大了吧,消息需要同步到所有机器上,导致网络带宽压力和消耗很重!第二,这么玩儿,不是分布式的,就**没有扩展性可言**了,如果某个 queue 负载很重,你加机器,新增的机器也包含了这个 queue 的所有数据,并**没有办法线性扩展**你的 queue。你想,如果这个 queue 的数据量很大,大到这个机器上的容量无法容纳了,此时该怎么办呢?
|
||||
|
||||
|
||||
#### Quorum Queues(仲裁队列,推荐)
|
||||
|
||||
从 RabbitMQ 3.8 版本开始,引入了 Quorum Queues(仲裁队列)作为新的高可用解决方案,旨在替代传统的镜像集群模式。
|
||||
|
||||
**核心原理**:基于 Raft 共识算法,Quorum Queues 在多个节点之间通过 quorum 复制实现数据一致性。
|
||||
|
||||
**主要优势**:
|
||||
- **数据一致性**:基于 Raft 算法,保证消息在 quorum 多数节点确认后才算写入成功
|
||||
- **自动故障转移**:leader 节点宕机后,自动重新选举,无需手动干预
|
||||
- **线性扩展**:可以独立扩展副本数量,不受单节点容量限制
|
||||
- **持久化优化**:支持段式存储,滚动刷新时性能更优
|
||||
|
||||
**配置示例**:
|
||||
```bash
|
||||
rabbitmqctl set_policy ha-quorum "^quorum\." '{"ha-mode":" quorum"}'
|
||||
```
|
||||
|
||||
**适用场景**:
|
||||
- 对数据可靠性要求高的生产环境
|
||||
- 需要更好扩展性的分布式部署
|
||||
- 替代传统镜像集群模式的升级路径
|
||||
|
||||
**注意事项**:
|
||||
- Quorum Queues 仅支持持久化消息(persistent),不适用于临时队列
|
||||
- 资源消耗高于普通队列,需合理规划节点数量
|
||||
- 最低需要 3 节点才能形成有效的 quorum
|
||||
|
||||
**迁移建议**:对于现有使用镜像集群的队列,建议逐步迁移到 Quorum Queues。迁移过程中需注意消息持久化配置和消费者兼容性。
|
||||
|
||||
### Kafka 的高可用性
|
||||
|
||||
Kafka 一个最基本的架构认识:由多个 broker 组成,每个 broker 是一个节点;你创建一个 topic,这个 topic 可以划分为多个 partition,每个 partition 可以存在于不同的 broker 上,每个 partition 就放一部分数据。
|
||||
|
||||
Reference in New Issue
Block a user