2. Flink 环境搭建:本地模式、YARN 模式与 Kubernetes 模式

Flink 支持多种部署模式,以适应不同规模和场景的实时计算需求。本章将系统讲解 本地模式(Standalone)、YARN 模式 和 Kubernetes 模式 的安装与配置,并带领你初步认识 Flink Web UI 的核心功能。

2.1 环境准备与前置依赖

在开始搭建之前,请确保你的环境满足以下条件:

依赖项 版本要求 说明
Java JDK 8 或 11 Flink 运行的基础环境,建议使用 Oracle JDK 或 OpenJDK
SSH 无特殊版本要求 Standalone 集群节点间通信需要 SSH 免密登录
Hadoop Hadoop 2.8+ / 3.x 仅 YARN 模式需要,用于资源调度
Kubernetes 1.19+ 仅 Kubernetes 模式需要,提供容器编排能力
提示: 本教程以 Flink 1.17 版本为例进行演示。下载地址:https://flink.apache.org/downloads.html,选择 flink-1.17.0-bin-scala_2.12.tgz。

2.2 本地模式(Standalone)安装与配置

本地模式是最简单的部署方式,适合开发测试和快速验证。它不需要外部资源管理器,Flink 自身管理资源。

2.2.1 单节点 Standalone 模式

步骤 1:解压安装包

tar -xzf flink-1.17.0-bin-scala_2.12.tgz
cd flink-1.17.0

步骤 2:启动集群

./bin/start-cluster.sh

启动后,Flink 会自动启动一个 JobManager 和一个 TaskManager。可以通过 jps 命令验证进程:

jps
# 输出应包含:
# StandaloneSessionClusterEntrypoint  (JobManager)
# TaskManagerRunner                   (TaskManager)

步骤 3:访问 Web UI

打开浏览器,访问 http://localhost:8081,即可看到 Flink 的 Web 管理界面。

2.2.2 多节点 Standalone 集群

多节点集群需要配置主节点和工作节点之间的 SSH 免密登录,并修改以下配置文件:

配置文件 关键配置项 说明
conf/flink-conf.yaml jobmanager.rpc.address 设置为 JobManager 的主机名或 IP
conf/workers 每行一个 TaskManager 主机名 列出所有工作节点
conf/masters JobManager 主机名:端口 默认端口 8081
关键参数: taskmanager.numberOfTaskSlots 决定每个 TaskManager 能并行执行的任务数,默认值为 1。生产环境建议根据 CPU 核心数设置为 2-8。

2.3 YARN 模式安装与配置

YARN 模式将 Flink 作业提交到 Hadoop YARN 集群,由 YARN 负责资源分配和容错。这是生产环境中最常用的部署方式之一。

2.3.1 前置配置

确保 HADOOP_HOME 环境变量已设置,并将 Hadoop 配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml)复制到 Flink 的 conf/ 目录下,或设置 HADOOP_CONF_DIR 环境变量。

2.3.2 提交作业到 YARN

方式一:Session 模式(会话模式)

# 启动一个常驻的 YARN Session
./bin/yarn-session.sh -n 2 -tm 2048 -s 2

# 提交作业到该 Session
./bin/flink run -c com.example.MyJob ./my-job.jar

方式二:Per-Job 模式(单作业模式)

# 直接提交作业,YARN 为每个作业启动独立的集群
./bin/flink run -m yarn-cluster -yjm 1024 -ytm 2048 ./my-job.jar
参数 含义 示例值
-n TaskManager 数量 2
-tm 每个 TaskManager 的内存(MB) 2048
-s 每个 TaskManager 的 Slot 数 2
-yjm JobManager 内存(MB) 1024
注意: Per-Job 模式在 Flink 1.15 之后已被标记为弃用,推荐使用 Application 模式。Application 模式将 main 方法在集群端执行,更安全且资源隔离性更好。

2.4 Kubernetes 模式安装与配置

Kubernetes 模式(K8s)是云原生时代的首选部署方式,Flink 原生支持在 K8s 上运行,提供更好的弹性伸缩和资源利用率。

2.4.1 前置条件

  • 一个可用的 Kubernetes 集群(版本 1.19+)
  • kubectl 命令行工具已配置
  • Docker 镜像仓库(用于存放 Flink 镜像)

2.4.2 部署方式

方式一:Session 模式

# 创建 Flink 集群 Deployment
kubectl create deployment flink-jobmanager --image=flink:1.17.0
kubectl create deployment flink-taskmanager --image=flink:1.17.0

# 暴露服务
kubectl expose deployment flink-jobmanager --port=8081 --type=NodePort

方式二:Application 模式(推荐)

# 使用 Flink Kubernetes Operator 或直接提交
./bin/flink run-application -t kubernetes-application \
  -Dkubernetes.cluster-id=my-flink-cluster \
  -Dkubernetes.container.image=flink:1.17.0 \
  local:///opt/flink/usrlib/my-job.jar
最佳实践: 生产环境强烈建议使用 Flink Kubernetes Operator 进行管理,它提供了声明式 API、自动扩缩容、滚动升级等高级功能。

2.5 三种部署模式对比

特性 Standalone YARN Kubernetes
资源管理 Flink 自管理 YARN 管理 K8s 管理
部署复杂度 低 中 高
弹性伸缩 手动 自动(基于 YARN) 自动(基于 K8s HPA)
资源隔离 进程级 容器级(YARN Container) 容器级(Pod)
适用场景 开发测试、小规模 传统 Hadoop 生态 云原生、微服务

2.6 Flink Web UI 初步认识

Flink Web UI 是监控和管理 Flink 集群的核心工具,默认运行在 8081 端口。以下是主要功能模块:

  • Job Manager 概览: 显示集群资源使用情况、TaskManager 列表、运行中的作业数。
  • 作业详情: 查看作业的执行计划、算子并行度、数据流图、背压状态。
  • Task Manager 监控: 查看每个 TaskManager 的 JVM 指标、内存使用、网络 I/O。
  • 指标仪表盘: 实时展示吞吐量、延迟、Checkpoint 状态等关键指标。
  • 日志与异常: 集中查看 JobManager 和 TaskManager 的日志,便于排查问题。
关键指标: 在 Web UI 的 Job Metrics 页面,重点关注 numRecordsInPerSecond(每秒输入记录数)和 currentLowWatermark(当前水位线),它们是衡量实时计算性能的核心指标。
Flink 三种部署模式架构对比 Standalone 模式 JobManager TaskManager 1 TaskManager 2 资源管理:Flink 自管理 部署:简单,无需外部依赖 适用:开发测试 YARN 模式 YARN ResourceManager JobManager (AM) TaskManager (Container) 资源管理:YARN 统一调度 部署:需 Hadoop 环境 适用:传统 Hadoop 集群 Kubernetes 模式 K8s API Server JobManager (Pod) TaskManager (Pod) 资源管理:K8s 编排 部署:需 K8s 集群 适用:云原生环境 选择建议 开发测试 → Standalone | 传统 Hadoop 集群 → YARN | 云原生环境 → Kubernetes

2.7 本章小结

本章详细介绍了 Flink 的三种核心部署模式:

  • Standalone 模式 适合快速上手和开发测试,配置简单但缺乏弹性伸缩能力。
  • YARN 模式 与 Hadoop 生态深度集成,适合已有 Hadoop 集群的生产环境。
  • Kubernetes 模式 是云原生时代的最佳选择,提供极致的弹性和资源利用率。