开发者社区 问答 正文

flink服务器重启后,所有的job会丢失,需要重新上传。

如何做倒flink服务器重启后,所有之前进行中的job自动恢复,且checkpoint读取数据继续执行。

我目前flink部署在单台服务器上

展开
收起
1204048327784491 2022-01-21 15:40:33 1700 分享 版权
阿里云 AI 助理回答

为了确保Flink服务器重启后,所有之前进行中的Job能够自动恢复并从最近的Checkpoint继续执行,您需要采取以下措施:

  1. 配置Checkpoint:

    • 确保您的Flink作业配置中启用了Checkpoint机制。这可以通过在Flink配置文件(如flink-conf.yaml)中设置相关参数实现,例如:
      state.checkpoints.dir: hdfs://namenode-host:port/flink-checkpoints
      execution.checkpointing.interval: 5000  # 每5秒做一次Checkpoint,根据实际需求调整
      
    • 配置Checkpoint存储到高可用系统如HDFS、S3等,以确保即使Flink任务管理节点(JobManager)发生故障,Checkpoint数据依然安全。
  2. 使用High Availability (HA)模式部署Flink:

    • 单机部署Flink不支持自动故障恢复。要实现自动恢复,您需要将Flink集群部署为高可用模式,至少需要两个JobManager实例作为Active/Standby模式运行。这样当主JobManager失败时,备用JobManager可以接管并恢复作业。
  3. 配置JobManager的高可用性:

    • flink-conf.yaml中配置ZooKeeper或其它协调服务,用于选举和管理JobManager的状态。
      high-availability: zookeeper
      high-availability.zookeeper.quorum: zk-host1:2181,zk-host2:2181,zk-host3:2181
      
  4. 自定义Linux服务以自动重启Flink JobManager和TaskManager:

    • 参考知识库资料[1],您可以利用云助手插件ecs-tool-servicekeepalive来创建一个systemd service,确保Flink的JobManager和TaskManager进程在服务器重启后能自动启动。配置类似于:
      sudo acs-plugin-manager -exec -plugin ecs-tool-servicekeepalive -params "start,'./bin/start-cluster.sh'"
      
    • 确保您的启动脚本(如start-cluster.sh)正确地初始化和启动了Flink集群。

通过上述步骤,当您的Flink服务器因任何原因重启后,JobManager会自动从高可用存储中恢复最新的Checkpoint,并重新启动所有TaskManager,从而使得所有之前进行中的Job能够自动恢复并继续执行。请注意,实施这些更改前,请充分测试以避免生产环境中的意外中断。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答