在电商大促(如双11)场景下,大商家(热点大 Key)引发的计算倾斜和 TaskManager OOM 是实时计算(如 Flink / Spark Streaming)中最经典的高频痛点。 针对这种“旱的旱死,涝的涝死”的情况,核心解决思路是“打散(Scatter)+ 聚合(Gather)”。以下是按实现难度和场景分类的系统性解决方案: --- 一、 核心方案:两阶段聚合(Two-Phase Aggregation) 这是解决热点 Key 聚合最根本、最通用的方法。将单点计算压力分摊到整个集群。 1. 第一阶段:打散(Local Aggregation) 给原本的 加上一个随机前缀或后缀(例如 的随机数),将同一个大商家的数据强行打散到 $N$ 个不同的 Task 中进行局部聚合。 伪代码: 效果: 千万级订单被平均分给了 100 个 Task,每个 Task 计算局部结果(例如局部 SUM)。 2. 第二阶段:汇总(Global Aggregation) 将第一阶段的局部聚合结果去掉随机后缀,恢复成真正的 ,再次进行 ,做全局最终聚合。 伪代码: 效果: 此时流入大商家 Tas...