
Flink 分区是指数据流在算子子任务SubTask间的分发机制核心作用是决定上游数据如何路由到下游并行实例以支持并行计算、负载均衡及状态一致性 。核心概念物理本质Flink 中的“分区”对应下游算子的并行子任务SubTask。一个流Stream被切分为多个分区每个分区由一个子任务处理子任务运行在不同的线程、Slot 或节点上 。逻辑作用控制数据流向。当上下游并行度不一致或需要重分布数据时如keyBy、shuffle必须通过分区器将数据重新分配若并行度一致且无需重分布则默认采用直通Forward模式 。两类模式One-to-One窄依赖数据不跨节点重分布仅本地转发如map、filter默认行为。Redistributing宽依赖数据需重新洗牌分发到不同子任务如keyBy、rebalance。内置分区策略Flink 提供多种内置分区器通过 API 调用指定分发规则Forward转发默认策略仅当上下游并行度一致时使用数据发往本地对应的下游子任务无网络开销 。Rebalance轮询循环均匀分发到所有下游子任务强制跨节点负载均衡解决数据倾斜 。Shuffle随机随机选择下游通道近似均匀分布但网络开销较大 。Rescale重缩放类似轮询但仅在本地组内分发减少跨节点网络 IO要求上下游并行度成倍数关系 。KeyGroupStream按键分区keyBy底层实现相同 Key 的数据哈希后落入同一分区保障状态聚合一致性 。Broadcast广播每条数据复制并发送给所有下游子任务常用于维表关联 。Global全局所有数据强制发往下游第一个子任务ID0易导致瓶颈慎用 。Custom自定义通过partitionCustom实现业务特定的分发逻辑 。关键区别分区 vs 分组分区Partitioning物理/逻辑上将流切分给不同子任务处理关注数据去哪算并行度维度。分组Grouping逻辑上将相同 Key 的数据归集关注哪些数据在一起算业务维度。keyBy同时实现两者相同 Key 必同分区但同分区未必同 Key 。