Flink的两阶段提交是什么

两阶段提交 Two-Phase-Commit,简称 2PC,是很常用的解决分布式事务问题的方式,它可以保证在分布式事务中,要么所有参与进程都提交事务,要么都取消,即实现 ACID 中的 A (原子性)。在数据一致性的环境下,其代表的含义是:要么所有备份数据同时更改某个数值,要么都不改,以此来达到数据的强一致性。

  Flink 社区将两阶段提交协议中的公共逻辑进行了提取和封装,发布了可供用户自定义实现特定方法来达到 Flink EOS特点的 TwoPhaseCommitSinkFunction。

  两阶段提交可以归纳为一目的两角色三条件

  一目的:分布式系统架构下的所有节点在进行事务提交时要保持一致性(即要么全部成功,要么全部失败);

  两角色

协调者(Coordinator),负责统筹并下达命令工作,起到分布式事务的协调管理作用

参与者(Participants),负责认真干活并响应协调者的命令。

  三条件

分布式系统中必须存在一个协调者节点和多个参与者节点,且所有节点之间可以相互正常通信;

所有节点都采用预写日志方式,且日志可以可靠存储;

所有节点不会永久性损坏,允许可恢复性的短暂损坏。

  两阶段提交,顾名思义,即分两个阶段:PreCommit 投票阶段和 Commit 提交阶段

  PreCommit 阶段(投票):

协调者向所有参与者发起请求,询问是否可以执行提交操作,并开始等待所有参与者的响应;

所有参与者节点执行协调者询问发起为止的所有事务操作,并将 undo 和 redo 信息写入日志进行持久化;

所有参与者响应协调者发起的询问。对于每个参与者节点,如果他的事务操作执行成功,则返回“同意”消息;反之,返回“终止”消息。

  Commit 阶段(提交):

如果协调者获取到的所有参与者节点返回的消息都为“同意”时,协调者向所有参与者节点发送“正式提交”的请求(成功情况);反之,如果任意一个参与者节点预提交阶段返回的响应消息为“终止”,或者协调者询问阶段超时,导致没有收到所有的参与者节点的响应,那么,协调者向所有参与者节点发送“回滚提交”的请求(失败情况)。

成功情况所有参与者节点正式完成操作,并释放在整个事务期间占用的资源;反之,失败情况下,所有参与者节点利用之前持久化的预写日志进行事务回滚操作,并释放在整个事务期间占用的资源。

成功情况下,所有参与者节点向协调者节点发送“事务完成”消息;失败情况下,所有参与者节点向协调者节点发送“回滚完成”消息。

相关推荐

  1. Flink阶段提交什么

    2024-01-20 08:22:06       51 阅读
  2. Flink实现阶段提交协议原理介绍

    2024-01-20 08:22:06       44 阅读
  3. flink什么

    2024-01-20 08:22:06       36 阅读
  4. Flink面试整理-Flink什么

    2024-01-20 08:22:06       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-20 08:22:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-20 08:22:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-20 08:22:06       82 阅读
  4. Python语言-面向对象

    2024-01-20 08:22:06       91 阅读

热门阅读

  1. 自己配置vue项目

    2024-01-20 08:22:06       52 阅读
  2. Spring AOP学习

    2024-01-20 08:22:06       38 阅读
  3. springboot如何创建全局线程池

    2024-01-20 08:22:06       53 阅读
  4. python入门,文件的编码,读取,写入,追加

    2024-01-20 08:22:06       60 阅读
  5. django 中group by 以及sum count

    2024-01-20 08:22:06       57 阅读
  6. Webpack5入门到原理13:开发服务器&自动化

    2024-01-20 08:22:06       59 阅读
  7. Linux 常用命令分享与示例

    2024-01-20 08:22:06       34 阅读
  8. 解决更新Xcode 15.2后,下载 iOS_17 Simulator失败

    2024-01-20 08:22:06       55 阅读
  9. Apache Flink 1.15正式发布

    2024-01-20 08:22:06       48 阅读
  10. 【LeetCode2744】最大字符串配对数目

    2024-01-20 08:22:06       60 阅读