知识卡片
窗口的本质是状态的一个索引维度
内容
窗口本身只是一个ID标识符加一点元数据(比如起止时间),并不真正存储属于这个窗口的数据元素;真正的元素集合(或已经聚合的中间值)存放在状态(State)里,State的Key就是窗口本身,Value才是元素集合或聚合值。也就是说”窗口”这个概念在实现层面并不是一种独立的数据结构,而是状态存取时多加的一层索引维度——原本按业务Key取状态,现在按”业务Key+窗口”这个复合Key取状态。这个视角解释了为什么窗口数量一多、每个窗口保留的数据量一大,状态后端的压力就会显著上升:窗口机制的资源消耗本质上就是状态存储的消耗,二者从来不是两件独立的事。这个索引维度的切分规则具体有哪几种,见[[三种窗口类型的本质区别]]。
参考来源
《Flink入门与实战》第3章《时间和窗口》