须知
flink获取逻辑核的方式是通过java的RunTime获取的
如何划分task和subtask
为何要划分
- 因为task之间有依赖关系,有的task必须等到父task执行完才能执行,而同一个task中的算子可以以pipeline的形式执行,效率高。
- 方便容错和缓存
- 方便优化
何时划分
task的并行度就是subtask数,flink也是可以合并算子的,类似于spark的pipline,flink叫operator chain
- 并行度发生变化时,算子调用setParallelism
- keyBy() /window()/apply() 等发生 Rebalance 重新分配,并行度发生改变
- shuffle(flink叫redistributing)、
- 调用 startNewChain() 方法,开启一个新的算子链;
- 调用 diableChaining()切分task,即:告诉当前算子操作不使用 算子链 操作。
针对内存密集型、CPU密集型,使用 startNewChins()、disableChaining()方法,可以将当前算子单独放到一个 Task 中,使其独享当前Task的所有资源,以此来提升计算效率。
改变并行度的算子
startNewChain:从当前ds之前,发生redistributing
disableChaining:当前算子之前之后都切断,当前算子单独划分task。目的是为了有些算子比较复杂时,cpu或内存需求比较大,跟其他方式配合,可以实现独享solt,不用跟其他算子组成task共享solt。
setSharingGroup:同一app下,多个subtask运行在同一个slot中。

本文详细介绍了Apache Flink中如何划分Task和Subtask,以及划分的原因,包括优化执行效率、容错和资源管理。内容涵盖并行度设定、算子链的创建与切分、以及如何根据任务需求调整Task的资源占用。同时,讨论了slot的概念,以及如何手动调度任务到特定资源上,确保任务执行的高效与灵活。
最低0.47元/天 解锁文章
5418

被折叠的 条评论
为什么被折叠?



