一:Flink的架构体系
1.基础概念
- JobManager 主节点,老大节点用于管理 Flink 集群,容错机制,状态管理,心跳机制的管理等
- TaskManager 从节点,干活节点,用于具体任务执行
- Slot 任务槽:静态的概念,具备的能力,包含CPU(一个线程)和内存,任务task就是在 Slot 中执行,每个Slot中最多只能执行一个 task。内存分配是静态的,将可执行的内存大小平均的分配给 n 份,slot中内存之间是隔离的,cpu core不隔离的。
- 并行度 parallelism : 动态的概念,表示当前 task 并行执行的个数。
-
- 设置并行度的四种方式:
-
-
- 在配置文件中设置 flink-conf.yaml ,优先级最低
- 在提交client客户端任务时候,设置 flink run -p 2
- 全局的流执行环境设置并行度 env.setParallelism(2) ,全局并行度设置
- 算子级别的并行度设置,优先级别最高,sink,sink.setParallelism(2)
-
- Task : 每个 Flink任务划分出来的多个任务
- subTask : 将每个 Task 根据并行度划分的子任务,有多少个并行度就有多少个子任务
2.Flink作业执行过程
- JobClient代表分布式系统的面向用户的客户端组件。它用于与JobManager进行通信,因此它负责提交Flink作业,查询已提交作业的状态并接收当前正在运行的作业的状态消息。
- JobManager是中央控制单元,负责执行Flink作业。因此,它控制着资源分配,任务调度和状态报告、容错。
- TaskManager是具体的程序执行
- 总结
-
- 主从
- Client - > 老大 JobManager -> 小弟 TaskManager
二:部署方式分类
1.Local 本地部署
- 应用场景:开发环境
- 部署步骤:
- 设置 JDK运行环境
- 配置 SSH 免密登录
- 下载并解压缩 Flink-1.13.1 到 /export/server
- 修改配置文件 flink-conf.yaml , value 前面有个空格
jobmanager.rpc.address: node1
- 开启flink环境查看web UI监控
# 开启集群 [root@node1 bin]# start-cluster.sh # 访问监控页面 webUI http://node1:8081
2.Standalone
使用Flink自带的资源调度平台进行任务的部署
- 应用场景:开发、测试使用
- 安装部署:
1. flink/conf/flink-conf.yaml 基础配置
# jobManager 的IP地址 jobmanager.rpc.address: node1 # JobManager 的端口号 jobmanager.rpc.port: 6123 # JobManager JVM heap 内存大小 jobmanager.memory.process.size: 1600m # TaskManager JVM heap 内存大小 taskmanager.memory.process.size: 1728m # 每个 TaskManager 提供的任务 slots 数量大小 taskmanager.numberOfTaskSlots: 2 #是否进行预分配内存,默认不进行预分配,这样在我们不使用flink集群时候不会占用集群资源 taskmanager.memory.preallocate: false # 程序默认并行计算的个数 parallelism.default: 1 #JobManager的Web界面的端口(默认:8081) jobmanager.web.port: 8081
2.配置 worker文件
- 将每个从节点 hostname 保存,一行一个
- 将flink的程序及配置拷贝到其他的节点
3.scp flink 复制到其他节点
scp /export/server/flink root@node2:/export/server scp /export/server/flink root@node3:/export/server
4.配置环境变量
vim /etc/profile FLINK_HOME=/export/server/flink PATH=$PATH:$FLINK_HOME/bin # 立即生效 source /etc/profile
5.开启Flink集群
start-cluster.sh
6.查看当前的 Flink集群的状态,webUI
node1:8081
3.Standalone-HA高可用的部署方式
使用场景:开发、测试使用
部署步骤:和 Standalone 部署方式几乎一样,区别:
需要将每一台节点的 flink-conf.yaml 中 HA 高可用的zookeeper设置并将zookeeper集群地址设置好
1.配置 flink-conf.yaml
- node1
#===============&#