Flink 1.2.1 – 当Flink在容器中运行时如何创build一个保存点?

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

我了解Flink中尚未提供Dynamic Sc​​aling。 因此,如果我想增加运行Flink的任务pipe理器的容器数量(向上扩展),我需要创build一个保存点,停止运行的作业,扩展我的任务pipe理器容器,然后恢复工作。

我的问题是:如何创build一个保存点? 该文档假定您正在使用命令行客户端,但我不认为我可以访问它,如果我在容器中运行Flink。 Web UI不允许您创build保存点。 在这种情况下,我该怎么做?

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

非常感谢您的帮助。

我想我可能已经find了我自己的问题的答案。 我会在这里张贴,以防未来有其他人在同一个问题上挣扎。

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

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

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

直到dynamic缩放可用于Flink,上述过程应该工作。 我还没有在Swarm环境中进行testing,但是它使用Docker Compose进行扩展。