文章目录

  • 使用 Docker 搭建 Flink 集群教程
  • 应用场景
  • 环境准备
  • 拉取Flink镜像
  • 启动 Flink 集群
  • 1. 创建工作目录
  • 2. 创建 Docker Compose 文件
  • 3. 启动 Flink 集群
  • 4. 参数说明
  • 运行 Flink 程序
  • 1. 准备测试程序
  • 2. 运行测试程序
  • 总结
  • 参考资料



关注下公众号,感谢!




Docker中部署Flink:快速部署调试各版本_flink




使用 Docker 搭建 Flink 集群教程

应用场景

Flink 在 Docker 中的应用场景主要是为了简化集群的部署和管理,特别是在开发、测试以及小规模生产环境中。使用 Docker 可以快速启动、停止和重启集群,避免手动配置和依赖管理的复杂性。以下是一些具体的应用场景和适合使用 Docker 的情况:

  1. 快速本地开发与测试
  • 场景: 开发者在本地环境中测试 Flink 作业或应用时,不需要配置复杂的集群环境。
  • 优势: Docker 可以快速搭建完整的 Flink 环境,包括 JobManager 和 TaskManager,无需手动安装或配置依赖。
  1. 分布式计算的调试与调优
  • 场景: 需要对 Flink 的分布式计算特性进行调试或性能调优。
  • 优势: 通过 Docker,开发者可以模拟集群环境下的分布式任务执行,调整并行度、任务槽(task slots)等配置以优化性能。
  1. 集群环境的一键部署
  • 场景: 需要快速部署一个可用的 Flink 集群用于演示或实验。
  • 优势: 使用 Docker Compose 可以轻松启动包含多个 TaskManager 和 JobManager 的 Flink 集群,适合进行短期测试或实验。
  1. 持续集成/持续部署(CI/CD)
  • 场景: 在自动化的 CI/CD 流程中运行 Flink 作业进行测试或验证。
  • 优势: Docker 容器化的 Flink 环境可以嵌入到 CI/CD 管道中,实现 Flink 作业的自动化测试和部署。
  1. 简化的依赖管理
  • 场景: 在不同环境中运行 Flink 时,存在 JDK、Scala 或其他依赖的版本冲突。
  • 优势: 使用 Docker 可以打包所有所需依赖,确保不同环境下的一致性,避免版本冲突问题。
  1. 临时或小规模生产环境
  • 场景: 临时项目或小规模的生产环境中,要求快速搭建并处理流数据任务。
  • 优势: Docker 提供的轻量化隔离环境,可以满足这些需求,而无需部署复杂的大规模集群。

环境准备

在开始之前,确保你拥有以下版本的工具:

  • Flink:1.16.3
  • Scala:2.12
  • JDK:1.8
  • Docker:已安装

拉取Flink镜像

首先,使用以下命令从 Docker Hub 拉取指定版本的 Flink 镜像:

docker pull flink:1.16.3-scala_2.12-java8

如果由于网络问题无法拉取该镜像,可以使用阿里云的加速镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/images-speed-up/flink:1.16.3-scala_2.12-java8

提示: 不同版本的镜像可以在 [Docker Hub] https://hub.docker.com/_/flink/tags?page_size=&ordering=&name=1.16.3 上进行查找。

启动 Flink 集群

1. 创建工作目录

首先,创建一个目录用于存放 Flink 集群的相关文件:

mkdir ~/flink && cd ~/flink

2. 创建 Docker Compose 文件

在该目录下创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3'

services:
  jobmanager:
    image: flink:1.16.3-scala_2.12-java8
    hostname: jobmanager
    container_name: jobmanager
    ports:
      - "8081:8081"
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        parallelism.default: 1
    command: jobmanager

  taskmanager:
    image: flink:1.16.3-scala_2.12-java8
    hostname: taskmanager
    container_name: taskmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 2
        parallelism.default: 1
    depends_on:
      - jobmanager
    command: taskmanager

3. 启动 Flink 集群

通过以下命令启动 Flink 集群:

docker-compose up -d

等待容器启动后,你可以通过访问 http://localhost:8081 来打开 Flink 的 Web 界面,以检查集群是否成功启动。

同时也可以看到我们上面设置的配置slot参数也生效

Docker中部署Flink:快速部署调试各版本_Docker_02

4. 参数说明

服务名称

配置项

说明

jobmanager

image

使用指定版本的 Flink 镜像启动容器

hostname

设置容器主机名为 jobmanager

container_name

容器名称为 jobmanager

ports

将容器的 8081 端口映射到宿主机的 8081 端口

environment

设置环境变量,配置 Flink 的属性,包括 jobmanager 的 RPC 地址和默认并行度

command

指定启动 jobmanager 服务

taskmanager

image

使用相同的 Flink 镜像启动容器

hostname

设置容器主机名为 taskmanager

container_name

容器名称为 taskmanager

environment

设置环境变量,包括 TaskManager 的 Task Slots 数量和默认并行度

depends_on

依赖于 jobmanager 服务,确保先启动 jobmanager

command

启动 taskmanager 服务

运行 Flink 程序

1. 准备测试程序

测试程序包括以下文件:

  • flink-docker-1.0.jar:用于循环统计单词数量的测试代码。
  • lib/:依赖的外部库文件。
  • start.sh:启动脚本。

将这些文件复制到 jobmanager 容器中:

docker cp flink-docker-1.0.jar jobmanager:/flink-docker-1.0.jar
docker cp lib/ jobmanager:/flink-docker-lib/
docker cp start.sh jobmanager:/start.sh

可以通过以下命令查看文件是否成功复制:

docker exec jobmanager ls /

2. 运行测试程序

jobmanager 容器中执行以下命令,运行测试程序:

docker exec -it jobmanager bash /start.sh

你可以通过 Flink 的 Web UI 监控作业的执行情况,访问 http://localhost:8081,在 Running Jobs 选项卡中查看当前正在运行的作业。

Docker中部署Flink:快速部署调试各版本_容器_03

提示: 对于简单任务,Flink 的 Web UI 提交任务也是一个便捷选择。

Docker中部署Flink:快速部署调试各版本_容器_04

总结

通过本文介绍的步骤,你可以快速搭建并运行一个基于 Docker 的 Flink 集群。接下来,你可以根据需要调整 TaskManager 的数量、任务并行度等配置,以满足实际应用需求。

参考资料

  • 官方文档:Flink 集群 Docker 部署:https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/docker/