Flink handbook - flink 集群与部署之docker篇

作者标注

经过验证, 到当前版本为止 flink-1.7 snapshot,构建 flink docker镜像需要采用这个flink docker 构建工具 https://github.com/docker-flink/docker-flink,按照flink官方代码库里的构建出来的flink镜像有些功能不能用,比如 flink-standalone模式,report metrics等。

Docker设置

Docker Hub上有关于Apache Flink的Docker镜像,可用于部署flink群集。Flink镜像库还包含用于创建容器映像以部署flink工作集群的一些工具以及说明。

Flink会话群集可用于运行多个业务。在部署后,每个业务都需要提交到集群才能跑起来。

Docker镜像

Flink镜像库托管在docker hub,提供了flink1.2.1以及之后的版本镜像。

注意: Docker镜像是由个人提供的社区项目,它们并不是Apache Flink PMC的官方版本(作者标注:所以需要用这个个人的构建工具,而不是官方代码库里的构建工具)。

Flink作业集群

Flink作业集群是运行单个作业的专用集群,这是镜像内容的一部分,因此,不需要额外的工作。

Docker镜像

Flink作业集群镜像需要包含启动集群的作业的用户代码jar。因此,需要为每个作业构建专用的容器镜像。该flink-container模块包含一个build.sh脚本,可用于创建此类镜像。有关详细信息,请参阅说明。(作者注:这个是官方的构建方式,试过有问题,比如跑 flink-standalone再 report metrics)

Flink与Docker Compose

Docker Compose是一种很方便的用于在本地启动一组Flink Docker容器的方式。

GitHub上提供了集群部署实例作业群集示例的配置文件。

用法

启动集群

$docker-compose up

以deamon的方式启动集群

$docker-compose up -d

集群扩展 N 个 TaskManagers

$docker-compose scale taskmanager=<N>

销毁集群

$docker-compose kill

当拉起一个Flink群集后,您可以访问 http:// localhost:8081的Web UI ,在界面里您还可以将作业提交到群集。

如果要通过命令行将作业提交到会话群集,必须将JAR复制到JobManager容器里并从那里执行作业。

例如:

1
2
3
$ JOBMANAGER_CONTAINER=$(docker ps --filter name=jobmanager --format={{.ID}})
$ docker cp path/to/jar "$JOBMANAGER_CONTAINER":/job.jar
$ docker exec -t -i "$JOBMANAGER_CONTAINER" flink run /job.jar