从上一篇文章来看,Flink 似乎恰好实现了一次
成功预提交后,必须保证提交 最终成功
我认为"成功的预提交"是由 Flink 任务管理器实现的;而"最终成功"是由 Flink sink 实现的。
- Flink 汇节点如何实现"最终成功"?
- 这种恰好一次的机制与检查点有什么关系吗?
Flink 的两阶段提交接收器通常通过以下方式将它们的操作与检查点机制耦合:
- onSnapshot:刷新所有记录并预提交
- onCheckpointComplete:提交挂起的事务并发布数据
- onRecovery:检查并提交任何挂起的事务
请注意,如果外部系统使将在onRecovery阶段提交的挂起事务超时,则数据可能会丢失。
您可以在 Apache Flink 中的端到端精确一次处理概述中了解更多信息(也适用于 Apache Kafka!(。