Flink 原理架构总结

一、流式任务执行过程1.任务并行按照自己的理解,一个流程如下图所示,除非经历shuffle过程,否则流程并行度将由source的并行度决定,比如kafka分区数目,shuffle之后的并行度,可能会改变,Operator子任务(Task)彼此独立,并且可以在不同的线程中执行,并且可能在不同的机器或容器上执行。2.OperatorChain原理同Spark的Satge划分相似,为了减少数据在传输过程...

Flink 原理架构总结
一、流式任务执行过程1.任务并行

� � �按照自己的理解,一个流程如下图所示,除非经历shuffle过程,否则流程并行度将由source的并行度决定,比如kafka分区数目,shuffle之后的并行度,可能会改变,Operator子任务(Task)彼此独立,并且可以在不同的线程中执行,并且可能在不同的机器或容器上执行。

2.OperatorChain

� � 原理同Spark 的Satge划分相似,为了减少数据在传输过程中的序列化和反序列化损耗,将一些可以合并的Task进行合并,合并之后称多个Task为一个OperatorChain,在遇到Shuffle和用户编程时强制截断时,不进行合并。

二、架构1.组成

� � a. JobClient是Flink程序和JobManager交互的桥梁(同Spark Driver),主要负责接收程序、解析程序的执行计划、优化程序的执行计划,然后提交执行计划到JobManager。

� � b.JobManager是一个进程,主要负责申请资源,协调以及控制整个job的执行过程,具体包括,调度任务、处理checkpoint、容错等等,在接收到JobClient提交的执行计划之后,针对收到的执行计划,继续解析,因为JobClient只是形成一个operaor层面的执行计划,所以JobManager继续解析执行计划(根据算子的并发度,划分task),形成一个可以被实际调度的由task组成的拓扑图,如上图被解析之后形成下图的执行计划,最后向集群申请资源,一旦资源就绪,就调度task到TaskManager。

� � c.TaskManager是一个进程,及一个JVM(Flink用java实现)。主要作用是接收并执行JobManager发送的task,并且与JobManager通信,反馈任务状态信息,比如任务分执行中,执行完等状态,上文提到的checkpoint的部分信息也是TaskManager反馈给JobManager的。如果说JobManager是master的话,那么TaskManager就是worker主要用来执行任务。在TaskManager内可以运行多个task。多个task运行在一个JVM内有几个好处,首先task可以通过多路复用的方式TCP连接,其次task可以共享节点之间的心跳信息,减少了网络传输。

2.Task 执行

� �Spark中每个Stage中的Task会被分配到一个Worker中的 -> Executor容器里面的 -> 一个线程池中被执行,Flink称每个Executor为一个TaskManager,每个TaskManager中会有多个slot作为内存隔离:

Spark:Worker� ——>� �Executor� ——>� 线程池� ——>� 线程

Flink:� Worker� ——>� �TaskManager� ——>� Slot� ——>� 线程

� � Slot是TaskManager资源粒度的划分,每个Slot都有自己独立的内存。所有Slot平均分配TaskManger的内存,比如TaskManager分配给Solt的内存为8G,两个Slot,每个Slot的内存为4G,四个Slot,每个Slot的内存为2G,值得注意的是,Slot仅划分内存,不涉及cpu的划分。同时Slot是Flink中的任务执行器(类似Storm中Executor),每个Slot可以运行多个task,而且一个task会以单独的线程来运行。Slot主要的好处有以下几点:
可以起到隔离内存的作用,防止多个不同job的task竞争内存。
Slot的个数就代表了一个Flink程序的最高并行度,简化了性能调优的过程
允许多个Task共享Slot,提升了资源利用率,举一个实际的例子,kafka有3个partition,对应flink的source有3个task,而keyBy我们设置的并行度为20,这个时候如果Slot不能共享的话,需要占用23个Slot,如果允许共享的话,那么只需要20个Slot即可(Slot的默认共享规则计算为20个)。

Slot 注意点:
a.隔离内存

b.Slot共享并不是必须配置,但是启用可以加速任务执行

c. Task 共享同一个Slot,需要满足:不同Task但是属于同一个SlotShardingGroup,默认所有的Task属于同一个default组

d.在不开启Slot共享的情况下,Slot数量和Flink并行度相同,Slot 解析资料链接

源文地址:https://www.guoxiongfei.cn/csdn/5115.html
0