Flink 使用介绍相关文档目录
背景
本篇博客为大家讲解Flink在docker中的部署方式。
基础知识回顾
在本博客,我们使用standalone的方式,在docker中部署Flink集群。
回顾下Flink的启动方式。在传统的物理机或者虚拟机中部署Flink,如果配置了免密和slave节点信息,我们可以使用Flink的start-cluster.sh,一条命令启动整个集群。但是在docker中,我们无法这样操作。在镜像中通常不会安装ssh服务。此外,docker镜像的主进程要求使用前台的方式运行,否则该container会运行完毕退出。Flink的job manager和task manager也需要分别启动。因此我们需要熟悉下Flink中单独启动这些进程的方式。
我们可以运行$FLINK_HOME/bin/jobmanager.sh,或得该命令的帮助信息,如下所示:
Usage: jobmanager.sh ((start|start-foreground) [host] [webui-port])|stop|stop-all
该提示告诉我们,可以使用start-foreground命令以前台方式启用job manager。Task manager和job manager的命令类似,在此不再赘述。
Flink前台启动jm和tm的方法:
$FLINK_HOME/bin/jobmanager.sh start-foreground
$FLINK_HOME/bin/taskmanager.sh start-foreground
Flink的job manager和task manager使用的是同一套配置文件和代码,他们可以使用同一个镜像。启动不同的进程只需要传递不同的启动命令。接下来我们需要为Flink镜像编写一个入口文件。
run.sh:
#!/bin/bash
FLINK_JOB_MANAGER_SH=$FLINK_HOME/bin/jobmanager.sh
FLINK_TASK_MANAGER_SH=$FLINK_HOME/bin/taskmanager.sh
case "$1" in
"jobmanager")
$FLINK_JOB_MANAGER_SH start-foreground
;;
"taskmanager")
$FLINK_TASK_MANAGER_SH start-foreground
;;
*)
echo "COMMAND ERROR"
;;
esac
最后还有一个问题,job manager和task manager分别在两个container中,Task manager是怎样知道job manager的地址的呢?我们可以查看$FLINK_HOME/conf/flink-conf.yaml文件,发现如下配置项:
jobmanager.rpc.address: manager.bigdata
jobmanager.rpc.port: 6123
Task manager正是通过这两个配置,才能成功找到Job manager的。
Flink镜像制作
我们使用centos7作为基础镜像。编写如下的Dockerfile:
FROM centos:centos7
MAINTAINER paul8263
RUN yum install java-1.8.0-openjdk -y
ARG FLINK_VERSION=1.8.1
ARG SCALA_VERSION=2.11
ARG FLINK_TAR_NAME=flink-${FLINK_VERSION}-bin-scala_${SCALA_VERSION}.tgz
ENV FLINK_HOME=/flink-${FLINK_VERSION}
ADD ${FLINK_TAR_NAME} /
COPY run.sh /root/
EXPOSE 8088
VOLUME $FLINK_HOME/conf
ENTRYPOINT ["/root/run.sh"]
使用如下命令构建Flink镜像:
docker build -t paul8263/flink:1.8.1 .
启动和停止Flink
首先需要创建Flink的network:
docker network create flink
然后准备一份Flink的配置文件,解压flink.tar.gz的conf目录到任意文件夹,例如/home/paul8263/flink_docker/conf,修改并保存配置。
启动job manager:
docker run -itd --rm --name flink-jm -h flink-jm -p 10000:8088 -v /home/paul8263/flink_docker/conf:/flink-1.8.1/conf --network flink paul8263/flink:1.8.1 jobmanager
需要注意的是,这里的-h参数指定了job manager这个container的hostname为flink-jm,和flink-conf.yaml配置文件中的jobmanager.rpc.address配置项必须一致。
启动task manager:
docker run -itd --rm --name flink-tm -h flink-tm -v /home/paul8263/flink_docker/conf:/flink-1.8.1/conf --network flink paul8263/flink:1.8.1 taskmanager
验证是否启动成功
执行docker ps -a命令,查看是否存在flink-jm和flink-tm进程。

使用浏览器打开flink的管理页面(ip:10000端口),观察页面是否能打开,task manager数量是否正确。

图中信息告诉我们,有一个task manager启动成功。至此Flink in docker部署完毕。
