一.Flink Runtime
1.运行时架构
Client
JobManager(master节点)
TaskManager(Salve节点)
角色通信(Akka)
数据传输(Netty)
每个Woker(TaskManager)是一个JVM进程,有一个或多个子任务,通过task slot控制。
一个TaskManager通过Slot(任务槽)来控制它上面可以接受多少个task(仅限内存托管,目前CPU未做隔离),Slot均 分TaskManager所托管的内存。
同一个TaskManager中的task共享TCP连接(通过多路复用)和心跳消息。它们还可以共享数据集和数据结构,从而减少每个任务的开销。
TaskManger有N个槽位,只能接受N个Task吗?不是,有共享槽位。
2.Operator Chain
如上图Flink会把Source和map合并成一个Operator Chain。
Operator Chain优点和组成条件
编程改变Operator Chain行为
3.共享槽位
Flink运行subtasks共享slot,资源更充分利用,Flink集群需要的Task Slot与作业中使用的最高并行度正好相同(前提保持默认SlotSharingGroup)
4.SlotSharingGroup
根据上游决定,如果设置group,后续都会变。
ColocationGroup
强制保证并行度一样的subtask在一个slot里面,用于迭代流(机器学习)
5.Slot与Parallelism并行关系
Source=3
Map=4
Sink=4
所以task slot 使用是4
设置并行度,10+ Map之后的Group(test)的Max是20 = 30