1、pre-commit阶段:当checkpoint barrier在所有operator都传递了一遍且对应的快照也都成功完成之后,这个pre-commit阶段才算完成。该过程中所有创建的快照都被视为是checkpoint的一部分。此时我们说checkpoint就是整个应用的全局状态,当然也包含pre-commit阶段提交的外部状态。当出现崩溃时,我们可以回滚状态到最新已成功完成快照时的时间点。整个过程为预提交阶段
2、commit阶段:下一步就是通知所有的operator,告诉它们checkpoint已成功完成。这便是两阶段提交协议的第二个阶段:commit阶段。该阶段中JobManager会为应用中每个operator发起checkpoint已完成的回调逻辑。
3、两阶段提交,最核心是要上下游都要支持事务,否则消费的数据不能重新消费或者写入的数据不能撤回。比如上游kafka天然支持重新读取数据,下游kafka开启幂和事务保证数据不重复 等操作。因为redis不支持写入事务,所以不能保证精准一次
4、mysql相关的两阶段提交代码 https://blog.51cto.com/simplelife/2401521