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 模式。

相关推荐
华农DrLai9 小时前
Spark SQL Catalyst 优化器详解
大数据·hive·sql·flink·spark
岁岁种桃花儿9 小时前
Flink从入门到上天系列第一篇:搭建第一个Flink程序
大数据·linux·flink·数据同步
Hello.Reader18 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
Hello.Reader1 天前
Flink 使用 Amazon S3 读写、Checkpoint、插件选择与性能优化
大数据·flink
Hello.Reader1 天前
Flink 对接 Google Cloud Storage(GCS)读写、Checkpoint、插件安装与生产配置指南
大数据·flink
Hello.Reader1 天前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
wending-Y1 天前
记录一次排查Flink一直重启的问题
大数据·flink
Hello.Reader1 天前
Flink 对接 Azure Blob Storage / ADLS Gen2:wasb:// 与 abfs://(读写、Checkpoint、插件与认证)
flink·flask·azure
Hello.Reader1 天前
Flink 文件系统通用配置默认文件系统与连接数限制实战
vue.js·flink·npm