1. taskmanger是flink集群中的工作节点,对jobmanager提供服务,负责部署jobGraph,每个taskmanager拥有固定数量的slot(可配,一般默认为cpu的数量)
    2. slot是taskmanager持有资源的抽象,taskmanager的slot数量限制着它能接收的job数量。slot只能隔离内存,无法隔离cpu
    3. 在flink job中每个算子都有自己的并行度,默认为1。(一个job所能分配到的slot数量) >= ( job中所有算子的最大并行度)。一个job的slot数量 = group1.maxParalism + group2.maxParalism + …. group表示slotgroup
    4. 如果job要求的slot数量超过剩余slot数量就会被拒绝
    5. 并行度可以直接认为是算子的工作线程的数量。与slot数量结合起来看,并行度越高的算子会导致job能分配到的slot数量越多,其他job在资源总量不变的情况能够分配到slot数越少,变相地限制了其他job的并行度。
    6. 假设所有算子运行同样的任务,那么算子本身的CPU占用取决于算子的线程数占taskmanager所有线程的比重(因为所有job的工作线程都在taskmanager这个java进程中)。这样做好处是可以充分利用CPU。如果像K8s那样每个job严格控制用量,那么会造成忙的得不到CPU,闲的不占CPU,导致忙的job性能上不去。
    7. slot本身除了能隔离job之间的内存,其用量还可以用来平衡各个算子的cpu占用,但这个平衡是通过线程数量来实现的,无法做到精确的分配,也无法限制总用量。