开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

flink restart策略自动重启job时会不会再执行一遍用户jar包里面的main函数?

有没有哪些同学知道flink restart策略自动重启job时会不会再执行一遍用户jar包里面的main函数?就是我以yarn-per-job模式提交了一个jar包执行flink任务,然后main函数肯定是在本地节点运行后再将整个job提交到yarn生成flink集群的,但是要是我这个flink任务挂了触发自动重启的话,还会再进行一遍这个提交过程吗?

展开
收起
cuicuicuic 2023-11-21 08:08:40 68 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    当你以YARN per-job模式提交一个Job时,在Job失败并重新启动时,主函数(main())不会再次被执行。这是因为主函数在第一次提交Job时就已经被调用了,并且Job的全部状态都被保存在检查点中。当Job失败并且需要恢复时,Flink会从最后一个成功的检查点开始重新执行Job。

    然而,需要注意的是,如果你在主函数中进行了任何静态初始化或者全局变量的赋值,那么这些操作只会在主函数首次执行时进行,而不会在Job恢复时重复进行。因此,如果你的Job依赖于这些全局状态,那么在Job恢复时可能会出现问题。在这种情况下,你可能需要考虑将这些状态迁移到Flink的状态系统中,这样它们就可以在Job恢复时得到正确的恢复。

    2023-11-21 14:13:46
    赞同 1 展开评论 打赏
  • Flink的Restart策略并不会再执行一遍用户Jar包里面的Main函数。当你提交一个Flink作业到YARN上,并且配置了Restart策略,当作业失败时,Flink JobManager会尝试重启失败的TaskManager或Job。

    在重启的过程中,Flink会检查Checkpoint,然后根据Checkpoint信息来恢复作业的执行状态,包括恢复Task的状态和数据的状态。这个过程并不会再次执行Main函数。

    如果你的作业在重启后仍然失败,Flink会继续尝试重启,直到达到最大重启次数,或者直到作业成功启动。

    所以,你可以在你的Main函数中做一些初始化的工作,比如加载配置文件,初始化数据等,这些工作只需要在第一次提交作业时执行一次,后续的重启过程中就不再需要执行了。

    2023-11-21 10:45:36
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载