Flink DockerCompose部署

1,790 阅读3分钟

在centos7上安装Flink Job和TaskManager。

JobManager:

docker-compose:

version: "3.9"
services:
  jobmanager:
    image: flink:1.16.0-scala_2.12
    container_name: jobmanager
    command: jobmanager
    privileged: true
    ports:
      - "8081:8081"
      - "6123:6123"
      - "6122:6122"
    environment:
      - TZ=Asia/Shanghai
      - ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.16.0.jar
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mnt/jobmanager/conf/flink-conf.yaml:/opt/flink/conf/flink-conf.yaml
      - /mnt/jobmanager/log:/opt/flink/log:rw
      - /mnt/jobmanager/usrlib:/opt/flink/lib/usrlib:rw
      - /mnt/jobmanager/plugins:/opt/flink/plugins:rw
      - /mnt/jobmanager/user-upload-temp:/opt/flink/user-upload-temp:rw
    networks:
      - frontend
      - backend
networks:
  frontend:
  backend:

以上/mnt下的文件夹最好先创建好,然后给设置一下权限,我感觉直接最高权限就好了,这样确实是比较方便。

  • /etc/localtime:是为了时间可以和主机统一

  • /mnt/jobmanager/conf/flink-conf.yaml:配置文件

  • /mnt/jobmanager/log:日志

  • /mnt/jobmanager/usrlib:我们的第三方jar包

  • /mnt/jobmanager/plugins:第三方插件

  • /mnt/jobmanager/user-upload-temp:你上传的包

以下自定义flink-conf.yaml配置信息,当然这里十分建议先启动一下jobmanager,然后使用docker cp jobmanager:/opt/flink/conf/flink-conf.yaml /mnt/jobmanager/conf/flink-conf.yaml把原始文件复制出来,仔细地品尝一下,然后再根据的自己的实际情况进行修改:

# jobmanager地址,默认是localhost。这个地方你得填集群中所有节点可以访问的地址。
jobmanager.rpc.address: 192.168.1.11
# jobmanager端口号
jobmanager.rpc.port: 6123

# 一些大文件传输使用rpc传输不过来,此时就使用这个
blob.server.port: 6122
# 详情https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/deployment/memory/mem_setup_jobmanager/
# 这个是jobmanager运行时总内存。我的服务器太小了。
jobmanager.memory.process.size: 1024m
# metaspace元空间
jobmanager.memory.jvm-metaspace.size: 256m

# 默认并行度
parallelism.default: 1

akka.ask.timeout: 480s
heartbeat.timeout: 480000

# 状态后端,哥们没hadoop集群,直接用minio作为状态后端持久化了。
state.backend: filesystem
# checkpoints的地址
state.checkpoints.dir: s3://flink-backend/checkpoints/
# savepoints的地址
state.savepoints.dir: s3://flink-backend/savepoints/
# checkpoints基本间隔设置。
execution.checkpointing.interval: 500

# 允许通过Flink UI上传和启动作业(默认为 true)
web.submit.enable: true
# 允许通过Flink UI 取消作业(默认为 true)。
web.cancel.enable: true
# 存储上传作业的目录。
web.upload.dir: /opt/flink/user-upload-temp

# s3相关的东西,minio自己先安装好,桶权限设置好
s3.endpoint: http://192.168.116.11:9000
s3.path.style.access: true
s3.access-key: minio
s3.secret-key: xxxxxxmima

jobmanager.execution.failover-strategy: region

然后docker-compose up jobmanager

TaskManager

docker-compose:

version: "3.9"
services:
  taskmanager:
    image: flink:1.16.0-scala_2.12
    container_name: taskmanager
    command: taskmanager
    depends_on:
        - jobmanager
    ports:
      - "6124:6124"
      - "6125:6125"
      - "6126:6126"
    privileged: true
    environment:
      - TZ=Asia/Shanghai
      - ENABLE_BUILT_IN_PLUGINS=flink-s3-fs-hadoop-1.16.0.jar
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /mnt/taskmanager/conf/flink-conf.yaml:/opt/flink/conf/flink-conf.yaml
      - /mnt/taskmanager/log:/opt/flink/log:rw
      - /mnt/taskmanager/usrlib:/opt/flink/lib/usrlib:rw
      - /mnt/taskmanager/plugins:/opt/flink/plugins:rw
      - /mnt/taskmanager/user-upload-temp:/opt/flink/user-upload-temp:rw
    networks:
      - frontend
      - backend
networks:
  frontend:
  backend:

以上/mnt下的文件夹最好先创建好,然后给设置一下权限,我感觉直接最高权限就好了,这样确实是比较方便。

  • /etc/localtime:是为了时间可以和主机统一

  • /mnt/jobmanager/conf/flink-conf.yaml:配置文件

  • /mnt/jobmanager/log:日志

  • /mnt/jobmanager/usrlib:我们的第三方jar包

  • /mnt/jobmanager/plugins:第三方插件

  • /mnt/jobmanager/user-upload-temp:你上传的包

以下自定义flink-conf.yaml配置信息,当然这里十分建议先启动一下taskmanager,然后使用docker cp taskmanager:/opt/flink/conf/flink-conf.yaml /mnt/taskmanager/conf/flink-conf.yaml把原始文件复制出来,仔细地品尝一下,然后再根据的自己的实际情况进行修改:

# jobmanager的地址
# 如果jobmanager和taskmanager不在一台主机上,呢就要填写IP地址了
jobmanager.rpc.address: 192.168.1.11
# jobmanager端口号
jobmanager.rpc.port: 6123

# 这里写死taskmanager.host,这个地方你得填集群中所有节点可以访问的地址。
taskmanager.host: 192.168.1.11
#数据端口为6124
taskmanager.data.port: 6124
#RPC端口为6125
taskmanager.rpc.port: 6125

metrics.internal.query-service.port: 6126,6126

# 详情https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/deployment/memory/mem_setup_tm/

# 这个是taskmanager运行时总内存
taskmanager.memory.process.size: 1024m
# metaspace元空间
taskmanager.memory.jvm-metaspace.size: 256m
taskmanager.memory.managed.fraction: 0.05
# 默认并行度
parallelism.default: 1
# 插槽数量
taskmanager.numberOfTaskSlots: 4

akka.ask.timeout: 480s
heartbeat.timeout: 480000

# 状态后端
state.backend: filesystem
# checkpoints的地址
state.checkpoints.dir: s3://flink-backend/checkpoints/
# savepoints的地址
state.savepoints.dir: s3://flink-backend/savepoints/
# checkpoints基本间隔设置
execution.checkpointing.interval: 500

# s3相关的东西
s3.endpoint: http://192.168.116.11:9000
s3.path.style.access: true
s3.access-key: minio
s3.secret-key: xxxxxxmima

jobmanager.execution.failover-strategy: region

然后docker-compose up taskmanager

minio

minio有需要的也可以复制一下,很简单。

version: "3.9"
services:
  minio: 
    image: bitnami/minio:2023.2.27
    container_name: minio
    privileged: true
    restart: always
    ports:
      - '9000:9000'
      - '9001:9001'
    volumes:
      - /mnt/minio/data:/data
    environment:
      - MINIO_ROOT_USER=minio
      - MINIO_ROOT_PASSWORD=xxxxxxmima
    networks:
      - frontend
      - backend
networks:
  frontend:
  backend:

大功告成

浏览器访问 http://192.168.116.11:8081