当前位置: 首页 > news >正文

详细介绍:Flink 2.x 独立集群(Standalone) 的部署

详细介绍: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.yamlmastersworkers 文件分发到所有节点的 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. 监控与告警: 集成 Prometheus 和 Grafana,对 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 模式。

http://www.hskmm.com/?act=detail&tid=16576

相关文章:

  • 瑞芯微RK3506核心板/开发板DSM音频开发实战,关键知识点与实操案例必看攻略! - 教程
  • 不只是一台玩具车:开源燃料电池机器人HydroBot全揭秘 - 实践
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名窗口管理工具需求洞察
  • OS-KylinV10-加载动态库运行异常-全局函数重名或未使用命名空间
  • 性能暴涨50%:PD分离KV cache传输的实战干货
  • 【GitHub每日速递 250925】 一套代码跑遍全平台!Flutter 让你的应用开发提速 10 倍
  • 上海芯片上市公司市值大揭秘!谁是“芯”界顶流?
  • 中科微卫星定位芯片代理商,北斗双频定位导航模组ATGM332D-F7N
  • 四个第一!又一国产GPU突围亮相!
  • AI智慧:于悬荡中并行,在悟空里觉醒
  • 读人形机器人22工作的意义
  • .NET 何以成为制造业数字化转型的基石:效率、生态与跨平台的制胜之道
  • 深度互联:金兰契协议下的领域知识与元智慧共生
  • Winform无边框窗体拖动功能实现
  • HarmonyOS SDK 媒体开放能力在微博社交场景的实践剖析
  • 今天我看了
  • reaction 记录——《彻夜之歌》
  • 孤独 寂寞
  • 泰勒展开中的佩亚诺余项与高阶无穷小:不只是“小到可以忽略”
  • 关于“屏蔽词”的历史遗传
  • 不变应万变
  • [智能驾驶/智能汽车] 《SAE J3016-202104:驾驶自动化分级》[转]
  • [汽车] 智能网联汽车-智能驾驶-综述
  • 【stm32-FOC】初步认识 CMSIS-DSP
  • 护照包 阻门器 防偷包
  • Python-Conda技术指南
  • [GRPC]基于C#和GO 的GRPC快速上手
  • 19.并发编程
  • 复健
  • 苍穹外卖-day10(spring Task,WebSocket,来单提醒客户催单) - a