flink部署模式总结

基于flink-1.15.0

不依赖外部资源管理框架

flink local 部署模式

此部署模式主要用于测试

flink standalone 部署模式

此部署模式,由flink自己负责资源管理分配

flink application 部署模式

此部署模式,main函数在jobmanager运行并生成job graph,减轻客户端压力

部署方式:flink部署模式(一)- standalone和application

flink on yarn

flink部署模式总结_第1张图片

Session Mode on yarn

此部署模式,共享jobmanager和taskmanager,所有的job都在一个runtime中运行。
flink部署模式总结_第2张图片

优点:
启动集群只有jobmanager,提交job才去yarn申请资源启动taskmanager,任务完成自动释放taskmanager,资源伸缩性好。
资源利用率高。
缺点:
资源隔离性差

Per-Job Mode on yarn

独享jobmanager和taskmanager,为每一个job独胆启动一个runtime
flink部署模式总结_第3张图片

优点:
资源充分隔离
劣势:
资源相对比较浪费

Application Mode on yarn #

application的main()运行在jobmanager上,而不是在客户端。每一个application对应一个runtime,application中可以含有多个job。
flink部署模式总结_第4张图片

优点:
job graph在flink集群内部生成,可以减轻客户端压力
application实现了更合理的资源隔离策略
缺点:
新功能,尚未经过生产大规模验证

部署方式:flink部署模式(二)- yarn三种部署模式

flink on k8s

standalone k8s session mode

预先构建 Flink 集群,且该集群长期处于运行状态,但不能自动扩缩容。用户通过 client 提交作业到运行中的 JobManager,而 JobManager 将任务分配到运行中的 TaskManager。
flink部署模式总结_第5张图片

优点:

  • Flink 集群是预先启动运行的,用户提交作业的时候,作业可以立即分配到 TaskManager,即作业启动速度快。

缺点:

  • 资源利用率低,提前确定 TaskManager 数量,如果作业需要的资源少,则大量 TaskManager 处于闲置状态,反之 TaskManager 资源不足。
  • 作业隔离性差,多个作业的任务存在资源竞争,相互影响。如果一个作业异常导致 TaskManager 挂了,该 TaskManager 上的全部作业都会被重启。

部署方式:flink部署模式(三)- standalone k8s session 部署模式

standalone k8s application mode

每个作业独占一个 Flink 集群,当作业完成后,集群被回收。
需要预先构建应用镜像,Flink 镜像需要包含作业即Application 依赖的 Class。
启动作业的时候需要指定 Main 函数入口类。
flink部署模式总结_第6张图片

优点:

  • 一个作业独占一个集群,作业的隔离性好。
    缺点:
  • 需要预先构建应用镜像,比较麻烦
  • 资源利用率低,需要提前确定 TaskManager 数量,如果作业需要的资源少,则大量 TaskManager 处于闲置状态,反之 TaskManager 资源不足。同时JobManager 不能复用。

部署方式:flink部署模式(四)- standalone k8s application 部署模式

native k8s session mode#

类似【standalone k8s session mode】模式,需要预先构建JobManager。不同点是用户通过 Flink Client 向 JobManager 提交作业后,
根据作业需要的 Slot 数量,JobManager 直接向 Kubernetes 申请 TaskManager 资源,最后把作业提交到 TaskManager 上。

flink部署模式总结_第7张图片

优点:

  • TaskManager 的资源是实时的、按需进行的创建,对资源的利用率更高。
  • 资源伸缩性好,job结束以后,空闲的TaskManager会被销毁以释放资源。

缺点:

  • job真正运行起来的时间较长,因为需要等待 TaskManager 创建。

部署方式:flink部署模式(五)- native k8s session部署模式

native k8s application mode #

类似 【standalone k8s application mode】 模式,每个作业独占一个 Flink 集群,当作业完成后,集群也会被回收。
不同点是 Native 特性,即 Flink 直接与 Kubernetes 进行通信并按需申请资源,无需用户指定 TaskManager 资源的数量。
flink部署模式总结_第8张图片

优点:

  • 一个作业独占一个集群,作业的隔离性好。
  • 资源利用率相对较高,按需申请 JobManager 和 TaskManager。

缺点:

  • 需要预先构建应用镜像,比较麻烦
  • 一个作业独占一个集群,JobManager 不能复用。
  • 作业启动较慢,在作业提交后,才开始创建 JobManager 和 TaskManager。

部署方式:flink部署模式(五)- native k8s application部署模式

总结

  • 如果是yarn做资源管理,推荐使用【Application Mode on yarn】 ,同时结合yarn依赖预上传设置。

  • 如果是k8s做资源管理,推荐使用【native k8s session mode】或者【native k8s application mode】,有更好的资源利用率和资源伸缩性。若使用session模式,main()函数在客户端生成job graph,增加客户端压力;若使用application模式,可能需要频繁去构建应用镜像。这需要根据具体使用场景去综合评估。

你可能感兴趣的:(flink,flink,java,big,data)