Flink的架构包含哪些?介绍下技术架构和运行架构
Flink 架构分为 技术架构 和 运行架构 两部分。
技术架构
如下图为Flink技术架构:
Flink 作为流批一体的分布式计算引擎,必须提供面向开发人员的API层,同时还需要跟外部数据存储进行交互,需要连接器,作业开发、测试完毕后,需要提交集群执行,需要部署层,同时还需要运维人员能够管理和监控,还提供图计算、机器学习、SQL等,需要应用框架层。
运行架构
如下图为Flink运行架构:
Flink 集群采取 Master - Slave 架构,Master的角色为 JobManager,负责集群和作业管理,Slave的角色是 TaskManager,负责执行计算任务,同时,Flink 提供客户端 Client 来管理集群和提交任务,JobManager 和 TaskManager 是集群的进程。
(1)Client
Flink 客户端是F1ink 提供的 CLI 命令行工具,用来提交 Flink 作业到 Flink 集群,在客户端中负责 StreamGraph (流图)和 Job Graph (作业图)的构建。
(2)JobManager
JobManager 根据并行度将 Flink 客户端提交的Flink 应用分解为子任务,从资源管理器 ResourceManager 申请所需的计算资源,资源具备之后,开始分发任务到 TaskManager 执行 Task,并负责应用容错,跟踪作业的执行状态,发现异常则恢复作业等。
(3)TaskManager
TaskManager 接收 JobManage 分发的子任务,根据自身的资源情况 管理子任务的启动、 停止、销毁、异常恢复等生命周期阶段。Flink程序中必须有一个TaskManager。
组件列表
Flink的架构由多个组件组成,每个组件都承担着特定的角色和功能。下面是Flink的主要组件和其在架构中的角色:
- JobManager(作业管理器):
- JobManager是Flink的主要控制节点,负责接收和调度作业(Job)的执行。
- 它协调整个流处理作业的执行、管理作业的状态和元数据,并协调任务的调度和故障恢复。
- JobManager负责从客户端接收作业图(JobGraph),对作业进行分配和调度,以及协调所有的任务执行。
- TaskManager(任务管理器):
- TaskManager是Flink的工作节点,负责执行具体的任务。
- 它根据JobManager的指令,将作业划分为一组并发的任务(Task)并执行。
- TaskManager负责管理任务的生命周期、处理数据流的输入和输出,并协调任务之间的通信和数据交换。
- ResourceManager(资源管理器):
- ResourceManager负责管理Flink集群中的资源,包括计算资源(CPU、内存等)和任务插槽(Task Slot)。
- 它与JobManager协作,根据作业的需求和集群的资源状况来分配任务插槽。
- ResourceManager还负责监控和管理集群的健康状态,并根据需要进行资源的动态分配和调整。
- Blob Server:
- Blob Server是Flink用于存储和分发作业相关的二进制文件(例如JAR包、配置文件等)的组件。
- 它允许作业提交者将作业所需的文件上传到Blob Server,并且TaskManager可以从Blob Server上获取所需的文件。
- 分布式存储系统:
- Flink需要一个分布式存储系统来存储检查点数据、状态信息和元数据。
- Flink支持多种存储系统,如HDFS、S3、GCS等。这些存储系统用于持久化数据,以便在故障发生时进行恢复和重启。
- 客户端:
- 客户端是与Flink交互的用户接口,用于提交作业、查询作业状态和监控作业的执行。
- 客户端可以是命令行界面、图形界面或通过Flink提供的API进行编程。
以上是Flink的主要组件和其在架构中的角色。这些组件共同协作,实现了Flink的分布式流处理功能,并提供了高性能、容错性和可伸缩性的数据处理能力。