apache-flink - 具有两个接收器的两阶段提交协议
问题描述
我有兴趣了解更多关于两阶段提交协议在具有多个接收器时如何在 Flink 中工作的详细信息。我对这两种情况感兴趣:
- 当两个 sink 都支持 2PC 时
- 当其中一个支持 2PC 而另一个不支持时
是否保证分布式事务适用于所有接收器,或者我们每个接收器都有不同的事务?换句话说,如果两者都支持 2PC,其中一个 sink 失败,而另一个能够 commit,会发生什么?
解决方案
在 Flink 中,每个 sink 负责自己的状态管理,这包括任何 2PC 协议实现。这种划分是必要的,因为一些接收器根本不支持 2PC。
当 Flink 中触发检查点时,2PC sinks 将启动 precommit。仅当该预提交成功时,才会继续执行检查点。当整个执行图的检查点已成功获取(所有操作符/UDF 存储的状态),作为检查点的最后阶段,接收器将执行实际提交。
回到您的问题:如果任何接收器未能提交,检查点将失败,整个 Flink 应用程序也会随之失败,因此它会以最后一次成功执行的检查点重新启动。
推荐阅读
- python - 在 Pandas 中读取文本文件时的左贪心与右贪心列分配
- swift - Swift 将数据发送到不同故事板中的视图控制器
- r - 汇总 dplyr 中每组的所有其他值
- python - 用分号将 CSV 拆分为单独的列
- matlab - 在 Matlab Coder 中使用相对路径
- laravel - 组的路由名称不适用
- javascript - Nestjs:即使正文验证失败也上传图片
- schema.org - 谷歌结构化数据价格未显示在谷歌中
- r - 如何将单个字符串(单词以逗号分隔)转换为多个字符串?
- java - 如何在 android 上使用 AccessibilityService 获取屏幕上的 View 对象?