ToB企服应用市场:ToB评测及商务社交产业平台

标题: Flink体系架构和应用部署方式 [打印本页]

作者: 嚴華    时间: 2024-10-20 16:32
标题: Flink体系架构和应用部署方式
目录
概述
Flink集群架构组件
Client
JobManager
TaskManagers
算子、Task和Subtask三者关系
概念
算子和Task的关系
Task和SubTask的关系
算子和SubTask的关系
样例
Task Slots和资源的关系
Flink应用程序部署
Flink Session 集群
Flink Job 集群
Flink Application 集群


概述

Flink傲立于分布式体系的前沿,它的执行流应用程序能力深受瞩目,而这一切结果的背后,离不开对盘算资源的精妙分配与高效管理。作为一款卓越的分布式体系,Flink深知盘算资源对于其性能与效率的至关紧张性。
尤为值得一提的是,Flink展现了卓越的兼容性,它无缝集成了诸如Hadoop YARN、Apache Mesos以及Kubernetes等一系列广受欢迎的集群资源管理器。这不光意味着Flink能够轻松驾御这些主流平台,实现资源的机动调度与优化,还进一步拓宽了其应用场景。除此之外,Flink同样具备强大的机动性,它既可以作为独立的集群自主运行,又能以库的情势嵌入到其他体系中,满足多样化的使用需求。
综上所述,Flink不光是一款功能强大的分布式体系,更是一个能够与多种集群资源管理器紧密协作、机动顺应各种场景的杰出代表。
本文概述了 Flink 的架构,而且形貌了其紧张组件如何举行交互以及Flink应用程序的几种部署方式和从故障中恢复的机制。
Flink集群架构组件

Flink的运行时架构精妙而高效,其核心由两大类型的进程协同工作,共同支持起流/批处理任务的稳定运行。这两个关键组件分别是:一个高瞻远瞩的JobManager,以及一个或多个勤勤奋恳的TaskManager。

JobManager与TaskManager的启动方式机动多样,既可以直接在物理或虚拟呆板上以standalone集群的情势独立启动,也可以在容器化环境中优雅地运行,甚至还能借助YARN、Kubernetes、Mesos等强大的资源管理框架举行动态管理与启动。一旦TaskManager成功启动,它会自动连接到JobManager,宣告自身的可用性,并随时准备接收由JobManager分配的工作负载。这种筹划不光提升了资源的使用率,还确保了作业调度与执行的机动性与高效性。
Client

在Flink的运作体系中,Client并不直接参与运行时的数据处理或程序执行流程,而是扮演着数据流的准备者与发送者的角色。Client的紧张职责是构建并配置数据流,随后将其提交给JobManager以启动处理流程。这一提交过程完成后,Client可以选择两种模式举行操纵:在分离模式下,Client会与集群断开连接,释放资源并允许用户举行其他任务;而在附加模式下,Client则保持与集群的连接,连续接收并展示作业的执行状态与报告。
Client的启动方式机动多样,既可以作为Java/Scala程序的一部分被触发执行,让开发者能够在代码中直接配置并提交作业;也可以通过命令行界面(如执行./bin/flink run ...命令)来运行,为不认识编程的用户提供了便捷的提交途径。无论接纳哪种方式,Client都以其独特的功能,为Flink作业的顺利启动与监控提供了有力支持。
JobManager

JobManager在Flink应用程序的分布式执行过程中扮演着至关紧张的协调者角色。它负责决定task(或task集合)的调度时机,监控task的完成环境并对执行失败做出及时相应。此外,JobManager还负责协调checkpoint的创建,以确保数据的一致性与可恢复性,并在作业失败时引导从先前状态举行恢复。通过这些职责的履行,JobManager确保了Flink应用程序能够高效、可靠地运行。JobManager紧张由下面的三个不同的组件组成:

始终至少有一个 JobManager。高可用(HA)设置中大概有多个 JobManager,此中一个始终是 leader,其他的则是 slave。
TaskManagers

TaskManager(也称为 worker)执行作业流的 task,而且缓存和交换数据流。
必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子。其紧张包含以下的一些组件:

算子、Task和Subtask三者关系

概念







算子和Task的关系


Task和SubTask的关系


算子和SubTask的关系

SubTask是算子的执行实例。
样例

下图中样例数据流用 5 个 subtask 执行,因此有 5 个并行线程。

Task Slots和资源的关系

每个 TaskManager(工作管理器)作为一个独立的 JVM 进程运行,能够在其内部的独立线程上并发执行一个或多个Subtask。为了管理一个 TaskManager 能够承载的任务数量,引入了所谓的任务槽(Task Slots)概念,每个 TaskManager 至少配备一个任务槽。
每个任务槽(Task Slot)象征着TaskManager内部一组固定的资源分配单元。举例来说,一个配置了3个任务槽的TaskManager,会将其所管理的托管内存均分为三份,每份分配给一个任务槽。这种资源分配确保了子任务(Subtask)在运行时不会与其他作业的子任务争夺托管内存资源,因为每个子任务都被分配了肯定数量的专用托管内存。需要指出的是,这里并未实现CPU资源的隔离;当前的Task Slot仅仅是在TaskManager的托管内存层面为任务分别了界限。
通过调整 Task Slot 的数量,用户可以定义 Subtask 如何相互隔离。每个 TaskManager 有一个 Slot,这意味着每个 Task 组都在单独的 JVM 中运行(比方,可以在单独的容器中启动)。具有多个 Slot 意味着更多 Subtask 共享同一 JVM。同一 JVM 中的 Task 共享 TCP 连接(通过多路复用)和心跳信息。它们还可以共享数据集和数据布局,从而减少了每个 Task 的开销。

默认环境下,Flink 允许 Subtask 共享 Slot,即便它们是不同的 Task 的 Subtask,只要是来自于同一作业即可。结果就是一个 Slot 可以持有整个作业Subtask执行的管道。允许Slot紧张有以下两个紧张的有点:



Flink应用程序部署

Flink 应用程序,作为源自其 main() 方法的用户程序,能够孕育出一个或多个 Flink 作业。这些作业的执行舞台既可以是本地的 JVM(即 LocalEnvironment),也能够扩展到由多台呆板构成的远程集群环境(即 RemoteEnvironment)。对于每一份精心编写的程序,ExecutionEnvironment提供了丰富的方法来控制作业的执行细节,比如设定并行度、Checkpoint时间隔断等,并提供了一些方法能够与外界举行交互。
Flink 应用程序的作业具备多种部署选项,它们可以投递至连续运行的 Flink Session 集群、专享的 Flink Job 集群,或是 Flink Application 集群中执行。这些部署方式的核心差异,紧张在于它们对集群生命周期的管理以及所提供的资源隔离保障各不相同。
Flink Session 集群


Flink Job 集群


Flink Application 集群





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4