Flink 1.2.1 - 当Flink在容器中运行时如何创建保存点?

时间:2017-10-22 12:30:45

标签: docker containers apache-flink docker-swarm

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

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

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

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

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 获取运行作业管理器的容器的ID: JOBMANAGER_CONTAINER=$(docker ps --filter name=jobmanager --format={{.ID}})
  2. 取消当前作业并创建保存点: docker exec -t -i "$JOBMANAGER_CONTAINER" flink cancel -s [savepointDirectory] <jobID>
  3. 复制创建的保存点的名称。
  4. Scale taskmanager。
  5. 在Web-UI中,再次提交作业,指定新的并行度和上面创建的保存点的路径。
  6. 在Flink提供动态缩放之前,上述过程应该有效。我还没有在Swarm环境中对它进行测试,但它可以通过Docker Compose进行精确测试。