Docker部署常见应用之大数据实时计算引擎Flink

文章目录

    • [Flink 简介](#Flink 简介)
    • [Docker 部署](#Docker 部署)
    • [Docker Compose 部署](#Docker Compose 部署)
    • 参考文章

Apache Flink 是一个开源的分布式流批一体化的计算框架,它提供了一个流计算引擎,能够处理有界和无界的数据流。Flink 的核心优势在于其高吞吐量、低延迟的处理能力,以及强大的状态管理和容错机制。它支持事件驱动的应用和复杂的事件处理(CEP),并且可以处理批处理任务。Flink 的设计目标是提供一个易于使用、灵活且高性能的数据处理平台。

Flink 的一些关键特性包括:

  • 高吞吐量和低延迟:能够处理大规模的数据流,同时保持毫秒级的处理延迟。
  • 状态管理和容错:提供了强大的状态管理功能,允许在发生故障时从检查点或保存点恢复作业。
  • 事件时间处理:支持基于事件时间的数据处理,可以处理乱序事件和长时间运行的计算。
  • CEP(复杂事件处理):可以识别和处理复杂的事件模式,这对于监控和警报等应用非常有用。
  • 批流一体:统一了批处理和流处理,使得开发人员可以使用相同的 API 来编写批处理和流处理作业。
  • 可伸缩性:可以在小型集群到大型集群中运行,支持水平伸缩以适应不同的负载需求。
  • 生态系统:拥有丰富的连接器和库,可以与各种数据源和数据存储系统集成。
  • 多语言支持:提供了 Java 和 Scala API,并且通过 DataStream API 支持 Python 和其他语言的集成。

在 Docker 中部署 Flink 是一种流行的实践,因为它简化了环境的配置和管理工作。以下是使用 Docker 部署 Flink 的基本步骤:

Docker 部署

  1. 安装 Docker:确保你的系统上已经安装了 Docker,可以从 Docker 官网下载并安装。

  2. 创建 Docker 网络:为了使 Flink 组件能够相互通信,需要创建一个 Docker 网络。

    sh 复制代码
    docker network create flink-network
  3. 拉取 Flink 镜像:从 Docker Hub 拉取官方的 Flink 镜像。

    sh 复制代码
    docker pull flink:1.15.0-scala_2.12-java8
  4. 启动 Flink 组件:使用 Docker 命令启动 Flink 的 JobManager 和 TaskManager 组件,并加入到创建的网络中。

    sh 复制代码
    docker run -d -p 8081:8081 --name flink-jobmanager --network flink-network --env FLINK_PROPERTIES="jobmanager.rpc.address: flink-jobmanager" flink:1.15.0-scala_2.12-java8 jobmanager
    docker run -d --name flink-taskmanager --network flink-network --env FLINK_PROPERTIES="jobmanager.rpc.address: flink-jobmanager" flink:1.15.0-scala_2.12-java8 taskmanager
  5. 访问 Flink Web UI :通过浏览器访问 http://<host>:8081 来查看 Flink 的 Web UI 界面,其中 <host> 是运行 JobManager 的 Docker 主机的地址。

  6. 提交 Flink 作业:可以通过 Flink 的命令行工具或者 Web UI 提交作业到集群运行。

  7. 管理 Flink 集群:可以通过 Docker 的命令来管理 Flink 容器的生命周期,如停止、删除等。

Docker Compose 部署

  1. Docker Compose文件定义 :

    为了方便管理, 将上述的 docker run 命令转换为 docker-compose.yml 文件, 同时增加 sql-client服务。

    yml 复制代码
    version: '3'  # 你可以根据需要选择合适的版本
     	services:
     	  jobmanager:
     	    image: flink:1.15.0-scala_2.12-java8
     	    container_name: flink-jobmanager
     	    ports:
     	      - "8081:8081"
     	    environment:
     	      - |
     	        FLINK_PROPERTIES=
     	        jobmanager.rpc.address: jobmanager
     	    command: jobmanager
     	    networks:
     	      - flink-network
     	
     	  taskmanager:
     	    image: flink:1.15.0-scala_2.12-java8
     	    container_name: flink-taskmanager
     	    environment:
     	       - |
     	        FLINK_PROPERTIES=
     	        jobmanager.rpc.address: jobmanager
     	        taskmanager.numberOfTaskSlots: 2
     	    command: taskmanager
     	    depends_on:
     	      - jobmanager
     	    networks:
     	      - flink-network
     	  sql-client:
     	    image: flink:1.15.0-scala_2.12-java8
     	    container_name: flink-sql-client
     	    environment:
     	       - |
     	        FLINK_PROPERTIES=
     	        jobmanager.rpc.address: jobmanager
     	    command: bin/sql-client.sh
     	    depends_on:
     	      - jobmanager
     	    networks:
     	      - flink-network
     	
     	networks:
     	  flink-network:
     	    driver: bridge

    这个 docker-compose.yml 文件定义了三个服务:jobmanagertaskmanagersql-client。每个服务都使用 flink:1.15.0-scala_2.12-java8 镜像,并设置了相应的环境变量和命令来启动 Flink 的相应组件。

    请注意以下几点:

    • container_name 指定了容器的名称。
    • ports 映射了容器端口到宿主机端口。
    • environment 设置了容器的环境变量。
    • command 指定了容器启动时执行的命令。
    • depends_on 确保了 taskmanagerjobmanager 之后启动。
    • networks 定义了一个名为 flink-network 的网络,所有服务都在这个网络上。

    在使用 docker-compose.yml 文件之前,请确保你已经安装了 Docker 和 Docker Compose,并且已经创建了 flink-network 网络(如果尚未创建,Docker Compose 将自动创建它)。

  2. 启动Flink集群

    要启动 Flink 集群,你需要在包含 docker-compose.yml 文件的目录中运行以下命令:

    sh 复制代码
    docker-compose up -d

    -d 参数表示在后台运行服务。

  3. 运行Flink-SQL客户端:

    sh 复制代码
    docker-compose run sql-client

    进入flink sql客户端, 可以创建表并进行相关查询。

  4. 停止Flink集群

    要停止服务并移除容器,你可以使用:

    sh 复制代码
    docker-compose down

参考文章

Apache Flink Documentation | Apache Flink
Flink SQL Client with Session Cluste
Docker | Apache Flink
聊聊Flink:Docker搭建Flink

相关推荐
lcx_defender3 分钟前
【Docker】部署MySQL容器
mysql·docker·容器
登高·4 分钟前
Docker pull images Error
运维·docker·容器
Zhijun.li@Studio1 小时前
使用 Conda 环境创建 Docker 镜像的完整指南
docker·容器·conda
罗狮粉 994 小时前
docker部署微信小程序自动构建发布和更新
docker·微信小程序·notepad++
旺仔学IT4 小时前
CentOS上安装和卸载Docker
docker·centos
前端_库日天5 小时前
部署自己的git托管平台
git·ubuntu·docker
西西弗Sisyphus5 小时前
RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 在 Ubuntu 上安装 Docker Engine
docker·大模型·rag
@泽栖11 小时前
Docker 常用命令
运维·服务器·docker
core51212 小时前
flink sink doris
大数据·mysql·flink·doris·存储·sink·过程正常
鲁正杰13 小时前
在一个服务器上抓取 Docker 镜像并在另一个服务器上运行
运维·服务器·docker