Flink 2.x 独立集群(Standalone) 的部署

Apache Flink 2.x 独立集群(Standalone Cluster) 的部署是一种不依赖外部资源管理器(如 YARN 或 Kubernetes)的经典部署模式,非常适合中小规模生产环境、测试和概念验证。


一、 Standalone 集群架构剖析

1. 核心组件

一个 Flink Standalone 集群由两种进程组成,形成一种主从(Master-Worker)架构:

  • JobManager (主节点/Master):

    • 职责: 集群的"大脑"。负责接收提交的作业(Job),调度任务(Task),协调检查点(Checkpoint),故障恢复等。

    • 高可用(HA)模式 : 通常需要部署多个 JobManager,其中一个为 Leader (活跃状态),其他为 Standby (备用状态)。通过 ZooKeeper 进行领导者选举和元数据存储,实现故障自动切换。

    • 关键进程StandaloneSessionClusterEntrypoint

  • TaskManager (工作节点/Worker):

    • 职责 : 集群的"肌肉"。负责执行 JobManager 分配的具体数据任务(Task)。每个 TaskManager 是一个独立的 JVM 进程,提供一定数量的任务槽(Task Slot)

    • 任务槽: 是 Flink 资源调度的基本单位。一个 Slot 可以执行一个任务子任务(Subtask)。一个 TaskManager 的多个 Slot 共享该节点的网络和内存资源,但彼此隔离。

    • 关键进程TaskManagerRunner

2. 高可用实现原理

Standalone 模式的高可用性严重依赖外部系统:

  • ZooKeeper : 用于在所有 JobManager 实例之间进行分布式协调领导者选举。当活跃的 JobManager 宕机时,ZooKeeper 会通知备用的 JobManager,使其迅速接管领导权。

  • 分布式文件系统(HDFS/S3/OSS等) : 用于持久化存储元数据检查点(Checkpoint)/保存点(Savepoint) 数据。新的 JobManager 在接管后,可以从这里恢复作业状态。

3. 架构拓扑图

图表

代码

渲染失败

如图所示,客户端向主 JobManager 提交作业,JobManager 将任务分配给各个 TaskManager 执行。同时,主 JobManager 通过 ZooKeeper 与其他备用 JobManager 保持协调,并将关键的元数据和状态快照持久化到共享存储中。


二、 独立集群部署与配置详解

1. 前置准备
  • 机器规划

    • 1台 Master 主机: 运行 JobManager(生产环境建议至少2台,一主一备)。

    • N台 Worker 主机: 运行 TaskManager。

    • (可选)3台主机: 用于 ZooKeeper 集群(也可部署在 Master/Worker 机器上,测试环境可用1台)。

  • 软件依赖

    • Java : 在所有节点安装 JDK 8 或 JDK 11,并配置 JAVA_HOME

    • SSH 免密登录: 从 Master 节点到所有 Worker 节点需配置 SSH 免密登录,以便通过脚本启动服务。

    • Flink 安装包 : 在所有节点相同路径下解压 Flink 2.x 发行版(如 flink-2.1.0-bin-scala_2.12.tgz)。

2. 关键配置文件

conf/flink-conf.yaml (主配置文件的详细剖析)

yaml

复制代码
# ========== 基础配置 ==========
# JobManager 的 RPC 地址,使用主机名或IP(重要!)
jobmanager.rpc.address: flink-master
# JobManager 堆内存大小 (生产环境建议 1G-4G)
jobmanager.memory.heap.size: 1024m
# TaskManager 堆内存大小 (生产环境根据任务需求调整,建议至少 2G)
taskmanager.memory.heap.size: 2048m
# 每个 TaskManager 提供的任务槽数 (建议设置为机器的 CPU 核心数)
taskmanager.numberOfTaskSlots: 4
# 作业的默认并行度
parallelism.default: 4

# ========== 高可用配置 (核心!) ==========
# 启用高可用模式
high-availability: zookeeper
# ZooKeeper 集群地址
high-availability.zookeeper.quorum: zk-node1:2181,zk-node2:2181,zk-node3:2181
# Flink 在 ZooKeeper 中的根路径,用于隔离不同集群
high-availability.zookeeper.path.root: /flink
# 集群ID,用于区分不同Flink集群。Standalone模式通常设为固定值。
high-availability.cluster-id: /my-standalone-cluster
# JobManager 元数据和检查点数据在分布式存储上的持久化路径
high-availability.storageDir: hdfs:///flink/recovery/

# ========== 状态后端与检查点配置 ==========
# 状态后端类型 (RocksDB 适用于大状态场景)
state.backend: rocksdb
# 检查点存储位置(与HA存储路径可相同也可不同)
state.checkpoints.dir: hdfs:///flink/checkpoints/
# 每 60秒 触发一次检查点
execution.checkpointing.interval: 60s
# 检查点超时时间
execution.checkpointing.timeout: 5min
# 启用增量检查点 (RocksDB专用,大幅减少CK耗时和大小)
state.backend.incremental: true

# ========== Web UI 配置 ==========
# REST API 端口,用于提交作业和监控
rest.port: 8081
# (可选)绑定地址,如果需要外部访问可设为 0.0.0.0
rest.bind-address: 0.0.0.0

conf/masters (指定所有 JobManager 主机和 Web UI 端口)

text

复制代码
flink-master:8081
flink-master-backup:8081

conf/workers (指定所有 TaskManager 主机)

text

复制代码
flink-worker-01
flink-worker-02
flink-worker-03

conf/zoo.cfg (如果自建 ZK 集群,需配置)

text

复制代码
server.1=zk-node1:2888:3888
server.2=zk-node2:2888:3888
server.3=zk-node3:2888:3888
3. 部署与启动步骤
  1. 分发配置 : 将配置好的 flink-conf.yaml, masters, workers 文件分发到所有节点的 Flink 目录下的 conf/ 中。

  2. 启动 ZooKeeper 集群(如果尚未启动)。

  3. 启动 HDFS 集群(如果尚未启动)。

  4. 启动 Flink 集群: 在 Master 节点上执行:

    bash

    复制代码
    # 进入到 Flink 安装目录
    cd /opt/flink-2.1.0
    # 使用内置脚本启动整个集群(会自动通过SSH启动workers文件中的TaskManager)
    bin/start-cluster.sh
  5. 验证

    • 执行 jps 命令,在 Master 节点应看到 StandaloneSessionClusterEntrypoint,在 Worker 节点应看到 TaskManagerRunner

    • 访问 http://<flink-master>:8081,打开 Flink Web UI,查看集群和 TaskManager 是否正常注册。


三、 生产环境考量与最佳实践

  1. 资源隔离: 避免将 ZooKeeper、HDFS DataNode 等关键服务与 TaskManager 部署在同一台机器,防止资源竞争。

  2. 监控与告警 : 集成 PrometheusGrafana,对 CPU、内存、背压(Backpressure)、检查点时长等关键指标进行监控和告警。

  3. 日志管理 : 将 Flink 的日志(log/ 目录)收集到 ELK 或 Splunk 等集中式日志系统中,方便排查问题。

  4. 客户端分离 : 建议在专门的客户端机器上提交作业 (flink run),而非在 JobManager 节点上,以降低对主节点的干扰。

  5. 网络与安全: 确保集群节点间网络通畅,防火墙开放所需端口(如 6123 for RPC, 8081 for REST, 以及 TaskManager 的数据传输端口)。考虑使用 SSL/TLS 加密网络通信。

总结

Flink Standalone 集群部署模式提供了简单、稳定且功能完备 的独立运行时环境。其核心优势在于部署简单、易于管理 。但要使其达到生产级别的高可用,必须依赖 ZooKeeper 和分布式文件系统

对于资源管理需求不复杂、团队技术栈偏向传统的中小型公司,Standalone 模式是一个非常好的起点。当需要更精细化的资源管理和多租户隔离时,再考虑迁移到 YARN 或 Kubernetes 模式。

相关推荐
abcy0712131 天前
spark核心组件
flink·spark
翔云1234563 天前
Kafka + Flink实时时流处理场景
flink·kafka
abcy0712134 天前
flink state实例
大数据·算法·flink
Flink_China4 天前
抖音集团基于Paimon的流式数据湖应用实践
大数据·flink
abcy0712134 天前
flink 对齐与非对齐,窗口,状态state原理详解
大数据·flink
大大大大晴天️4 天前
Flink DataStream API 进阶使用与避坑指南
大数据·flink
abcy0712135 天前
flink Task Slots and Resources详解
flink
大大大大晴天6 天前
Flink DataStream API多流操作与实践
flink
大大大大晴天7 天前
深入浅出 Flink DataStream API:原理与使用
flink
大大大大晴天8 天前
聊聊Flink的几种血缘方案
前端·flink