使用 Docker 容器完成 Flink 集群的本地设置(在一台机器上,但在单独的容器中)。
一个Flink Session 集群可用于运行多个作业。每个作业都需要在集群部署完成后提交到集群。要使用 Docker 部署Flink Session 集群,您需要启动一个 JobManager 容器。为了启用容器之间的通信,我们首先设置一个必需的 Flink 配置属性并创建一个网络:
$ FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager"
$ docker network create flink-network
然后我们启动 JobManager:
$ docker run \
--rm \
--name=jobmanager \
--network flink-network \
--publish 8081:8081 \
--env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
flink:1.14.4-scala_2.11 jobmanager
以及一个或多个 TaskManager 容器:
$ docker run \
--rm \
--name=taskmanager \
--network flink-network \
--env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
flink:1.14.4-scala_2.11 taskmanager
Web 界面现在在localhost:8081可用。
现在可以像这样提交作业(假设您有可用的 Flink 本地发行版):
$ ./bin/flink run ./examples/streaming/TopSpeedWindowing.jar
要关闭集群,要么终止(例如CTRL-C
)JobManager 和 TaskManager 进程,要么使用docker ps
标识和docker stop
终止容器。
以及docker-compose.yml
用于Session Cluster:
version: "2.2"
services:
jobmanager:
image: flink:1.14.4-scala_2.11
ports:
- "8081:8081"
command: jobmanager
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager:
image: flink:1.14.4-scala_2.11
depends_on:
- jobmanager
command: taskmanager
scale: 1
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager.numberOfTaskSlots: 2
运行
# 启动
$ docker-compose up -d
# 关闭
$ docker-compose down
本文描述了如何使用 Flink standalone 部署模式在 Kubernetes 上部署 standalone 模式的 Flink 集群。通常我们建议新用户使用 native Kubernetes 部署模式在 Kubernetes上部署 Flink。
并使用 kubectl
命令来创建相应的组件:
# Configuration 和 service 的定义
$ kubectl create -f flink-configuration-configmap.yaml
$ kubectl create -f jobmanager-service.yaml
# 为集群创建 deployment
$ kubectl create -f jobmanager-session-deployment.yaml
$ kubectl create -f taskmanager-session-deployment.yaml
接下来,我们设置端口转发以访问 Flink UI 页面并提交作业:
kubectl port-forward ${flink-jobmanager-pod} 8081:8081
将 jobmanager 的 web ui 端口映射到本地 8081。$ ./bin/flink run -m localhost:8081 ./examples/streaming/TopSpeedWindowing.jar
可以使用以下命令停止运行 flink 集群:
$ kubectl delete -f jobmanager-service.yaml
$ kubectl delete -f flink-configuration-configmap.yaml
$ kubectl delete -f taskmanager-session-deployment.yaml
$ kubectl delete -f jobmanager-session-deployment.yaml