Flink安装部署详细指南
Flink 的部署模式非常灵活,主要分为单机模式(Standalone)、集群模式(Standalone Cluster) 和基于资源管理器的模式(如 YARN, Kubernetes, Mesos)。
对于学习和测试,通常从单机和 Standalone 集群开始;而对于生产环境,YARN 和 Kubernetes 是更主流的选择。
一、核心概念与部署模式简介
在开始安装前,先了解两个核心概念:
- JobManager (Master): 负责协调分布式任务的执行,如调度任务、协调检查点(Checkpoint)、故障恢复等。它是集群的“大脑”。
- TaskManager (Worker): 负责执行数据流中的具体任务(Tasks),并提供内存来存储缓存数据。每个 Worker 都是一个 JVM 进程。
基于这两个组件,Flink 主要有三种部署模式:
- Session Mode (会话模式): 先启动一个长期运行的集群(包含 JobManager 和 TaskManagers),然后向这个集群提交多个作业。所有作业共享集群资源。适合执行时间短、交互式的查询作业。
- Per-Job Mode (作业模式): 为每个提交的作业启动一个独立的集群。作业完成后,集群资源释放。作业之间资源隔离性好,适合长期运行的大型作业。
- Application Mode (应用模式): 将应用程序的
main()方法在集群上运行,而不是在客户端运行。这减轻了客户端的压力,并且更好地实现了应用依赖的隔离。这是推荐的生产模式之一。
二、准备工作
- Java: 确保所有节点已安装 Java 8 或 11。这是运行 Flink 的唯一必需条件。
java -version - 下载 Flink: 从 Apache Flink 官网 下载稳定版本的二进制包,如
flink-1.17.1-bin-scala_2.12.tgz。 - SSH 无密码登录(集群模式): 如果你要部署多节点的 Standalone 集群,需要配置主节点到所有工作节点的 SSH 无密码登录。
三、安装部署实践
模式 1:本地单机模式 (Local)
这是最简单的方式,主要用于本地测试和调试。它会在单个 JVM 进程中启动一个迷你集群(包含一个 JobManager 和一个 TaskManager)。
步骤:
- 解压下载的 Flink 包。
tar -xzf flink-1.17.1-bin-scala_2.12.tgz cd flink-1.17.1 - 启动集群。
./bin/start-cluster.sh - 访问 Web UI。默认地址是
http://localhost:8081。在这里你可以查看集群状态、提交作业、查看日志等。 - 停止集群。
./bin/stop-cluster.sh
模式 2:Standalone 集群模式
这种模式使用 Flink 自带的资源调度器,不依赖外部平台(如 YARN)。
架构:
- 1 个主节点 (Master):运行 JobManager
- N 个工作节点 (Workers):运行 TaskManager
步骤(以 1 主 2 从为例):
-
修改配置 (
conf/flink-conf.yaml):# 主节点的地址(或者使用主节点主机名,需配置hosts) jobmanager.rpc.address: master-node-ip-or-hostname # 每个 TaskManager 可用的总内存。根据机器配置调整。 taskmanager.memory.process.size: 2048m # 每个 TaskManager 可用的任务槽数(通常设置为CPU核心数) taskmanager.numberOfTaskSlots: 4 # 并行度默认值 parallelism.default: 3 -
修改工作节点列表 (
conf/workers):# 列出所有 TaskManager 节点的主机名或IP worker-node-1-ip-or-hostname worker-node-2-ip-or-hostname -
分发 Flink 目录: 将配置好的 Flink 目录完整地拷贝到所有工作节点相同的路径下。
-
启动集群: 在主节点上执行:
./bin/start-cluster.sh这个脚本会通过 SSH 连接到所有
workers文件中列出的节点,并启动 TaskManager 进程。 -
验证: 访问主节点的
http://master-node-ip:8081,在 “Task Managers” 标签页中应该能看到两个已注册的 TaskManager。
模式 3:在 YARN 上部署 (生产常用)
YARN 模式是生产环境中最常用的模式之一。Flink 客户端会与 YARN ResourceManager 通信,在 YARN 上启动 JobManager (作为 ApplicationMaster),然后由它申请 Container 来启动 TaskManagers。
步骤:
-
环境准备: 确保已设置
JAVA_HOME、HADOOP_HOME环境变量,并且 Flink 的 lib 目录下有flink-shaded-hadoop-3-uber-*.jar(用于连接对应版本的 Hadoop)。 -
提交作业 (Session Mode 示例):
# 启动一个 YARN Session 集群 ./bin/yarn-session.sh -nm MyFlinkSession -tm 2048 -s 2 -jm 1024 # 在新的终端中,向这个已启动的 Session 集群提交作业 ./bin/flink run ./examples/streaming/WordCount.jar -
提交作业 (Per-Job Mode 示例 - 更推荐):
# -t yarn-per-job 指定部署模式 ./bin/flink run -t yarn-per-job \ -yjm 1024 \ -ytm 2048 \ -ys 2 \ ./examples/streaming/WordCount.jar-yjm: JobManager 内存 (MB)-ytm: 每个 TaskManager 内存 (MB)-ys: 每个 TaskManager 的任务槽数 (Task Slots)
-
提交作业 (Application Mode 示例 - 最新推荐):
./bin/flink run-application -t yarn-application \ -Djobmanager.memory.process.size=1024m \ -Dtaskmanager.memory.process.size=2048m \ -Dparallelism.default=4 \ -Dtaskmanager.numberOfTaskSlots=2 \ ./MyFlinkApp.jar
模式 4:在 Kubernetes 上部署 (云原生趋势)
这是云原生架构下的主流选择,容器化部署提供了极好的资源隔离和弹性伸缩能力。
主要方式:
- Native Deployment: 使用
kubectl直接部署 Flink 的自定义资源(需要先部署 Flink Operator)。 - Standalone Deployment: 手动创建 JobManager 和 TaskManager 的 Deployment 和 Service。
- 使用
flink run-application: Flink 客户端直接与 Kubernetes API 交互来部署应用。
简单示例 (使用 flink run-application):
./bin/flink run-application -t kubernetes-application \
-Dkubernetes.cluster-id=my-flink-cluster \
-Dtaskmanager.memory.process.size=2048m \
-Dkubernetes.taskmanager.cpu=2 \
-Dparallelism.default=5 \
-Dkubernetes.container.image=my-flink-image:latest \
local:///opt/flink/usrlib/my-job.jar
这需要提前配置好 ~/.kube/config 文件以连接 Kubernetes 集群。
四、总结与建议
| 模式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 本地单机 | 本地测试、学习 | 极简,无需配置 | 无分布式能力 |
| Standalone | 中小规模集群,无YARN/K8s | 简单,不依赖外部组件 | 需要自己管理资源,无高级调度 |
| YARN | 生产环境(已有Hadoop生态) | 资源管理强大,与Hadoop集成深 | 部署配置稍复杂 |
| Kubernetes | 生产环境(云原生、混合云) | 弹性伸缩,资源隔离好,DevOps友好 | 运维复杂度高,需要K8s知识 |
给初学者的建议:
- 从本地单机模式开始,熟悉 Web UI 和基本操作。
- 然后在Standalone 集群模式下,尝试在两台虚拟机上部署,理解主从架构。
- 最后再深入研究 YARN 或 Kubernetes 这种生产级部署模式。
希望这个详细的讲解能帮助你顺利部署 Flink!
更多推荐



所有评论(0)