有没有哪些同学知道flink restart策略自动重启job时会不会再执行一遍用户jar包里面的main函数?就是我以yarn-per-job模式提交了一个jar包执行flink任务,然后main函数肯定是在本地节点运行后再将整个job提交到yarn生成flink集群的,但是要是我这个flink任务挂了触发自动重启的话,还会再进行一遍这个提交过程吗?
当你以YARN per-job模式提交一个Job时,在Job失败并重新启动时,主函数(main())不会再次被执行。这是因为主函数在第一次提交Job时就已经被调用了,并且Job的全部状态都被保存在检查点中。当Job失败并且需要恢复时,Flink会从最后一个成功的检查点开始重新执行Job。
然而,需要注意的是,如果你在主函数中进行了任何静态初始化或者全局变量的赋值,那么这些操作只会在主函数首次执行时进行,而不会在Job恢复时重复进行。因此,如果你的Job依赖于这些全局状态,那么在Job恢复时可能会出现问题。在这种情况下,你可能需要考虑将这些状态迁移到Flink的状态系统中,这样它们就可以在Job恢复时得到正确的恢复。
Flink的Restart策略并不会再执行一遍用户Jar包里面的Main函数。当你提交一个Flink作业到YARN上,并且配置了Restart策略,当作业失败时,Flink JobManager会尝试重启失败的TaskManager或Job。
在重启的过程中,Flink会检查Checkpoint,然后根据Checkpoint信息来恢复作业的执行状态,包括恢复Task的状态和数据的状态。这个过程并不会再次执行Main函数。
如果你的作业在重启后仍然失败,Flink会继续尝试重启,直到达到最大重启次数,或者直到作业成功启动。
所以,你可以在你的Main函数中做一些初始化的工作,比如加载配置文件,初始化数据等,这些工作只需要在第一次提交作业时执行一次,后续的重启过程中就不再需要执行了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。