Apache flink 具有两个接收器的两阶段提交协议

Apache flink 具有两个接收器的两阶段提交协议,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我感兴趣的是获得更多关于两阶段提交协议在具有多个接收器时如何在Flink中工作的详细信息。我对这两个案例感兴趣: 当两个接收器都支持2PC时 当其中一个支持2PC而另一个不支持时 是否保证分布式事务适用于所有接收器,或者每个接收器有不同的事务?换句话说,如果两个接收器都支持2PC,其中一个接收器出现故障,另一个能够提交,会发生什么情况?在Flink中,每个接收器负责自己的状态管理,包括任何2PC协议实现。这种划分是必要的,因为一些接收器根本不支持2PC 在Flink中触发检查点时,2PC接收器将

我感兴趣的是获得更多关于两阶段提交协议在具有多个接收器时如何在Flink中工作的详细信息。我对这两个案例感兴趣:

  • 当两个接收器都支持2PC时
  • 当其中一个支持2PC而另一个不支持时

  • 是否保证分布式事务适用于所有接收器,或者每个接收器有不同的事务?换句话说,如果两个接收器都支持2PC,其中一个接收器出现故障,另一个能够提交,会发生什么情况?

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

    在Flink中触发检查点时,2PC接收器将启动预提交。只有在预提交成功的情况下,检查点才会继续执行。当成功获取整个执行图的检查点(存储的所有运算符/UDF的状态)时,作为检查点的最后一个阶段,接收器将执行实际提交

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