FlinkKafkaProducer两阶段提交-TwoPhaseCommitSinkFunction过程简述

                                                 两阶段提交

1 FlinkKafkaProducer继承了TwoPhaseCommitSinkFunction

2 TwoPhaseCommitSinkFunction类继承了RichSinkFunction类且实现了CheckPointedFunction接口以及CheckPointListener接口
3 FlinkKafkaProducer重写了TwoPhaseCommitSinkFunction类中的invoke()方法以及CheckPointedFunction接口中的initializeState()方法和snapshotState()方法和CheckPointListener接口中的notifyCheckPointComplete()方法
4 数据写出需要进行的几个步骤:
(1)首先会调父类TwoPhaseCommitSinkFunction中的initializeState()方法初始化状态,如果以前有失败的事务,则会针对失败的事务再次提交-调用initializeState()->recoverAndCommitInternal()->recoverAndCommit()
->commit(),且initializeState()方法每个subTask只会调用一次

(2)调用FlinkKafkaProducer的invoke()方法,直到执行snapshotState()方法中的checkpoint,因为进行了checkpoint,所以事务失败了也会进行回滚,回到事务失败前的状态再次进行处理
(3)会调snapshotState()方法中的precommit()方法
(4)再调notifyCheckPointComplete()方法中的commit()方法
(5)最后调snapshotState()方法中的老状态清除新状态添加的方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值