1 Flink 任务提交流程

TaskManager是一个独立的jvm进程。

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

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

Flink架构

2 Flink Yarn任务提交流程

代码就是stream Graph或者data Graph

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

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

task manager上最终执行。

Flink架构

3 TaskManager和slot

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

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

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

Flink架构

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章: