知识卡片
增量聚合与全量聚合的空间与灵活性取舍
内容
窗口内的聚合计算有两种路径:增量聚合(reduce/aggregate/sum等)每来一条新元素就立刻和已有的中间结果合并,窗口里只需要缓存一个聚合值,不保留原始元素,内存占用恒定、效率高,但只能表达”可以增量合并”的计算(求和、最值等);全量聚合(apply/process)则把窗口内的全部原始元素都缓存下来,等触发时一次性拿到完整集合再计算,可以支持中位数、去重计数这类必须看到全量数据才能算出的逻辑,代价是窗口越大、元素越多,内存占用就越高。选择哪种本质上是在问:这个统计量能不能被拆成”新值和旧结果合并”这种结合律运算——能就用增量聚合换空间效率,不能就只能上全量聚合并接受更高的内存开销。
参考来源
《Flink入门与实战》第3章《时间和窗口》