【问题标题】:Flink 1.2.1 - How to create a savepoint when Flink is running in containers?Flink 1.2.1 - Flink 在容器中运行时如何创建保存点?
【发布时间】:2025-12-26 04:00:06
【问题描述】:

我在 Docker 上运行 Flink 1.2.1,任务管理器作为 Docker Swarm 的一部分分布在不同的虚拟机上。

我了解动态缩放在 Flink 中尚不可用。因此,如果我想增加运行 Flink 任务管理器的容器数量(纵向扩展),我需要创建一个保存点,停止正在运行的作业,纵向扩展我的任务管理器容器,然后恢复作业。

我的问题是:如何创建保存点?该文档假设您使用的是命令行客户端,但如果我在容器中运行 Flink,我认为我无法访问它。 Web UI 也不允许您创建保存点。在这种情况下,我该怎么办?

我使用 Flink 官方文档作为参考: https://ci.apache.org/projects/flink/flink-docs-release-1.2/setup/cli.html#savepoints

非常感谢您的帮助。

【问题讨论】:

    标签: docker containers apache-flink docker-swarm


    【解决方案1】:

    我想我可能已经找到了自己问题的答案。我会把它贴在这里,以防将来有其他人在同样的问题上苦苦挣扎。

    基本上,我使用“docker exec”命令进入运行 Job Manager 的容器并在该容器中执行命令。

    缩放过程有点复杂,但对我有用的是:

    1. 获取运行 Job Manager 的容器 ID: JOBMANAGER_CONTAINER=$(docker ps --filter name=jobmanager --format={{.ID}})
    2. 取消当前作业并创建保存点: docker exec -t -i "$JOBMANAGER_CONTAINER" flink cancel -s [savepointDirectory] <jobID>
    3. 复制创建的保存点的名称。
    4. 缩放任务管理器。
    5. 在 Web-UI 中,再次提交作业,指定新的并行度和上面创建的保存点的路径。

    在 Flink 可以使用动态缩放之前,上述过程应该可以工作。我还没有在 Swarm 环境中测试过它,但是它可以通过 Docker Compose 很好地扩展。

    【讨论】:

    • 嗨,您在 docker 上使用保存点的方法仍然是这样吗?