一些自定义触发器具有状态并使用计时器(即在此示例中)。
据我了解,失败后状态将恢复,但计时器呢?失败后会自动恢复吗?
是的,计时器将被检查点并在发生故障时恢复。
但是,这里有一个微妙的细节需要理解。每当您注册处理计时器时,WindowOperator
都会将未来的时间戳保存在队列中并安排一个计时器任务,该任务将触发WindowOperator
. 如果 aWindowOperator
被触发,它将处理所有已注册的时间戳低于当前时间戳的定时器事件。
Flink 只会检查未来时间戳的队列,而不是计划的计时器任务。这意味着在恢复情况下,您将恢复未来时间戳的队列,但没有定时器任务来触发WindowOperator
(然后触发定时器事件)。所以你需要等待一个新的元素来注册一个新的定时器任务。一旦这个定时器任务触发,所有其他时间戳较低的定时器事件都将被执行。
这种微妙之处不适用于事件时间处理,因为您没有触发WindowOperator
水印的计时器任务。
似乎在最近的版本中行为发生了变化。
现在“当前行为是所有计时器(处理时间和事件时间)都在恢复时重新注册,因此应该自动触发”。
这是对flink列表中相关消息的引用:http: //mail-archives.apache.org/mod_mbox/flink-user/201804.mbox/%3CF0F57EB6-54E9-4303-AD95-EBB367B899E4@apache.org% 3E