开发者社区> 问答> 正文

关于flink中端对端的精确一次性理解问题

根据flink端对端的定义,采用二阶段提交,flink中已经封装好了,放到TwoPhaseCommitSinkFunction中,只要实现对应的方法就行,

– beginTransaction

– preCommit

– commit

– abort

如果sink端的操作是幂等的,就不需要实现了,假设现在我要实现写入MYSQL,实现端对端精确一次性,这种情况下是不是 preCommit不需要写, 然后最终commit再提交事务?这样事务的打开时间就跟checkpoint的时间关联了,假设checkpoint时间很长,是不是意味着事务打开时间很长,有风险; 而且如果checkpoint要持续的进行着(原来假设每分钟一次checkpoint,现在要每秒一次?),不能设置间隔时间? 或者是间隔时间都算到下次checkpoint中,这样事务的打开时间更长了,请问是不是这样理解? 这样端对端精确一次性是不是效果很小?*来自志愿者整理的flink邮件归档

展开
收起
小阿怪 2021-12-07 22:02:36 548 0
1 条回答
写回答
取消 提交回答
  • 对于MySQL sink来说,使用2PC我理解应该是不能用MySQL transaction的。因为如果你在preCommit中(或之前)开启了transaction,任务失败的话数据会直接丢失,没法实现2PC里preCommit成功后必须保证commit成功的语义。一种办法是preCommit时写入mysql临时表,在commit时将临时表数据移动入正式表。*来自志愿者整理的flink邮件归档

    2021-12-08 10:25:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 覃立辉 立即下载
Flink CDC Meetup PPT - 孙家宝 立即下载
Flink CDC Meetup PPT - 徐榜江 立即下载