一. 集群的基本架构
Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master-Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker (Slave)节点。所有组件之间的通信都是借助于 Akka Framework,包括任务的状态以及Checkpoint 触发等信息。
- Job Client
Job Client 不是 Flink 程序执行的内部部分, 但它是任务执行的起点. Job Client 负责接受用户的程序代码, 然后创建数据流, 将数据流提交给 Job Manager 以便进一步执行. 执行完成后, Job Client 将结果返回给用户
- Job Manager
- 主进程(也称为作业管理器)协调和管理程序的执行. 它的主要职责包括安排任务, 管理checkpoint, 故障恢复等.
- 机器集群中至少要有一个 master, master 负责调度 task, 协调 checkpoints 和容灾, 高可用设置的话可以有多个 master, 但要保证一个是 leader, 其他是 standby;
- Job Manager 包含 Actor system、Scheduler、Check pointing 三个重要的组件
- Task Manager
- 从 Job Manager 处接收需要部署的 Task. Task Manager 是在 JVM 中的一个或多个线程中执行任务的工作节点.
- 任务执行的并行性由每个 Task Manager 上可用的任务槽决定, 每个任务代表分配给任务槽的一组资源. 例如, 如果 Task Manager 有四个插槽,那么它将为每个插槽分配 25% 的内存. 可以在任务槽中运行一个或多个线程. 同一插槽中的线程共享相同的 JV. 同一 JVM 中的任务共享 TCP 连接和心跳消息.
- Task Manager 的一个 Slot 代表一个可用线程, 该线程具有固定的内存, 注意 Slot 只对内存隔离,没有对 CPU 隔离.
- 默认情况下, Flink 允许子任务共享 Slot, 即使它们是不同 task 的 subtask, 只要它们来自相同的 job. 这种共享可以有更好的资源利用率。
可以看出,Flink 的任务运行其实是采用多线程的方式,这和 MapReduce 多 JVM 进程的 方式有很大的区别 Fink能够极大提高 CPU 使用效率,在多个任务和 Task之间通过 TaskSlot 方式共享系统资源,每个 TaskManager 中通过管理多个 TaskSlot 资源池进行对资源进行有效管理。
二. 集群的安装和部署
-
上传并解压到指定目录
-
配置文件
-
修改 flink-conf.yaml 配置文件
# 指定jobmanager节点名称 jobmanager.rpc.address: node01
# 表示数每一个 TaskManager 上有 3 个 Slot。 taskmanager.numberOfTaskSlots: 3
-
编辑 slaves 配置文件
指定slaves节点的名称
-
修改masters配置文件
指定master节点名称
-
-
分发给其他节点
scp -r flink-1.9.1 node02:`pwd` scp -r flink-1.9.1 node03:`pwd` scp -r flink-1.9.1 node04:`pwd`
-
启动flink集群
./start-cluster.sh
-
访问WebUI
http://node01:8081
声明:
- 本文参考了尚学堂Flink课程的课件
- 本文参考了博客: Flink 从 0 到 1 学习 —— Apache Flink 介绍