跳转到内容

Archive 持久化与回放

Aeron Archive 给了你两个旋钮:一个控制录制的持久化程度,另一个控制如何回放。两者都调对,你就能解耦生产者与消费者、快速恢复节点,并保持较低的 p99。本页介绍用于控制持久化的 sync 级别,以及消费已录制数据的三种方式。

关于录制、catalog 和回放会话的内部工作原理,请参阅 The Aeron Files。这里我们专注于运维层面的调节项。

持久化可以按录制逐个配置。通过选择不同的 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)

数据一旦被录制下来,就有三种由浅入深、越来越精巧的方式将其读回。

回放就是对历史数据的简单回放。

  • 录制可以在之后的某个时间点回放
  • 适用于故障恢复、审计和回测。

实时跟读在流正在被录制的同时进行回放。

  • 解耦了生产者和消费者 —— 生产者无需知道消费者的存在。
  • 它为较慢的订阅者提供了缓冲。如果某个消费者落后了,它会从录制中读取,而不是对生产者施加背压。

这个背压点对尾延迟很关键:一个从 archive 读取的缓慢下游消费者无法拖住生产者,因此也无法把生产者的 p99 一并拖累。

3. 回放合并(Replay merge,最精巧的方式)

Section titled “3. 回放合并(Replay merge,最精巧的方式)”

回放合并将已录制流和实时流的订阅无缝结合起来。

流程如下:

  1. 先从已录制流开始消费,追赶历史数据。
  2. 一旦订阅者追平进度,便无缝切换到实时流
  3. 切换过程中没有间隙,也没有重复消息。