┌─────────────────────────────────────────────────────────────┐
│ NameServer Cluster │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ NameServer │ │ NameServer │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
↑ ↑
│ 注册 │ 注册
│ │
┌─────────────────────────────────────────────────────────────┐
│ Broker Cluster │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Broker-A │ │ Broker-B │ │ Broker-C │ │
│ │ Master │ │ Master │ │ Master │ │
│ │ Slave │ │ Slave │ │ Slave │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
↑ ↓
Producer Consumer
| 组件 | 说明 |
|---|
| NameServer | 注册中心,轻量级无状态,多个互不通信 |
| Broker | 消息服务器,负责存储和转发消息,分 Master/Slave |
| Producer | 消息生产者 |
| Consumer | 消息消费者 |
Topic (主题)
├── Queue 0 ──→ Consumer Instance 1
├── Queue 1 ──→ Consumer Instance 2
├── Queue 2 ──→ Consumer Instance 3
└── Queue 3 ──→ Consumer Instance 4
| 概念 | 说明 |
|---|
| Topic | 一类消息的集合,逻辑分类 |
| Queue | 物理分区,一个 Topic 包含多个 Queue |
| Tag | 消息标签,二级分类,用于过滤 |
| Key | 消息 Key,用于查询和去重 |
Topic: OrderTopic
├── Queue 0 → Message 0, 3, 6, 9 ...
├── Queue 1 → Message 1, 4, 7, 10 ...
└── Queue 2 → Message 2, 5, 8, 11 ...
Consumer Group: order-consumer-group
├── Consumer 1 → Queue 0, 1
└── Consumer 2 → Queue 2
| 组件 | 说明 |
|---|
| CommitLog | 所有消息顺序追加写入 |
| ConsumeQueue | 消息消费队列,存储 offset 指向 CommitLog |
| IndexFile | 消息索引,支持按 Key/时间查询 |
| 模式 | 说明 | 场景 |
|---|
| 集群消费 | 一条消息只被消费组内一个实例消费 | 业务处理(默认) |
| 广播消费 | 一条消息被消费组内所有实例消费 | 本地缓存刷新 |
| 机制 | 说明 |
|---|
| 顺序写 | CommitLog 顺序追加,磁盘顺序写性能高 |
| PageCache | 利用操作系统页缓存,减少磁盘 IO |
| 零拷贝 | mmap 内存映射,减少数据拷贝 |
| 异步刷盘 | 批量刷盘,提高吞吐量 |
| 模式 | 说明 |
|---|
| 异步复制 | Master 不等 Slave 确认,性能好 |
| 同步复制 | 等待 Slave 确认才返回,可靠 |
基于 Raft 协议,自动选主:
| 特性 | 普通主从 | Dledger |
|---|
| 选主 | 手动 | 自动(Raft) |
| 数据一致性 | 弱 | 强 |