【Flink系列】Flink运行模式还傻傻分不清?快来看看吧

【Flink系列】Flink运行模式还傻傻分不清?快来看看吧,第1张

关注、星标公众号【 大数据之美 】,和你一起成长

原文链接:Flink运行模式还傻傻分不清?快来看看吧

Flink 的部署方式跟 Spark 一样,是非常灵活的,可以支持Local、Standalone、Yarn、Mesos、Docker、Kubernetes等现在常见的部署模式。这些部署模式是 Flink 计算时所需资源的管理的不同方式,所以可以理解为是资源管理方式。

在具体的应用场景中,如何跟计算资源交互,对于集群资源分配和占用的方式,可能会有特定的需求。所以 Flink 为各种场景提供了不同的运行模式,主要有以下三种:

  • 会话模式(Session Mode)

  • 单作业模式(Per-Job Mode)

  • 应用模式(Application Mode)

上述运行模式主要在于集群的生命周期和资源的分配方式,以及应用程序的 main 方法到底在 Client 还是 JobManager 中执行的区别。接下来我们就做一个展开说明。

1、会话模式(Session Mode)

会话模式需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时所有资源就都已经确定,所以所有提交的作业会竞争集群中的资源。这种模式最符合常规思维,有个固定的资源,只要等着任务过来使用资源就可以了。

会话模式

会话模式的优点在于只需要一个集群,所有的作业提交之后都在这个集群里执行,作业结束了就释放资源,集群依然正常运行。

缺点是因为资源是共享的,所以资源不够了,提交新的作业就会失败。另外,同一个 TaskManager 上可能运行了很多作业,如果其中一个发生故障导致 TaskManager 宕机,在这个上的所有作业都会受到影响。

会话模式比较适合于单个规模小、执行时间短的大量作业。

2、单作业模式(Per-Job Mode)

既然会话模式可能会因为资源共享而导致很多问题,所以为了更好地隔离资源,我们可以考虑为每个提交的作业启动一个集群,这就是单作业(Per-Job)模式,这样作业之间就不会相互影响。

单作业模式

单作业模式就是严格的一对一集群与作业,集群只为这个作业而生,由客户端运行应用程序,然后启动集群,作业被提交给 JobManager,进而分发给 TaskManager 执行。

作业作业完成后,集群就会关闭,所有资源也会释放。可以看出每个作业都有它自己的 JobManager 管理,占用独享的资源,即使发生故障,它的 TaskManager 宕机也不会影响其他作业。 这些特性使得单作业模式在生产环境运行更加稳定,所以是实际应用的首选模式。但是 Flink 本身无法直接这样运行模式,所以单作业模式一般需要借助一些外部资源管理框架来启动集群,比如 YARN、Kubernetes。

3、应用模式(Application Mode)

前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给 JobManager 的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给JobManager,如果运行的作业比较多,而且在同一个客户端提交作业时,就会增加客户端所在节点的资源消耗,甚至可能导致节点宕机。

解决办法就是,不通过客户端直接把应用提交到 JobManger 上运行。而这也就代表着,我们需要为每一个提交的应用单独启动一个 JobManager,也就是创建一个集群。这个 JobManager 只为执行这一个应用而存在,执行结束之后 JobManager 也就关闭了,这就是所谓的应用模式,如下图:

应用模式

应用模式与单作业模式,都是提交作业之后才创建集群。单作业模式是通过客户端来提交的,客户端解析出的每一个作业对应一个集群;而应用模式下,只创建一个集群,直接由 JobManager 执行应用程序的,在 JobManager 上直接调用应用程序的main()方法。

写在最后的话

Flink 支持多种不同的运行模式,还可以和不同的资源管理平台方便地集成。本文介绍了 Flink 的几种运行模式的区别,以及不同运行模式的优缺点讲解。实际应用时,一般需要和资源管理平台结合起来,选择特定的模式来分配资源、部署应用。

本次分享就到这里,希望你能有所收获。码字不易,欢迎点赞关注。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/725871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存