Flink实时数仓之任务部署模式


标题: Flink实时数仓之任务部署模式
时间: 2021-07-24 09:10:16
标签: [Flink,实时数仓]
分类: 实时数仓

大家好,我是Lee,最近在研究Flink任务的远程提交,所以需要了解它能不能实现远程提交,怎么提交,有哪几种模式运行flink实时任务,今天给你们介绍一下。且看下文。
why_flink

不同的模式,主要区别就在于集群的生命周期和任务的资源调度上。还有就是任务的main方法是在client上还是cluster上执行的。
deployment_mode

1.local cluster
就是在你搭建的flink集群上执行flink run,没有指定-m(mode)参数,即为local模式,该模式方便调试,开发时使用方便,在flink web ui端可以查看到相应的任务。

2.application mode
应用的main方法执行在cluster端。
main方法执行在client的话,有一个坏处就是,启动时,需要从集群中下载所有的依赖到client端,抽出程序的执行图JobGraph,然后将依赖项和JobGraph发送到集群中其他机器,这样对client机器的网络带宽和cpu有很大的一个资源压力,在客户端被许多用户共享使用时,这个问题会更加明显。application mode的main方法执行在cluster端。就没有这个问题。

另外,application mode为每个提交的应用分别创建一个cluster,main()方法在Jobmanager端执行,为每一个应用创建一个cluster可以被看作是创建一个仅在特定程序的作业之间共享的会话集群,当应用结束后,即销毁cluster资源。

在这种架构模式下,拥有per-job模式的资源隔离优势。并且main()方法执行在jobmanager中,可以节约cpu和带宽。

相比于per-job模式,application mode模式允许提交的应用中包含多个作业,作业的执行顺序不受部署模式的影响,而是受调用的先后顺序,使用execute()是阻塞的,第一个启动的作业必须结束后才能启动第二个作业。executeAsync()是非阻塞的,这样第二个job可以在第一个job未执行完之前就启动起来。

而且,application mode允许一个应用多作业并行执行时,它是不支持高可用的,必须在单个应用单个作业时才是高可用的。

在application mode下,当一个应用中跑了多个作业(使用的是executeAsync()),你如果取消其中一个作业,其他的所有作业均会停止,并且jobmanager会关闭。

使用方法:

# 启动application mode任务
./bin/flink run-application -t yarn-application ./examples/streaming/TopSpeedWindowing.jar

# List running job on the cluster
./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

3.per-job
应用的main方法执行在client端。

利用现有的资源管理器,如yarn、kubernetes,为每个应用启动单独的集群。每个提交的应用,需要付出启动集群的代价。好处是,更好的保证了jobs之间资源不共享,这样的话,每个集群的生命周期跟单个任务绑定在一块,任务结束就释放了资源。比如某个应用出错了,影响到了taskmanager,导致TaskManager挂了,并不会影响其他任务的TaskManager。所以基于这些优点,生产上推荐这种模式。

使用方法:

# 启动任务
./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar

# List running job on the cluster
./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>

4.session mode
应用的main方法执行在client端。

集群的生命周期是非独立的,包含了所有的running job,资源是共享的。

优点就是集群已经启动起来了,每个提交的任务不需要单独启动集群,使用现有的资源即可,缺点是如果某一个任务出错导致TaskManager挂了,那么其他所有的运行中的任务都会受到影响。

# 启动任务
./bin/flink run -t yarn-session \
  -Dyarn.application.id=application_XXXX_YY \
  ./examples/streaming/TopSpeedWindowing.jar

综上所述,总结下来,application mode和per-job mode适合生产使用,因为资源隔离,互不影响是最关键的。

参考链接:https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/deployment/overview/

ok,完成


书山有路勤为径,学海无涯苦作舟。

欢迎关注微信公众号:【程序员写书】
程序员写书

喜欢宠物的朋友可以关注:【电巴克宠物Pets】
电巴克宠物

一起学习,一起进步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenzuoli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值