flink实现exactly-once
前言
exactly-once,即实现一次且仅一次。可分为框架内实现和端对端实现。
2PC
2PC应用于很多框架中,如ZK,flink。大致可以分为以下几步:
- beginTransaction:开始事务,做一些准备工作。
- preCommit:预提交阶段,如临时保存等。
- commit:提交操作。
- abort:回滚,撤回操作。
读后感
flink内部支持exactly-once。
主要技术点:
- 内部state和checkpoint机制
- 2PC式提交
数据进入flink
- flink将数据分段,每段之间加barrier(barrier用来分隔数据,barrier之中有Snapshot的编号)。
- pre-commit阶段
- 每个operator的state(保存了kafka的offset)提交到state backend
- 所有的operator完成了checkpoint,pre-commit阶段完成。
- checkpoint包含了整段数据的状态,包含外部的external state。
- commit阶段
- 提交commit
- 失败后的处理: <
- 提交commit