使用Docker配置Flink1.12.2开发测试环境

使用Docker配置Flink1.12开发测试环境

简单介绍

Docker现在是开发界必不可少的工具,我们使用docker能够快速将自己的应用进行测试和打包。同时利用容器我们在软件开发中很容就实现了CI和CD的部署配置。当前Flink的官方的基础镜像都可以从docker hub中下载。不过docker hub在前一段时间对游客进行了限速,所以当你遇到下载速度很慢的时候请先使用docker login登录以后再使用docker pull来拉取镜像文件。

使用Docker的镜像我们可以构建Session模式或者Application模式的Flink集群。下面我将一步步的给大家介绍。

在docker的环境下启动一个Flink session集群

每个session集群可以同时跑多个Flink的任务,当然需要你的资源足够。Flink集群需要先启动才能跑任务。跑一个Flink sesssion的集群,要跑一个 JobManager 的容器和多个 TaskManager 容器。JobManager和TaskManager的通信采用了rpc的方式,但在docker环境下我们首先要创建一个Flink专用的网络,当然,如果是使用docker-compose的话会默认创建。

如果你没有环境,看这里快速 [搭建docker环境](https://blog.csdn.net/lihengzkj/article/details/116136604)
  1. 首先创建Flink自用的网络,当然你也可以不创建使用默认的网络: docker network creat flink-test-network
  2. 使用docker运行一个JobManager:
    docker run -d \
    --name jobnamager \
    --network flink-test-network \
    -- publish 8081:8081
    --env jobmanager.rpc.address=jobmanager \
    flink:1.12.2-scala_2.11-java11 jobmanager
    
  3. 使用docker运行一个taskmanager
    docker run -d \
    --name taskmanager \
    --network flink-test-network \
    --env jobmanager.rpc.address=jobmanager \
    flink:1.12.2-scala_2.11-java11 taskmanager
    
  4. 访问:http://localhost:8081
  5. 测试:通过UI上传Jar包测试,或者通过client端运行测试代码。
  6. 停止集群:
    1. 找出容器的id: docker ps | grep -E "(jobmanager|taskmanager)"
    2. 删除容器:docker rm -f 容器id

部署方式

Flink的镜像包含一个常规它常规的配置和入口脚本。我们可以通过入口脚本来启动Flink集群。

  • JobManager的部署模式有:
    • Seesion集群模式
    • Application集群模式
  • TaskManager适应任何模式

上面两种模式具体有什么区别,请看我的这篇介绍:[Flink1.12.3部署模式介绍](https://blog.csdn.net/lihengzkj/article/details/116474617)

Docker上的Application模式

这种模式下,Flink整个集群就只跑了一个job, 也就是说当集群启动,这个唯一job就启动了。

这种模式需要我们预先把我们实现好的jar包放进image或者container,同时要注意的是要把相应的依赖也要放进来 ,最好的做法就是把所有的依赖统一打成一个包。下面给大家介绍具体的步骤:

本地测试环境
  • 把你的jar包,对于Flink来说叫artifact, 通过mount的方式或者volume的方式放到/opt/flink/artifacts
  • 以Application集群模式启动JobManager
  • 启动一个或者多个TaskManager

在docker的环境下,使用下面的命令可以实现:

  • 首先还是创建专有的网络:
    • docker network creat flink-network
  • 挂载我们的jar包并启动一个jobmanager:[]中的jobid, savepoint, arguments都是可选项,程序需要即可填入
      docker run \
        --mount type=bind,src=/host/path/to/job/xxx1.jar,target=/opt/flink/artifacts/xxx1.jar \
        --mount type=bind,src=/host/path/to/job/xxx2.jar,target=/opt/flink/artifacts/xxx2.jar \
        --rm \
        --env jobmanager.rpc.address=jobmanager \
        --name=jobmanager \
        --network flink-network \
        flink:1.12.2-scala_2.11-java11 standalone-job \
        --job-classname com.job.ClassName \
        [--job-id <job id>] \
        [--fromSavepoint /path/to/savepoint [--allowNonRestoredState]] \
        [job arguments]
    
  • 挂载我们的jar包并启动一个taskmanager:
      docker run \
        --mount type=bind,src=/host/path/to/job/xxx1.jar,target=/opt/flink/artifacts/xxx1.jar \
        --mount type=bind,src=/host/path/to/job/xxx2.jar,target=/opt/flink/artifacts/xxx2.jar \
        --env jobmanager.rpc.address=jobmanager \
        flink:1.12.2-scala_2.11-java11 taskmanager
    
CI测试环境

如果你的开发测试在gitlab上,那么可以使用Dockerfile来自动的创建Flink的jobmanager和taskmanager的本地镜像.

  • 假如我们有一个Java项目的gitlab上,那么在项目根目录上创建Dockerfile。这里需要注意的是,项目的根目录我们通常能够直接使用maven命令来打包。
FROM maven:xxx

RUN mvn clean install/package

FROM flink:1.12.2-scala_2.11-java11

ADD ./target/xxx.jar /opt/flink/artifacts/xxx.jar
  • 打包成镜像: docker build -t flink:local-1.0 .
  • 执行:
    • 还是按照上面的application模式来跑一个jobmanager:
      docker run \
        flink:local-1.0 standalone-job \
        --job-classname com.job.ClassName
    
    • 然后是跑一个taskmanager: docker run flink:local-1.0 taskmanager.

docker-compose 环境使用的session cluster

通常来说我们做测试都需要一个稳定的session cluster环境,下面给大家提供一个docker-compose的环境,只需要在docker-compose下运行就会启动给一个Jobmanager一个taskmanager的集群,当然你可以在yaml文件中复制多个taskmanager,只要你的资源够用。

version: "3.8"
services:
  flink:
    image: flink:1.12.2-scala_2.11-java11
    restart: unless-stopped
    command: jobmanager
    environment:
      JOB_MANAGER_RPC_ADDRESS: flink
      FLINK_PROPERTIES: |
        cluster.evenly-spread-out-slots: true
        restart-strategy: failure-rate
        restart-strategy.failure-rate.delay: 10 s
        restart-strategy.failure-rate.failure-rate-interval: 10
        restart-strategy.failure-rate.max-failures-per-interval: 2
    ports: [8081:8081]
    volumes:
      - /opt/flink/log
      - /tmp
      
  flink-worker:
    image: flink:1.12.2-scala_2.11-java11
    restart: unless-stopped
    command: taskmanager
    environment:
      JOB_MANAGER_RPC_ADDRESS: flink
    depends_on: [flink]
    volumes:
      - /opt/flink/log
      - /tmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值