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

相关推荐
Hello.Reader5 小时前
Flink Operations Playground 部署、观测、容错、升级与弹性扩缩
大数据·flink
Hello.Reader9 小时前
从 0 到 1Flink DataStream API 入门与上手实战
大数据·flink
lifallen12 小时前
Flink SourceOperator和WaterMark
大数据·flink
Hello.Reader12 小时前
Flink 流式分析事件时间、Watermark 与窗口
大数据·flink
武子康12 小时前
大数据-107 Flink Apache Flink 入门全解:流批一体的实时计算引擎 从起源到技术特点的全面解析
大数据·后端·flink
大数据001 天前
Flink消费Datahub到ClickhouseSink
java·前端·flink
XueminXu1 天前
Flink-SQL计算中的维表连接使用举例
sql·flink·lru·system_time·proctime·连接维表·关联维表
Hello.Reader1 天前
用 Flink Table API 打造实时交易看板从 Kafka 到 MySQL 再到 Grafana
mysql·flink·kafka
leo_hush2 天前
flink1.18配置多个上游source和下游sink
java·大数据·flink