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

文摘   2024-09-21 08:47   辽宁  
关注下方公众号,获取更多热点资讯

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

应用场景

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

  1. 1. 快速本地开发与测试

  • • 场景: 开发者在本地环境中测试 Flink 作业或应用时,不需要配置复杂的集群环境。

  • • 优势: Docker 可以快速搭建完整的 Flink 环境,包括 JobManager 和 TaskManager,无需手动安装或配置依赖。

  1. 1. 分布式计算的调试与调优

  • • 场景: 需要对 Flink 的分布式计算特性进行调试或性能调优。

  • • 优势: 通过 Docker,开发者可以模拟集群环境下的分布式任务执行,调整并行度、任务槽(task slots)等配置以优化性能。

  1. 1. 集群环境的一键部署

  • • 场景: 需要快速部署一个可用的 Flink 集群用于演示或实验。

  • • 优势: 使用 Docker Compose 可以轻松启动包含多个 TaskManager 和 JobManager 的 Flink 集群,适合进行短期测试或实验。

  1. 1. 持续集成/持续部署(CI/CD)

  • • 场景: 在自动化的 CI/CD 流程中运行 Flink 作业进行测试或验证。

  • • 优势: Docker 容器化的 Flink 环境可以嵌入到 CI/CD 管道中,实现 Flink 作业的自动化测试和部署。

  1. 1. 简化的依赖管理

  • • 场景: 在不同环境中运行 Flink 时,存在 JDK、Scala 或其他依赖的版本冲突。

  • • 优势: 使用 Docker 可以打包所有所需依赖,确保不同环境下的一致性,避免版本冲突问题。

  1. 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参数也生效

4. 参数说明

服务名称配置项说明
jobmanagerimage使用指定版本的 Flink 镜像启动容器

hostname设置容器主机名为 jobmanager

container_name容器名称为 jobmanager

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

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

command指定启动 jobmanager 服务
taskmanagerimage使用相同的 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 选项卡中查看当前正在运行的作业。

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

总结

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

参考资料

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


  • 欢迎关注我的公众号“编程与架构”,原创技术文章第一时间推送。



编程与架构
专注于Java、大数据、AI以及开发运维技术的深入探索与分享。作为一名开源爱好者,致力于分享实战经验和前沿技术动态,帮助更多技术人提升技能。
 最新文章