Apache Flink 会在失败后恢复触发定时器吗?

Will Apache Flink restore trigger timers after failure?

一些自定义触发器具有状态并使用计时器(即在 this example 中)。

据我所知,失败后的状态 will be restored 但是计时器呢?失败后会自动恢复吗?

是的,计时器将被设置检查点并在出现故障时恢复。

但是,这里有一个微妙的细节需要理解。每当您注册一个处理计时器时,WindowOperator 会将未来的时间戳保存在队列中并安排一个计时器任务来触发 WindowOperator。如果 WindowOperator 被触发,它将处理所有注册的时间戳低于当前时间戳的定时器事件。

Flink只会检查未来时间戳的队列,不会检查计划的定时器任务。这意味着在恢复情况下,您将恢复未来时间戳的队列,但没有计时器任务来触发 WindowOperator(然后触发计时器事件)。所以你需要等待一个新的元素来注册一个新的定时器任务。一旦此计时器任务触发,所有其他具有较低时间戳的计时器事件将被执行。

这种微妙之处不适用于事件时间处理,因为您没有触发 WindowOperator 但水印的计时器任务。

最近的版本似乎改变了行为。
现在"the current behavior is that all timers (both processing time and event time) are re-registered on restore, and therefore should be triggered automatically"。

这是对flink列表中相关消息的引用: http://mail-archives.apache.org/mod_mbox/flink-user/201804.mbox/%3CF0F57EB6-54E9-4303-AD95-EBB367B899E4@apache.org%3E