趋近智
分布式系统没有足够可靠的全局时钟来同时协调数百个操作符的一致快照。一种简单的容错方法可能涉及“停止”机制,即所有处理暂停,状态写入磁盘,然后处理恢复。在高吞吐量 (throughput)流式环境中,这会引入不可接受的延迟峰值,并大幅降低性能。
Apache Flink 通过使用异步屏障快照(ABS)来应对这一问题。该机制使得系统能够在不中断持续数据处理的情况下,创建全局状态的一致镜像。ABS 是 Chandy-Lamport 分布式快照算法的一种变体,专门为流作业的 directed acyclic graph (DAG) 拓扑结构进行了调整。
ABS 算法的核心组成部分是检查点屏障。与标准数据记录不同,屏障是由源操作符注入到数据流中的控制消息。这些屏障将无界流分成逻辑上的时期。所有在屏障 之前的数据记录属于快照 ,而屏障之后的数据记录属于快照 。
屏障与数据记录一同向下游流动,严格保持每个通道内事件的顺序(先进先出)。由于屏障在流中占据特定位置,它们会在所有与屏障前数据相关的修改完成后,精确地触发状态持久化。
检查点屏障通过简单操作符拓扑的传播图。屏障将属于当前检查点时期的数据与下一时期的数据分开。
当一个操作符从多个输入通道接收数据时(例如,CoProcessFunction 或 KeyedWindow),它必须确保快照反映所有输入的一致视图。这需要一个被称为屏障对齐的过程。
对于带有输入 和 的操作符,对齐过程如下进行:
对齐阶段确保了精确一次的处理语义。如果系统发生故障并从该快照恢复,屏障前的每条记录都将被精确处理一次,屏障后的记录也不会被过早处理。
数学上,设 为通道 上接收到的记录序列。检查点 处的状态 满足:
其中 表示状态转换函数。这意味着状态严格反映了流前缀直到屏障的数据消耗情况。
屏障对齐 (alignment)引入了延迟方面的权衡。在对齐阶段,操作符会暂停处理较快的数据流(例如前述的 ),以等待较慢的数据流()。在数据倾斜严重或网络抖动明显的拓扑中,这种等待时间会表现为反压,并向上游传播。
如果对齐时间为 ,那么被阻塞通道中记录的总端到端延迟至少增加 。对于需要超低延迟且恢复时偶尔重复处理可接受的应用,Flink 允许配置非对齐检查点。在此模式下,屏障会超越缓冲区中的数据记录,并且传输中的数据将作为检查点状态的一部分进行持久化,从而绕过对齐延迟,但代价是检查点大小会增加。
屏障对齐 (alignment)后(或对于单输入操作符,屏障到达后立即),操作符执行状态快照。为避免阻塞主处理线程,Flink 将快照过程分为两个阶段:
这种分离确保了通过网络传输大量状态集的开销不会影响流作业的吞吐量 (throughput)。
状态大小随时间相对于屏障间隔增长的图示。高效的快照操作将“停止时间”(同步阶段)降至最低。
运行在 JobManager 上的检查点协调器,管理整个生命周期。它触发源操作符注入屏障并收集所有任务的确认信息。只有当 DAG 中的所有操作符都成功确认了其针对特定屏障 ID 的状态句柄时,检查点才被视为完成。
如果操作符未能确认快照(由于网络故障或磁盘 I/O 错误),协调器会将检查点 标记 (token)为失败并清理任何部分数据。流处理继续不中断,依赖于下一个成功的检查点间隔来确定有效的恢复点。这种乐观策略确保了短暂的基础设施故障不会破坏实时数据管道,前提是成功检查点之间的间隔保持在服务级别协议(SLA)定义的数据丢失恢复限制内。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•