知识卡片

WindowAssigner、Trigger与Evictor的职责分离

专业/工作 · 499.c.1

内容

Flink把一个窗口算子拆成三个独立可替换的职责:WindowAssigner只负责”这条数据应该归入哪个(或哪些)窗口”,即窗口的划分规则;Trigger只负责”这个窗口现在该不该触发计算”,跟数据具体归属哪个窗口无关;Evictor是可选的,负责在触发计算前或后剔除窗口里的部分元素,不影响触发判断本身。三者顺序在一次窗口执行中依次生效:先分配、再判断触发、触发时可选地先剔除再计算。这种拆分让”窗口怎么划”“什么时候算”“算哪些数据”三个决策互不耦合,开发者可以自由组合,比如用固定的滚动窗口分配规则搭配自定义的数量触发器,而不需要重新实现整个窗口逻辑,是一种典型的关注点分离设计。

参考来源

《Flink入门与实战》第3章《时间和窗口》