首页 > 解决方案 > 具有两个接收器的两阶段提交协议

问题描述

我有兴趣了解更多关于两阶段提交协议在具有多个接收器时如何在 Flink 中工作的详细信息。我对这两种情况感兴趣:

  1. 当两个 sink 都支持 2PC 时
  2. 当其中一个支持 2PC 而另一个不支持时

是否保证分布式事务适用于所有接收器,或者我们每个接收器都有不同的事务?换句话说,如果两者都支持 2PC,其中一个 sink 失败,而另一个能够 commit,会发生什么?

标签: apache-flinkflink-streaming

解决方案


在 Flink 中,每个 sink 负责自己的状态管理,这包括任何 2PC 协议实现。这种划分是必要的,因为一些接收器根本不支持 2PC。

当 Flink 中触发检查点时,2PC sinks 将启动 precommit。仅当该预提交成功时,才会继续执行检查点。当整个执行图的检查点已成功获取(所有操作符/UDF 存储的状态),作为检查点的最后阶段,接收器将执行实际提交。

回到您的问题:如果任何接收器未能提交,检查点将失败,整个 Flink 应用程序也会随之失败,因此它会以最后一次成功执行的检查点重新启动。


推荐阅读