Flink3:Flink部署方式

Flink3:Flink部署方式

安装部署方式

  • Local:不单独部署运行环境,在代码中直接调试。后续一些简单的代码样例就会以Local方式调试。
  • Standalone:独立运行环境。这种模式下,Flink将自己完全管理运行资源。这种方式,其实资源利用率是比较低的。
  • Standalone HA:独立集群高可用模式,Flink自带集群,开发测试及生产环境使用。
    • 注意:此处有个坑,Standalone模式的HA必须依赖于共享存储文件系统,因为要保证JobManager的元数据信息对所有节点共享,由high-availability.storageDir参数指定JobManager存储位置。如果指定本地目录,即使启动2个JobManager也不会实现高可用,因为元数据信息不能共享。可选代替方案,使用NFS挂载远程机器JobManager信息存储目录。也可以使用HDFS。
  • Yarn:以Hadoop提供的Yarn作为资源管理服务。计算资源统一由hadoop yarn管理,生产环境使用。这样可以更高效的使用集群的机器资源。

Local 模式

所有进程process运行在一台机器上,针对Flink框架来说,进程分为jobManager(主节点,管理者)和TaskManager(从节点,干活)

1.1 架构图

notion image

1.2 原理图

notion image
  1. Flink程序有JobClient进行提交
  1. jobClinet将作业提交给JobManager
  1. jobManager负责协调资源分配和作业执行。资源分配完成后,任务将提交给响应的TaskManager
  1. TaskManager启动一个线程以开始执行。TaskManager会向jobManager报告状态更改,如何开始执行,正在进行或者已完成。
  1. 作业执行完成后结果将发送回客户端(jobClient)

Standalone 模式

管理集群资源和分配资源给Flink 应用运行任务Task

1. 架构图

  • JobManager是单节点的
notion image

2. 原理图

notion image
  1. client客户端提交任务给jobmanager
  1. jobmanager 负责申请任务运行所需要资源并管理任务和资源
  1. jobmanager分发任务给TaskManager执行
  1. TaskManager定期向jobManager汇报状态

Standalone HA 模式

1. 架构图

  • JobManager是多节点的
notion image
  • Standalone 模式,会有单节点故障问题的产生,所以我们也可以在standAlone模式下,借助于Zookeeper,将我们的JobManager实现成为高可用的模式。

Yarn 模式

原理图

notion image

为什么使用Flink on yarn?

  1. yarn的资源可以按照需使用,提高集群的资源利用率
  1. yarn的任务有优先级,根据优先级运行作业
  1. 基于yarn调度系统,能自动化的处理各个角色的failover(容错)
当flink on yarn运行时,特点:
  • jobmanager进程和TaskManager进程都由yarn nodemanager监控
  • 如果jobmanager进程异常退出,则yarn resurcemanager会从新调用jobmanager到其他机器;
  • 如果taskmanager进程异常退出,jobmanager会收到消息并重新向yarn resourcemanager申请资源,重新启动taskmanager
 

Yarn 三种模式

1. Application Mode 模式(推荐)

应用模式将在任务的启动时l临时在yarn上申请一个flink集群。任务从main方法启动开始就会提交到yarn上的flink集群执行。执行完成后,集群就会立即注销。
  • 应用场景:短期任务

2. Session Mode 任务模式

notion image
特点:需要事先申请资源,启动jobmanager和taskmanager
优点:不需要每次申请资源,而是使用已经申请好的资源,从而提高执行效率
缺点:作业执行完成以后,资源不会被释放,一直会占用系统资源
应用场景:适合作业提交比较频繁的场景,小作业比较多的场景
这种模式跟应用模式很类似,也会给每个应用在yarn上申请一个单独的flink集群。只不过这种模式下,任务是先在本地执行,构建数据处理链。构建完成后再将任务提交到flink集群上执行。

3. Per-job Cluster Mode 单任务模式(推荐)

notion image
特点:每次提交作业都需要申请一次资源
优点:作业运行完成,资源会立刻被释放,不会一直占用系统资源
缺点:每次提交作业都需要申请资源,会影响执行效率,因为申请资源需要耗费时间
应该场景:适合作业比较少的场景、大作业的场景
  • 应用场景:长期任务
只有在这些都完成之后,才会通过env.execute()方法触发Flink运行时真正地开始执行作业。如果所有用户都在Deployer上提交作业,较大的依赖会消耗更多的带宽,而较复杂的作业逻辑翻译成JobGraph也需要吃掉更多的CPU和内存,客户端的资源反而会成为瓶颈。不管Session还是Per-Job模式都存在此问题。为了解决,社区在传统部署模式的基础上实现了Application模式。
可见,原本需要客户端做的三件事被转移到了JobManager里,也就是说main()方法在集群中执行(入口点位于ApplicationClusterEntryPoint),Deployer只需要负责发起部署请求了。另外如果一个main()方法中有多个env.execute/executeAsync()调用,在Application模式下,这些作业会被视为同一个应用,在同一个集群中执行(如果在Per-Job模式下,就会启动多个集群)。可见,Application模式本质上是Session和Per-Job模式的折衷。