第 199 题:流处理的资源调度,Task Slot的负载均衡?
题目
流处理的资源调度,Task Slot的负载均衡?
完整讲解
一、流处理的资源模型
Flink 中作业由 Task 组成,每个 Task 运行在 Task Slot 上;Slot 是 TaskManager 上的资源单元(通常 1 slot = 1 个并行子任务)。资源调度:将 Task 分配到 Slot,并尽量均衡负载,避免单 Slot 过载导致反压、延迟高。
二、Task Slot 与并行度
- 并行度:一个算子的并行度决定其有多少个并行子任务(subtask),每个 subtask 占 1 个 slot。同一 Job 内,不同算子可设不同并行度(需满足链与资源);总 slot 数 ≥ 各算子并行度之和(若 slot sharing 则可共享同一 slot 内多算子)。
- Slot Sharing:默认同 Job 的多个算子可共享同一 slot(一个 slot 内可跑多个 subtask),提高资源利用率;可禁用以实现隔离。
三、负载均衡
- 数据倾斜:若上游分区导致某 subtask 收到远多于其他的数据,该 subtask 所在 slot 负载高,成为瓶颈。缓解:重新分区(rebalance、rescale)、加盐打散热点 key、本地聚合减轻下游压力。
- 调度:Flink 将 subtask 分配到可用 slot 时,考虑共址(同一 TM 减少网络)、分散(同一算子分散到多 TM 提高容错);资源不足时等待 slot 或扩容。
- 监控:通过 busy/time backpressure、各 subtask 的吞吐与缓冲 发现不均衡;调并行度、分区策略或资源(slot 数、TM 数)使负载更均匀。
面试要点
- 能说清 Task、Slot、并行度的关系;能解释 Slot Sharing 及对资源利用的影响。
- 能说明负载不均衡的成因(数据倾斜、分区)与缓解:重分区、加盐、本地聚合。
- 能简述调度考虑(共址、分散)与监控指标(backpressure、吞吐、缓冲)。
记忆要点
- Slot=资源单元,1 subtask 占 1 slot;Slot Sharing=多算子共享 slot。负载均衡=防数据倾斜(重分区、加盐)。
- 调度=共址与分散;监控=backpressure、吞吐、缓冲,调并行度与分区。