Kubernetes环境Flink 1.14应用模式:手动触发Savepoint并恢复作业
K8s应用模式下Flink 1.14手动触发Savepoint并恢复作业
一、手动触发Savepoint
定位JobManager Pod:先找到对应Flink应用的JobManager Pod名称:
kubectl get pods | grep jobmanager筛选出目标应用的JobManager Pod,记为
<jobmanager-pod-name>。获取运行中的作业ID:执行命令查看当前作业的ID:
kubectl exec <jobmanager-pod-name> -- flink list -r输出里的作业ID记为
<job-id>。触发Savepoint:执行Savepoint触发命令,指定作业ID和Savepoint存储路径(建议用Checkpoint所在HDFS的子目录,比如
hdfs://your-checkpoint-hdfs/savepoints):kubectl exec <jobmanager-pod-name> -- flink savepoint <job-id> hdfs://your-hdfs-path/savepoints如果希望触发Savepoint后直接停止作业,可以添加
--stop参数:kubectl exec <jobmanager-pod-name> -- flink savepoint <job-id> hdfs://your-hdfs-path/savepoints --stop触发成功后,控制台会返回Savepoint的完整路径(类似
hdfs://your-hdfs-path/savepoints/savepoint-xxxxxx-abcdef123456),请保存该路径。
二、基于Savepoint重启应用
停止当前作业(若未用--stop参数):如果触发Savepoint时没有加
--stop,先停止对应的Deployment:kubectl scale deployment <your-flink-app-deployment-name> --replicas=0 # 或者直接删除Deployment(后续重新部署) # kubectl delete deployment <your-flink-app-deployment-name>修改Deployment启动参数:编辑Deployment配置,在Flink启动命令中添加
-s参数指定Savepoint路径:kubectl edit deployment <your-flink-app-deployment-name>找到容器配置的
command或args部分,原启动命令类似:command: ["flink", "run", "-d", "/path/to/your-app.jar"]修改为:
command: ["flink", "run", "-d", "-s", "hdfs://your-savepoint-full-path", "/path/to/your-app.jar"]保存退出后,K8s会自动重新创建Pod,作业将从指定的Savepoint恢复运行。
注意事项:
- Savepoint存储路径需确保Flink集群有读写权限,和Checkpoint的HDFS权限一致即可。
- 若作业并行度等配置有变更,恢复时需保证新配置和Savepoint兼容(比如并行度不能小于原作业的最大并行度)。
内容的提问来源于stack exchange,提问作者deeplay
相关产品推荐
相关产品推荐

