写在前面:
- 不仅要做知识的搬运工,还要做知识的再加工,让印象更加深刻。
- 参考链接:详情链接
- 下面对参考链接的某一部分做更详细的说明,方便以后查看。
图示6处的说明: - 1.slot中文意思"插槽"
- slot表示taskmanager可管理内存的一个固定大小的子集(默认均分)。比如taskmanager的管理内存是3GB,假如有两个slot,那么每个slot就仅仅有1.5GB内存可用。
- 默认情况下,flink允许子任务共享slot,即使他们是不同任务的子任务(前提是他们来自同一个job),这样,一个slot就可以保存作业的整个通道。比如这个slot中的三个任务就是不同任务的子任务。
- 2.并行度,一个特定算子的子任务的个数被称之为其并行度,可以认为一个流程序的并行度是:所有算子中最大的并行度(一个程序中,不同的算子并行度可能不同)。
- 可以看到source算子被分成了6个子任务,所以它的并行度就是6。
- 另外source和map由于任务链被链接成了一个task。任务链优化的前提是相同并行度且是one to one(类似于spark中的窄依赖)操作。好处是减少线程之间的切换和基于缓存区的数据交换(因为合并成一个subtask了,即共用一个线程),在减少时延的同时提升吞吐量。
- 3.因为是资源密集型的算子的子任务在不同的slot中,所以可以做到负载均衡。
- 4.非资源密集型的子任务和资源密集型的子任务不被放到同一个slot中的意义何在?可能是有些taskmanager的资源不够放非密集型,资源够的放资源密集型?(子任务还是放到不同的slot中,所以负载也是均衡的)
- 5.如1中所述
- 6.实际并行度可以在代码中、提交时、集群配置文件中设定。优先级是代码>提交任务时>集群配置