Flink Exactly Once
Flink Exactly Once 语意是基于Chandy-Lamport这个算法的思想的改进版,引入了barrier,可以在不停止整个流处理系统的前提下,保存和恢复每个subtask的snapshot,让每个节点独立地做状态保存和恢复。
Chandy-Lamport 算法
- Initiating a snapshot: 也就是开始创建 snapshot,可以由系统中的任意一个进程发起
- Propagating a snapshot: 系统中其他进程开始逐个创建 snapshot 的过程
- Terminating a snapshot: 算法结束条件
一、Initiating a snapshot
- 进程 Pi 发起: 记录自己的进程状态,同时生产一个标识信息 marker,marker 和进程通信的 message 不同
- 将 marker 信息通过 ouput channel 发送给系统里面的其他进程
- 开始记录所有 input channel 接收到的 message
二、Propagating a snapshot
- 对于进程 Pj 从 input channel 接收到 marker 信息:
- 如果 Pj 还没有记录自己的进程状态,则
- Pj 记录自己的进程状态
- 向 output channel 发送 marker 信息
- 否则
- 记录所有input channel 中收到所有排在本次ma