Flink Runtime
Flink 运行时架构
- Client: 提交Job
- JobManager:
- TaskManager:
- 角色间通讯(Akka):
- 数据的传输(Netty):
1. Slot 分配与共享
每个Task Manager
-
OperatorChain:
每个task里面有1或者n个operator, 多个operator的时候就会购成operatorChain. 组成一个task.
所有的operator组成可以组成的operatorchain之后会减少task个数, 不至于每个operator开启一个task, 占用一个slot.- 减少线程切换, 序列化/反序列化, 缓冲区的交换…
-
slot共享运行task.
- 同一个job里面的task才可以.
-
SlotShardingGroup: 修改自动共享的逻辑
-
尽量让subtasks共享一个slot.保证同一个group并行度相同的sub-tasks共享一个slots.
-
算子(task)默认group为default
-
使用方法
// 为filter归类到group1中 someStream.filter(...).slotShardingGroup("group1");
-
一个未设置slotSharingGroup的group要根据上游算子和本身共同确定的.
-
适当设置可以减少slot线程数
-
-
coLocationGroup: 强制共用group.
2. Slot 与 parallelism 的关系
- 一个应用需要多少个Slot?
- 不设置slotSharingGroup, 都是一个group, slot数为应用的最大并行度.
- 设置了group, 每个group的slot不共享, slot数就是所有group里面的slot数的和.