资源槽的概念
1.一个TaskManager就是一个单独的JVM(java进程)
2.一个TaskManager中如果有多个slot,会将TaskManager托管的内存进行等分;一个TaskManager中也可以只有一个slot,该slot中的subtask独占整个TaskManager中的内存
3.每个slot中的内存都是相互独立的,在同一个TaskManager中,多个slot还有共享内存
4.slot使用的线程没有隔离,最好让cpu的逻辑核的数量和TaskManager中的slot数量保持一致(避免线程频繁切换)
5.整个集群槽的数量,就是一个程序可以执行的最大并行度,即又多少个槽,程序的并行度就可以多大(程序运行的并行度,不能大于可用槽的数量)
6.一个TaskManager中有多个slot,好处是可以共享TCP连接,多路复用,共享心跳信息,共享内存和数据结构
7.Flink默认情况下允许同一个job不同Task的subtask共享资源槽,可以提高资源利用率,增大程序的并行度
共享资源槽
1.flink的算子默认的共享资源槽的名称为default,可以调用slotSharingGroup方法修改算子共享资源槽的名称
2.如果修改了算子的共享资源槽组的名称,该算子对应的subtask的后面所有的subtask的工作资源槽组名称都会随着改变(就近跟随原则)
3.一个slot如果被设置了共享资源槽名称,只有共享资源槽名称相同的subtask可以进入到同一个槽张中