Apache Flink 有一个时间服务,让开发人员注册基于时间的事件,并收到这些事件的通知(基于处理时间或事件时间)! 但我不明白当 Apache Flink 采取检查点并从这些快照中恢复其状态时它是如何工作的!
- 它是否存储和恢复其计时器状态?
- 我可以猜到它在事件时间是如何工作的!(通过存储水印)但是处理时间呢?
- 如果它不存储计时器,那么故障恢复将不会成功,直到我们将丢失所有基于时间的事件/状态,这意味着时间窗口将无法正常运行!我说的对吗?
Flink 的所有计时器都保存为托管 Flink 状态,并在故障恢复过程中恢复。所有应在中断期间触发的处理时计时器将在恢复后立即触发,并且当水印到达时,事件时计时器将自然触发。
唯一没有完美处理的是操作员不检查他们当前的水印。如果源处于合理活动状态,这通常不会引起注意,但如果源几乎处于空闲状态,则可能会导致事件时间计时器延迟触发。