3. Flink 环境搭建:本地模式、Standalone集群模式、YARN模式部署与配置
Flink 支持多种部署模式,以满足从本地开发调试到生产环境大规模集群的不同需求。本章将系统讲解三种核心部署模式:本地模式(Local)、Standalone 集群模式以及YARN 模式。理解每种模式的架构、适用场景和配置要点,是进行实时额度计算开发与运维的基础。
3.1 部署模式概览与选型
在开始搭建之前,首先需要明确不同模式的核心区别。下表从资源管理、启动方式、适用阶段三个维度进行对比,帮助你快速选型。
| 部署模式 | 资源管理器 | 启动方式 | 适用阶段 | 核心特点 |
|---|---|---|---|---|
| 本地模式(Local) | 无(单 JVM) | 直接启动 Flink 进程 | 开发、单元测试、学习 | 无需集群,开箱即用,资源受限 |
| Standalone 集群 | Flink 自身 | 手动启动 Master 和 Worker | 小规模测试、演示环境 | 独立部署,不依赖外部调度器,运维简单 |
| YARN 模式 | Apache Hadoop YARN | 通过 YARN 命令提交作业 | 生产环境、大数据生态集成 | 资源弹性伸缩,与 Hadoop 生态无缝集成,高可用 |
3.2 本地模式(Local)搭建
本地模式是 Flink 最简单的运行方式,它将所有组件(JobManager、TaskManager)运行在同一个 Java 进程中,非常适合用于代码调试和功能验证。
3.2.1 环境准备与启动
- 前置条件: 确保已安装 JDK 8 或 11,并配置好
JAVA_HOME环境变量。 - 下载 Flink: 从 Apache Flink 官网下载稳定版本(如 flink-1.17.2-bin-scala_2.12.tgz),并解压到指定目录。
- 启动集群: 进入 Flink 解压目录,执行启动脚本。
# 解压 Flink 安装包
tar -xzf flink-1.17.2-bin-scala_2.12.tgz
cd flink-1.17.2
# 启动本地集群(默认启动一个 JobManager 和一个 TaskManager)
./bin/start-cluster.sh
启动成功后,访问 http://localhost:8081 即可看到 Flink Web UI,确认集群状态为“Running”。
3.2.2 提交测试作业
本地模式支持直接通过 Web UI 或命令行提交作业。以下是通过命令行提交官方示例 WordCount 的方式:
# 提交示例作业
./bin/flink run examples/streaming/WordCount.jar
# 查看作业执行结果(默认输出到 TaskManager 的日志文件)
tail -f log/flink-*-taskexecutor-*.out
StreamExecutionEnvironment.createLocalEnvironment() 即可,无需启动外部集群。
3.3 Standalone 集群模式部署
Standalone 模式是 Flink 自带的分布式部署方式,不依赖外部资源管理系统。它由 Master 节点(JobManager)和多个 Worker 节点(TaskManager)组成,适合在固定规模的服务器集群上运行。
3.3.1 集群架构与配置
3.3.2 配置与启动步骤
- 配置
conf/flink-conf.yaml: 设置 JobManager 的地址和端口。 - 配置
conf/workers: 列出所有 TaskManager 节点的主机名或 IP。 - 分发安装包: 将配置好的 Flink 目录通过
scp复制到所有 Worker 节点。 - 启动集群: 在 Master 节点执行启动脚本。
# 1. 修改 flink-conf.yaml 核心配置
# 设置 JobManager 的 RPC 地址(Master 节点 IP)
jobmanager.rpc.address: 192.168.1.100
# 设置每个 TaskManager 的 Slot 数量(默认 1)
taskmanager.numberOfTaskSlots: 4
# 设置并行度(默认 1)
parallelism.default: 2
# 2. 编辑 conf/workers 文件,每行一个 Worker 节点
192.168.1.101
192.168.1.102
192.168.1.103
# 3. 在 Master 节点启动集群
./bin/start-cluster.sh
3.3.3 高可用配置(可选)
生产环境建议启用 Standalone 模式的高可用(HA),防止 JobManager 单点故障。需要配置 ZooKeeper 和持久化存储(如 HDFS)。
# 在 flink-conf.yaml 中添加 HA 配置
high-availability: zookeeper
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
high-availability.storageDir: hdfs:///flink/ha/
high-availability.zookeeper.path.root: /flink
3.4 YARN 模式部署与配置
YARN 模式是生产环境中最推荐的部署方式。Flink 作业作为 YARN 应用提交,由 YARN 的 ResourceManager 负责资源分配和容错。这种模式可以实现资源的动态申请和释放,非常适合实时额度计算这类需要长时间运行且流量波动的作业。
3.4.1 两种运行模式
YARN 模式下,Flink 支持两种作业运行方式:
- Session 模式(会话模式): 预先启动一个常驻的 Flink 集群(JobManager + TaskManager),然后向该集群提交多个作业。适合短查询或小作业。
- Per-Job 模式(单作业模式): 每个作业提交时,YARN 会为其单独启动一个 Flink 集群,作业完成后集群自动释放。适合长时间运行的生产作业,资源隔离性好。
| 对比维度 | Session 模式 | Per-Job 模式 |
|---|---|---|
| 集群生命周期 | 与作业无关,常驻运行 | 随作业启动和结束 |
| 资源隔离 | 多个作业共享资源,可能相互影响 | 每个作业独享资源,完全隔离 |
| 启动速度 | 快(集群已存在) | 慢(需申请资源启动集群) |
| 适用场景 | 开发测试、短作业、作业数量多 | 生产环境、长作业、关键作业 |
3.4.2 环境准备与配置
在 YARN 模式下运行 Flink,需要确保 Hadoop 集群(YARN + HDFS)已正确部署,并且 HADOOP_HOME 或 HADOOP_CONF_DIR 环境变量已设置。
# 设置 Hadoop 环境变量(在 flink-conf.yaml 或系统环境变量中)
export HADOOP_CLASSPATH=`hadoop classpath`
# 将 Hadoop 配置文件(yarn-site.xml, core-site.xml, hdfs-site.xml)软链接到 Flink 的 conf 目录
ln -s $HADOOP_HOME/etc/hadoop/yarn-site.xml $FLINK_HOME/conf/yarn-site.xml
ln -s $HADOOP_HOME/etc/hadoop/core-site.xml $FLINK_HOME/conf/core-site.xml
ln -s $HADOOP_HOME/etc/hadoop/hdfs-site.xml $FLINK_HOME/conf/hdfs-site.xml
3.4.3 提交作业到 YARN
以下演示如何使用 Per-Job 模式提交一个实时额度计算作业。
# 使用 flink run 命令提交作业到 YARN
./bin/flink run \
-m yarn-cluster \
-ynm "RealTimeQuotaJob" \
-yjm 2048 \
-ytm 4096 \
-ys 2 \
-p 4 \
-d \
./examples/streaming/RealTimeQuota.jar \
--input kafka://topic:quota-input \
--output mysql://table:quota-result
参数说明:
-m yarn-cluster:指定运行模式为 YARN 集群。-ynm:YARN 应用名称。-yjm:JobManager 的内存(MB)。-ytm:每个 TaskManager 的内存(MB)。-ys:每个 TaskManager 的 Slot 数量。-p:作业并行度。-d:后台运行(detached)。
3.4.4 YARN 模式作业提交流程
3.5 常见问题与避坑指南
当 Flink 作业依赖的第三方库与 Hadoop 集群自带的库版本不一致时,容易引发
NoSuchMethodError 或 ClassNotFoundException。解决方案:使用 maven-shade-plugin 对作业 Jar 包进行 Shade 打包,将依赖包重命名,避免冲突。
Standalone 模式下,TaskManager 的 Slot 是静态分配的,无法像 YARN 那样动态调整。如果某个作业占用过多资源,可能导致其他作业无法获取 Slot。建议在 Standalone 集群中为每个作业预留足够的 Slot,或直接使用 YARN 模式。
3.6 本章小结
本章详细介绍了 Flink 的三种核心部署模式:
- 本地模式:适合开发调试,快速验证额度计算逻辑。
- Standalone 集群模式:适合小规模测试,部署简单,但资源管理能力有限。
- YARN 模式:生产环境首选,资源弹性伸缩,与 Hadoop 生态无缝集成。
掌握这些环境的搭建与配置,是后续进行实时额度计算开发、测试和上线的基石。在实际项目中,应根据团队基础设施和作业特点选择合适的部署模式。