Archive 持久化与回放
Aeron Archive 给了你两个旋钮:一个控制录制的持久化程度,另一个控制如何回放。两者都调对,你就能解耦生产者与消费者、快速恢复节点,并保持较低的 p99。本页介绍用于控制持久化的 sync 级别,以及消费已录制数据的三种方式。
关于录制、catalog 和回放会话的内部工作原理,请参阅 The Aeron Files。这里我们专注于运维层面的调节项。
sync 级别控制持久化
Section titled “sync 级别控制持久化”持久化可以按录制逐个配置。通过选择不同的 sync 级别,你在写入性能和崩溃安全性之间做权衡。
| Sync Level | 行为 | 持久化 | 性能 |
|---|---|---|---|
| Level 0(默认) | 仅写入 page cache | 最低 —— 操作系统崩溃时数据丢失 | 最快 |
| Level 1 | 将数据块同步到磁盘,但不同步元数据 | 中等 —— 数据可在操作系统崩溃后保留,但录制元数据可能不一致 | 适中 |
| Level 2 | 将数据块和元数据都同步到磁盘 | 最高 —— 完整的崩溃一致性 | 最慢 |
两点在生产环境中容易踩坑:
- 默认是 Level 0 —— 仅写入 page cache。Aeron Archive 默认情况下对操作系统崩溃或断电并不具备持久化能力。
- Catalog 的持久化可以单独控制,但应将其设置为与录制 sync 级别相同的值。设置不一致会埋下不一致的隐患。
整个谱系很简单:
Performance ←————————————————————→ Durability Level 0 Level 1 Level 2 (page cache) (data sync) (full sync)消费已录制数据的三种方式
Section titled “消费已录制数据的三种方式”数据一旦被录制下来,就有三种由浅入深、越来越精巧的方式将其读回。
1. 回放(Replay)
Section titled “1. 回放(Replay)”回放就是对历史数据的简单回放。
- 录制可以在之后的某个时间点回放。
- 适用于故障恢复、审计和回测。
2. 实时跟读(Live tailing)
Section titled “2. 实时跟读(Live tailing)”实时跟读在流正在被录制的同时进行回放。
- 它解耦了生产者和消费者 —— 生产者无需知道消费者的存在。
- 它为较慢的订阅者提供了缓冲。如果某个消费者落后了,它会从录制中读取,而不是对生产者施加背压。
这个背压点对尾延迟很关键:一个从 archive 读取的缓慢下游消费者无法拖住生产者,因此也无法把生产者的 p99 一并拖累。
3. 回放合并(Replay merge,最精巧的方式)
Section titled “3. 回放合并(Replay merge,最精巧的方式)”回放合并将已录制流和实时流的订阅无缝结合起来。
流程如下:
- 先从已录制流开始消费,追赶历史数据。
- 一旦订阅者追平进度,便无缝切换到实时流。
- 切换过程中没有间隙,也没有重复消息。