Flink整体架构(中)| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第7天
业务逻辑转换为一个 Streaming DataFlow Graph:
分布式处理: ——添加并发度
假设作业的sink算子的并发配置为1,其余算子并发为2 紧接着会将上面的Streaming DataFlow Graph转化 Parallel Dataflow (内部叫Execution Graph) :——因此出现一个逻辑基因图。
从map——keyby,是没有明确指向的,所以两两互指
但其他的都是幂指性的。
为了更高效地分布式执行,Flink 会尽可能地将不同的operator链接(chain)在一起形成Task。 这样每个Task 可以在一个线程中执行,内部叫做OperatorChain,如下图的source和map算子可以Chain在一起。
对于Sourse和map的操作,在上游Sourse读完数据之后,紧接着就做map的一些操作,继而做一些Parse的操作,整个过程不需要有哈希的一些操作,所以说可以把这两个数据taskChain在一起
两个数据Chain在一起在真正的物理执行上就是说Sorse和map都可以在一个线程里面去执行,比如说Sorse,读完一条数据之后,紧接着map依旧去做相应的解析。
它会带来一定的优化,因为它减少了所使用的线程。假设我们没有chain的话,Sourse是一个线程,然后map是一个线程,这样的话需要两个线程 但在真正去处理时,其实会有线程的之间的一些切换,并且需要从一个线程发到另外一个线程,还需要一些操作。所以说Flink为了支持这种能力,就在这里有一个优化。一旦这两个算子Chain在一起,其实就可以当成一个算子在处理,当成一个task在处理,只是说Sourse读完数据,紧接着map去做处理,它们是在一个线程中去串行的执行,可以减少线程之间的切换,并且减少数据的序列化与反系列化 如果结合Flink本身的一个实现机制的话,它能够减少数据在TM缓冲区的一些交换,以及在减少延迟的同时提高了整体的一个吞吐率。
最后将上面的Task调度到具体的TaskManager中的slot中执行,一个Slot 只能运行同一个task的subTask
- 如图一个TM可以包含三个Slot,其实TM中包含Slot数都是可以自由分配的
- Slot:每个slot在TM里面,是一个单独的线程再去执行。
- 可以把task放到slot上,slot在TM里面,其实Slot之间的资源,比如说它的cpu,并没有严格去隔离,但是内存的话,有一部分会做了一些隔离,但是其实并没有严格的隔离

浙公网安备 33010602011771号