docker 部署Flink和传统部署

简单介绍

Flink 是一个开源的、分布式的、高性能的流处理框架,主要特性有:状态管理与容错,事件时间与水位线,先进的窗口模型,轻量级的分布式快照,端到端的精确一次交付,流批一体与统一的 API,复杂的流处理拓扑与高级 API(侧输出,CEP:复杂事件处理库,Table API & SQL)等

下载地址: https://mirrors.aliyun.com/apache/flink/ z根据需求选版本

下载安装包

bash 复制代码
https://mirrors.aliyun.com/apache/flink/flink-1.20.3/flink-1.20.3-bin-scala_2.12.tgz

解压

bash 复制代码
tra -zxf flink-1.20.3-bin-scala_2.12.tgz

修改配置文件

bash 复制代码
jobmanager.rpc.address: master
jobmanager.rpc.port: 6123
jobmanager.bind-host: 0.0.0.0
jobmanager.memory.process.size: 1600m
taskmanager.bind-host: 0.0.0.0
taskmanager.host: master
taskmanager.memory.process.size: 1728m
taskmanager.numberOfTaskSlots: 2
parallelism.default: 2
jobmanager.execution.failover-strategy: region
rest.address: localhost
rest.bind-address: 0.0.0.0

启动

bash 复制代码
bin/start-cluster.sh

登录首页: http://192.168.115.102:8081

Docker Run

拉取镜像

bash 复制代码
x86架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink
arm架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_flink
  1. 创建网络
bash 复制代码
docker network create flink-network
  1. 启动JobManager
bash 复制代码
docker run -d \
  --name=flink-jobmanager \
  --network=flink-network \
  -p 8081:8081 \
  -e FLINK_PROPERTIES="jobmanager.rpc.address: flink-jobmanager" \
  -v /data/flink:/opt/flink/data \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink \
  jobmanager
  1. 启动TaskManager
bash 复制代码
docker run -d \
  --name=flink-taskmanager \
  --network=flink-network \
  -e FLINK_PROPERTIES="jobmanager.rpc.address: flink-jobmanager" \
  -v /data/flink:/opt/flink/data \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink \
  taskmanager

带依赖的完整版本

docker-compose-full.yml

bash 复制代码
version: "3.8"
services:
  jobmanager:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink
    container_name: jobmanager
    ports:
      - "8081:8081"
      - "6123:6123"
    command: jobmanager
    environment:
      - FLINK_PROPERTIES=jobmanager.rpc.address: jobmanager
    volumes:
      - ./data/jobmanager:/opt/flink/data
      - ./logs/jobmanager:/opt/flink/log
      - ./apps:/opt/flink/apps
    networks:
      - flink-network

  taskmanager:
    image: flink:1.17.2
    container_name: taskmanager
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 2
    environment:
      - FLINK_PROPERTIES=jobmanager.rpc.address: jobmanager
      - TASK_MANAGER_NUMBER_OF_TASK_SLOTS=4
    volumes:
      - ./data/taskmanager:/opt/flink/data
      - ./logs/taskmanager:/opt/flink/log
      - ./apps:/opt/flink/apps
    networks:
      - flink-network

  zookeeper:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/zookeeper
    container_name: zookeeper
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
    ports:
      - "2181:2181"
    networks:
      - flink-network

  kafka:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/kafka
    container_name: kafka
    depends_on:
      - zookeeper
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
      - ALLOW_PLAINTEXT_LISTENER=yes
    ports:
      - "9092:9092"
    networks:
      - flink-network

networks:
  flink-network:
    driver: bridge

volumes:
  flink-data:

使用SQL Client的完整环境

docker-compose-sql.yml

bash 复制代码
version: "3.8"
services:
  jobmanager:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink
    container_name: flink-jobmanager
    ports:
      - "8081:8081"
      - "6123:6123"
    command: jobmanager
    environment:
      - FLINK_PROPERTIES=
          jobmanager.rpc.address: jobmanager
          taskmanager.numberOfTaskSlots: 4
          parallelism.default: 2
    volumes:
      - ./data/jobmanager:/opt/flink/data
      - ./logs/jobmanager:/opt/flink/log
    networks:
      - flink-network

  taskmanager:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink
    container_name: flink-taskmanager
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 2
    environment:
      - FLINK_PROPERTIES=
          jobmanager.rpc.address: jobmanager
          taskmanager.numberOfTaskSlots: 4
          parallelism.default: 2
    volumes:
      - ./data/taskmanager:/opt/flink/data
      - ./logs/taskmanager:/opt/flink/log
    networks:
      - flink-network

  sql-client:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/flink
    container_name: flink-sql-client
    depends_on:
      - jobmanager
    command: |
      bash -c "
      echo 'Waiting for Flink cluster to be ready...'
      while ! nc -z jobmanager 8081; do
        sleep 1
      done
      echo 'Starting SQL Client...'
      ./bin/sql-client.sh"
    volumes:
      - ./sql-scripts:/opt/flink/sql-scripts
    networks:
      - flink-network
    tty: true
    stdin_open: true

networks:
  flink-network:
    driver: bridge
相关推荐
csdn_aspnet1 小时前
macOS 10 、Docker 玩轉 MySQL
运维·mysql·macos·docker·容器·mac
对象存储与RustFS2 小时前
Jenkins 的构建产物别堆在控制器磁盘:用 RustFS 当它的 S3 工件仓库
后端·docker·云原生
java_logo19 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
xbzb20 小时前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
打工仔折腾 AI1 天前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
xbzb1 天前
自建镜像仓库:registry 一条命令 + harbor 部署、授权、跨库同步与卸载
docker·harbor·镜像·仓库·同步·registry
wz97542 天前
Docker 从 systemd 托管容器、overlay2 存储驱动到 Compose 多容器实战
spring cloud·docker·eureka
新*2 天前
ES 7.17 三节点 Docker 集群接入 IK 自定义词典:一次从丢插件到热更新的完整排障
运维·elasticsearch·docker·中文分词·ik分词
小白的码BUG之路2 天前
Jenkins -- gitee+docker+harbor+k8s 部署项目
docker·gitee·jenkins
AlfredZhao2 天前
Docker Compose 平滑切换环境变量文件,容器配置不残留
docker