各位大佬,请教一下flink定时任务 ontimer,若项目从savepoint重启,原先保存未执行的的定时任务是会立即触发吗?
在阿里云Flink中使用 onTimer
定时任务时,如果在 savepoint
后重启 Flink 作业,原先保存未执行的定时任务不会立即触发。
具体来说,当您使用 savepoint
做了 Flink 作业的备份后,如果重启 Flink 作业,Flink 会从 savepoint
中恢复作业状态,包括已经注册的定时任务。但是,已经注册的定时任务不会立即触发,而是按照原定时任务的时间继续等待触发。
在 Flink 中,onTimer() 方法是用于处理定时事件的回调函数。当定时器到期时,Flink 会自动调用 onTimer() 方法,并将定时器的标识符和时间戳作为参数传递给该方法。
如果您在 Flink 中使用了 onTimer() 方法,并且在执行过程中保存了一个 savepoint,那么在从 savepoint 重启应用程序时,Flink 会恢复应用程序的状态,包括已注册但未到期的定时器。这意味着,保存未执行的定时任务会被恢复,并在适当的时间触发,而不是立即触发。
当应用程序从 savepoint 重启后,Flink 会自动重新注册已保存但未到期的定时器,并根据定时器的到期时间再次触发它们。如果您的定时器是处理一些状态的操作,那么在从 savepoint 重启后,Flink 会恢复应用程序的状态,并在适当的时间触发保存的定时器,以便处理未完成的状态操作。
需要注意的是,如果您在重启应用程序时更改了定时器的逻辑或时间,可能会导致定时器在不同的时间触发,这可能会影响应用程序的行为。因此,在更改定时器逻辑或时间之前,请确保在重启应用程序后,定时器的行为与您预期的一致。
如果你使用 OnProcessingTime()
或 OnEventTime()
方式来注册 OnTimer()
回调函数的定时任务,然后在savepoint被恢复之前这些任务还没有被执行的话,那么这些任务是不会被立即触发的。
在Flink中,定时任务与时间语义(Processing Time or Event Time)有关。使用Processing Time触发的定时任务,是基于系统时间(System Time)进行计算,即触发条件是基于机器当前时间进行计算的。而使用Event Time触发的定时任务,是基于事件时间(Event Time)进行计算,即触发条件是基于事件发生时间与Watermark进行计算的。
因此,在 Flink 从 savepoint 恢复的时候,会将 checkpointed state 和 metadata 一起恢复,而定时任务的状态也会被恢复。但是,如果一个定时任务的触发时间已经过去,那么这个任务不会再被触发,无论是从 checkpoint 还是 savepoint 恢复的。如果定时任务的触发时间在Flink从savepoint 恢复前未到达,则在恢复之后,该任务可以被触发。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。