| 分区键 | 选业务实体键(订单号、账户号),保证实体级有序 |
|---|---|
| 生产端 | 同一键的消息按序发送,避免并发重排 |
| 消费端 | 单分区单并发消费;多线程消费会打乱顺序 |
保序方案对照
| 方案 | 保证范围 | 代价 |
|---|---|---|
| 单分区 | 全局有序 | 吞吐受限 |
| 业务键分区 | 实体级有序 | 跨实体顺序不保证 |
| 消费端串行 | 分区内有序 | 并发度受限 |
| 序号校验 | 检测乱序并缓冲重排 | 实现复杂度上升 |
需要全局有序的场景先评估是否真的必要:全局单分区会牺牲并行度,吞吐代价高。
顺序保证通常是分区内而非全局:以业务键做分区键,同一实体的消息进入同一分区保序;跨实体顺序需要业务收敛或合并为单一键。
| 分区键 | 选业务实体键(订单号、账户号),保证实体级有序 |
|---|---|
| 生产端 | 同一键的消息按序发送,避免并发重排 |
| 消费端 | 单分区单并发消费;多线程消费会打乱顺序 |
| 方案 | 保证范围 | 代价 |
|---|---|---|
| 单分区 | 全局有序 | 吞吐受限 |
| 业务键分区 | 实体级有序 | 跨实体顺序不保证 |
| 消费端串行 | 分区内有序 | 并发度受限 |
| 序号校验 | 检测乱序并缓冲重排 | 实现复杂度上升 |