千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  应聘面试  >  大数据面试题  > Flink两阶段提交(2PC)

Flink两阶段提交(2PC)

来源:千锋教育
发布人:wjy
时间: 2022-09-02 15:42:28 1662104548

借助一个文件写入的例子来说明两阶段提交,在Flink中使用两阶段提交,需要实现TwoPhaseCommitSinkFunction这个抽象类的四个方法,我们下面来说明。

protected abstract TXN beginTransaction() throws Exception; protected abstract void preCommit(TXN transaction) throws Exception; protected abstract void commit(TXN transaction); protected abstract void abort(TXN transaction);  

1. beginTransaction - 在事务开始前,我们在目标文件系统上面的临时目录上创建一个临时文件。随后,我们在程序处理的时候可以将数据写入到这个文件。

2. preCommit - 在预提交阶段,我们刷新文件到磁盘,关闭文件。

3. commit - 在提交阶段,我们原子性的将预提交阶段的文件移动到真正的目标目录。需要注意的是,这增加了输出数据的可见性的延迟,因为不mv是看不到数据的,延迟时间就是设定的checkpoint的时间。

4. abort - 在终止阶段,我们删除临时文件 *如果步骤中有任何错误,Flink会通过最新的checkpoint来恢复程序状态。

比如预提交成功了,在通知到达operator之前失败了。

这时候,Flink将operator的状态恢复到预提交阶段,即还未真正提交的时候。

为了能在重启的时候能够正确的终止或者提交事务,我们需要在预提交阶段将足够的信息保存到checkpoint中。

在这个例子中,这些信息是临时文件以及目标目录的地址, 当从checpoint恢复时,Flink会先执行一个Commit操作。

Flink两阶段提交(2PC)

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT