我有一个带有接收器的 Flink 作业,它将数据写入 MongoDB。接收器是RichSinkFunction
.
启用外部检查点。间隔为 5000 磨,方案为 EXACTLY_ONCE。
- Flink 1.3 版,
- Kafka(源主题)0.9.0
我无法升级到TwoPhaseCommitSink
Flink 1.4。
我有几个疑问
- 接收器在哪个时间点确认检查点屏障,在调用函数开始时还是在调用完成时?意味着它在确认障碍之前等待持久(保存在 MongoDB 中)响应?
- 如果提交 checkpoint 是由异步线程完成的,那么 Flink 怎么能保证在作业失败的情况下只执行一次呢?如果接收器将数据保存到 MongoDB 但未提交检查点怎么办?我认为这最终会在重新启动时出现重复数据。
- 当我从 Flink 仪表板取消作业时,Flink 会完成异步检查点线程以完成还是硬 kill -9 调用?