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 模式需要,提供容器编排能力 |
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 |
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
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 的日志,便于排查问题。
numRecordsInPerSecond(每秒输入记录数)和 currentLowWatermark(当前水位线),它们是衡量实时计算性能的核心指标。
2.7 本章小结
本章详细介绍了 Flink 的三种核心部署模式:
- Standalone 模式 适合快速上手和开发测试,配置简单但缺乏弹性伸缩能力。
- YARN 模式 与 Hadoop 生态深度集成,适合已有 Hadoop 集群的生产环境。
- Kubernetes 模式 是云原生时代的最佳选择,提供极致的弹性和资源利用率。