Flink架构

1 Flink 任务提交流程

TaskManager是一个独立的jvm进程。

每个task slot表示TaskManager拥有资源的一个固定大小的子集。假如一个TaskManager有三个slot,那么它会将其管理的内存分成三份给各个slot。

slot就是运行在本进程下的独立资源集合,非线程概念,slot是cpu共享,内存隔离。一个slot并不代表一个线程,它里面并不一定只放一个task。多个task在一个slot就涉及slot sharing group。

2 Flink Yarn任务提交流程

代码就是stream Graph或者data Graph

client生成job graph(operator chain优化,把很多串行任务合在一起,前提是one to one,类似spark的窄依赖,并且并行度要一致。代码中env.disableOperatorChaining()可以设置不用这个优化方式。)

job manager 上生成 ExecutionGraph,并行度分开了

task manager上最终执行。

3 TaskManager和slot

每个 task slot 表示 TaskManager 拥有资源的一个固定大小的子集。假如一个TaskManager 有三个 slot,那么它会将其管理的内存分成三份给各个 slot。资源 slot化意味着一个 subtask 将不需要跟来自其他 job 的 subtask 竞争被管理的内存,取而代之的是它将拥有一定数量的内存储备。需要注意的是,这里不会涉及到 CPU 的隔离,slot 目前仅仅用来隔离 task 的受管理的内存。

Slot共享
通过调整 task slot 的数量,允许用户定义 subtask 之间如何互相隔离。如果一个TaskManager 一个 slot,那将意味着每个 task group 运行在独立的 JVM 中(该 JVM可能是通过一个特定的容器启动的),而一个 TaskManager 多个 slot 意味着更多的subtask 可以共享同一个 JVM。而在同一个 JVM 进程中的 task 将共享 TCP 连接(基于多路复用)和心跳消息。它们也可能共享数据集和数据结构,因此这减少了每个task 的负载。

 

并不是一个slot只运行一个task线程, 可以根据每个task,比如source, map等如果不是资源密集型可以共享同一个线程处理,甚至某个并行度下的完整pipeline。

下图的例子是source,map,keyby并行度都是6,sink并行度是1,最终不是需要13个slot(source,map可以自动的调整为一个task运行),而只需要6个slot就可以了。注意图中一个小方框才代表一个线程,而不是一个slot是一个线程。

当然可以通过sharing group来设置不同task在不同的slot里面,可以设置一对一的关系。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值