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
一些自定义触发器具有状态并使用计时器(即在 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