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


最近开始公众号文章也开始同步更新了,对Java、大数据、人工智能、开发运维相关技术分享,文章对您有用的话,辛苦您也关注下公众号,感谢!



使用 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参数也生效

image-1

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 选项卡中查看当前正在运行的作业。

image-2

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

images-3

总结

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

参考资料

  • 官方文档:Flink 集群 Docker 部署:https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/docker/
### FlinkX Docker部署教程和配置说明 #### 1. 准备工作 为了成功在Docker环境中部署FlinkX,需先确保本地已安装并配置好Docker以及docker-compose工具。这一步骤对于后续顺利构建和管理容器化应用至关重要。 #### 2. 获取官方镜像或自定义镜像 可以从Docker Hub获取官方提供的Flink镜像作为基础来创建支持FlinkX功能的定制版本[^1]。如果存在特定需求,则可以基于此进一步修改和完善,形成适合项目使用的个性化镜像。 #### 3. 编写`docker-compose.yml`文件 编写一个合适的`docker-compose.yml`文件用于描述整个集群架构和服务依赖关系。下面是一个简单的例子: ```yaml version: '3' services: jobmanager: image: flink:latest ports: - "8081:8081" command: standalone-job --job-classname com.ververica.flink.example.FlinkXExampleJob environment: FLINK_PROPERTIES: | parallelism.default: 1 taskmanager: image: flink:latest depends_on: - jobmanager command: taskmanager deploy: replicas: 2 ``` 上述配置指定了两个主要组件:一个是作业管理器(JobManager),另一个是任务管理器(TaskManager)[^2]。通过调整参数如端口映射、命令行指令等可满足不同场景下的实际需要。 #### 4. 启动服务 完成以上准备工作之后,在包含`docker-compose.yml`文件所在的目录下执行如下命令启动所有相关联的服务实例: ```bash docker-compose up -d ``` 这条语句会以后台模式启动所有的容器,并保持其持续运行状态直到手动停止它们为止[^3]。 #### 5. 验证部署情况 可以通过多种方式验证当前部署的状态是否正常运作。比如利用`docker ps | grep flink`检查是否有预期中的Flink容器正在活动;借助`netstat -anltp|grep 8081`确认Web UI监听端口已被正确打开;最后还可以尝试访问http://localhost:8081/以直观感受界面展示效果。 #### 6. 日志监控与调试 当遇到问题时,查看日志往往是解决问题的关键途径之一。针对TaskManager的日志输出,可通过以下命令实时跟踪最新记录: ```bash docker logs -f -t --tail 100 flink_taskmanager ``` 这样可以帮助快速定位错误原因并采取相应措施加以修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值