Apache Flink 部署模式概述

Apache Flink 集群与在其上运行的 Flink 作业之间的关系可能相当灵活。Apache Flink 支持 Flink 作业的不同部署模式,使开发人员可以根据自己的需求和作业特定要求专注于使用适当的模式。

应用程序模式

在 Flink 1.11 中,社区在 Apache Flink 中引入了一种新的部署模式,即“应用程序模式”。Application Mode 是一种优化,旨在让 Flink 作业提交过程变得更加轻量级,特别是针对需要频繁提交多个 Flink 应用程序的情况。这种部署模式的主要目标是减少与本地下载应用程序依赖项相关的步骤和必要的带宽,执行 main() 方法来提取 Flink 运行时可以理解的应用程序表示(即 JobGraph)并传送依赖项和 JobGraph(s) 到集群。Application Mode 提供与 Per-Job 模式相同级别的隔离保证,建议用于生产环境。

Application Mode 为每个提交的应用程序创建一个集群,但这一次,应用程序的 main() 方法在 JobManager 上执行。虽然这种部署看起来与 Per-Job 模式(稍后描述)相对相似,但 Application Mode 允许更加灵活和轻量级的作业执行顺序,因为这不受部署模式的影响,而是受到用于启动应用程序的调用的影响。正在部署的作业(或作业包)。

有关 Apache Flink 中 Application Mode 的详细概述,可以参考这里的这篇博文。

会话模式

会话模式可能是 Flink 应用程序最简单的部署模式。会话模式下的集群是长期存在的,这意味着会话模式下的 Flink 作业将假设正在运行的集群已经存在,并将使用该集群的资源来执行任何提交的应用程序。在会话模式下,同一个集群执行多个作业,这意味着资源之间不存在隔离,因为集群中的所有任务管理器都是或可以共享的。使用会话模式,开发人员无需担心启动任务管理器的额外开销。为提交的 Flink 应用程序创建新集群,因为作业使用现有集群资源。

然而,在会话模式下,由于所有 Flink 应用程序共享同一集群的资源,因此行为不当的作业可能会导致整个集群瘫痪,并可能影响不相关的 Apache Flink 部署。出于同样的原因,在确保部署之间可靠的安全凭证隔离时,会话模式可能会带来额外的挑战。因此,我们建议会话模式最适合具有(相对)可预测行为的相对简单、较短的作业(例如执行简单的 FlinkSQL 查询)。

Per-Job 模式

最后一种模式是 Per-Job 模式。顾名思义,通过 Per-Job 模式,每个 Flink 应用程序都会获得一个隔离的集群,并在集群中保留资源。当 Flink 应用程序以 Per-Job 模式提交时,它将使用底层资源管理框架为每个提交的作业启动一个新集群。当 Flink 部署完成后,集群将变得不可用,并且所有资源或文件都将从集群中删除。

在 Per-Job 模式下,JobManager 监督单个作业的执行,而任何任务管理器进程都是专门专用的执行单个 .jar 文件。由于所有这些原因,Per-Job 模式提供了比会话模式(如上所述)更好的资源隔离保证。然而,与 Application 模式相比,Per-Job 模式在客户端非常繁重,可能会导致巨大的资源成本。因此,目前,Per-Job 模式唯一推荐的用例是当集群无法访问构建作业的依赖项而只有“客户端”可以时。

借助 Apache Flink 中提供的不同部署模式,开发人员可以灵活地以灵活的方式使用其底层资源管理框架(例如 YARN 或 Kubernetes),根据他们的需求和要求进行定制。有关 Apache Flink 可用部署模式的更多信息,您可以参考 Apache Flink® 官方文档。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627