一、Flink集群架构简介
Flink集群主要包括两类节点:
- JobManager:负责协调、资源分配、任务调度等(可高可用部署多个)。
- TaskManager:负责具体的数据处理任务(可横向扩展)。
二、环境准备
- 服务器准备:准备多台Linux服务器(如3台),网络可互通。
- JDK安装:所有节点需安装JDK 1.8或以上(建议用OpenJDK)。
- SSH免密登录:JobManager节点需能免密登录所有TaskManager节点(便于一键启动/停止集群)。
三、下载与解压Flink
以Flink 1.18.0为例:
wget https://dlcdn.apache.org/flink/flink-1.18.0/flink-1.18.0-bin-scala_2.12.tgz
tar -zxvf flink-1.18.0-bin-scala_2.12.tgz
mv flink-1.18.0 /opt/flink
建议所有节点用同样路径。
四、配置环境变量
在所有节点的~/.bashrc或/etc/profile中添加:
export FLINK_HOME=/opt/flink
export PATH=$PATH:$FLINK_HOME/bin
执行 source ~/.bashrc 使配置生效。
五、配置Flink集群
进入$FLINK_HOME/conf目录,主要编辑以下文件:
1. flink-conf.yaml(核心配置)
jobmanager.rpc.address: master-node-hostname
jobmanager.rpc.port: 6123
taskmanager.numberOfTaskSlots: 4
parallelism.default: 2
jobmanager.rpc.address:指定JobManager主节点的主机名或IP。taskmanager.numberOfTaskSlots:每个TaskManager的槽数(通常与CPU核数相同)。parallelism.default:默认并行度。
2. masters(JobManager节点)
如高可用可写多个,一般写一个:
master-node-hostname:8081
(8081为Web UI端口)
3. workers(TaskManager节点)
每行一个TaskManager节点主机名或IP:
worker1-hostname
worker2-hostname
worker3-hostname
六、分发Flink到所有节点
如果只在一台机器上解压,可用scp同步到其他节点:
bash复制
scp -r /opt/flink user@worker1:/opt/
scp -r /opt/flink user@worker2:/opt/
七、启动Flink集群
在JobManager节点执行:
cd /opt/flink
./bin/start-cluster.sh
- 会自动在masters和workers文件所列节点启动相应服务。
八、验证集群
-
Web UI
浏览器访问http://master-node-ip:8081,可查看集群状态。 -
进程检查
在各节点用jps命令,JobManager节点应有StandaloneSessionClusterEntrypoint,TaskManager节点有TaskManagerRunner。 -
运行示例任务
可在JobManager节点执行./bin/flink run examples/streaming/WordCount.jar --input README.txt --output /tmp/result
九、常见问题
- 端口冲突:检查6123、8081端口是否被占用。
- 节点无法启动:检查免密SSH、主机名是否可解析、网络是否互通。
- 内存不足:可在
flink-conf.yaml中调整taskmanager.memory.process.size等参数。
十、集群停止
在JobManager节点执行:
./bin/stop-cluster.sh
十一、Flink高可用(HA)集群配置
Flink Standalone 模式下,单个 JobManager 容易成为单点故障。高可用方案主要基于 ZooKeeper 协调多个 JobManager,保证服务不中断。
1. 环境准备
- 多台服务器,建议3台以上
- 安装 ZooKeeper 集群(至少3个节点)
- 各节点已部署 Flink 和 JDK
2. ZooKeeper 安装与配置
假设你已安装好 ZooKeeper,并启动了集群,记录下 ZooKeeper 集群地址(如:zk1:2181,zk2:2181,zk3:2181)
3. 修改 Flink 配置(flink-conf.yaml)
添加/修改如下内容:
# JobManager HA配置
high-availability: zookeeper
high-availability.storageDir: file:///opt/flink/ha/
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
high-availability.zookeeper.path.root: /flink
# JobManager集群节点
jobmanager.rpc.address: master1
jobmanager.rpc.port: 6123
# 其它常规配置
taskmanager.numberOfTaskSlots: 4
4. 配置 JobManager 列表(masters 文件)
如有两个 JobManager 节点:
master1:8081
master2:8081
5. 启动 HA 集群
在所有 JobManager 节点都执行:
./bin/start-cluster.sh
此时会自动选举一个 Active JobManager,其余为 Standby。
任意节点挂掉,Standby 会自动接管。
6. 验证
- 查看 ZooKeeper
/flink路径有相关数据 - 访问任一 JobManager 的 Web UI(如 master1:8081、master2:8081)
- 杀死当前 Active JobManager,观察 Standby 是否自动切换
十二、Flink on YARN 部署
适用于 Hadoop 环境,资源由 YARN 管理。
1. 环境准备
- 已部署 Hadoop/YARN 集群
- Flink 安装在任一节点即可
2. 启动 Session 集群
./bin/yarn-session.sh -d
参数说明:
-d后台启动-n <numTaskManagers>指定 TaskManager 数量-s <slotsPerTaskManager>指定每个 TaskManager 的槽数
3. 提交作业
./bin/flink run -m yarn-cluster -p 4 examples/streaming/WordCount.jar
4. 停止 Session 集群
./bin/yarn-session.sh -shutdown
5. 其他模式
- Per-Job 模式:每个作业单独启动一个 Flink 集群,适合大作业隔离。
- Session 模式:多个作业共享一个 Flink 集群,资源利用率高。
十三、Flink on Mesos 部署
Mesos 已逐渐被 K8S 取代,简单说明:
1. 环境准备
- 已部署 Mesos 集群
- Flink 安装在任一节点即可
2. 启动 Flink Mesos 集群
./bin/mesos-appmaster.sh \
--master mesos-master:5050 \
--zk mesos-zk:2181 \
--taskManagerCount 4
3. 提交作业
./bin/flink run -m mesos-master:5050 examples/streaming/WordCount.jar
十四、Flink on Kubernetes(K8S)部署
K8S 是云原生的主流方案,支持高可用、弹性伸缩。
1. 环境准备
- 已部署 K8S 集群
- kubectl 命令可用
- Flink Docker 镜像(如
flink:1.18.0)
2. 下载官方 K8S 部署模板
3. Standalone 模式部署
方式一:使用 YAML 文件
- 下载 官方 YAML 示例
- 修改
jobmanager,taskmanager副本数、资源等
apiVersion: apps/v1
kind: Deployment
metadata:
name: flink-jobmanager
spec:
replicas: 1
...
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: flink-taskmanager
spec:
replicas: 3
...
- 部署:
kubectl apply -f flink-jobmanager.yaml
kubectl apply -f flink-taskmanager.yaml
方式二:使用 Flink Kubernetes Operator
- 参考 官方 Operator 文档
- Operator 支持声明式作业、自动高可用、资源管理等
4. Session/Per-Job 模式
- Session:多个作业共享一个 Flink 集群
- Per-Job:每个作业独立集群,推荐生产环境
5. 访问 Web UI
- 通过端口转发:
kubectl port-forward deployment/flink-jobmanager 8081:8081
- 浏览器访问
localhost:8081
6. 资源与参数配置
- 通过 YAML 文件指定 CPU、内存等资源
- 可挂载外部存储(如 S3、HDFS)
2378

被折叠的 条评论
为什么被折叠?



