1.概述
windowOperator 处理元素的示意图下
对照代码如下
- 首先来了一条数据,那么我们要判断这个元素是归属到哪个window了,因为一个数据可能属于多个window,所以这个可能给你的是多个window的序列。
- window的计算一定是根据keyBy来计算的。所以要算这个元素的key是什么
- 然后遍历所有的window
- 判断这个数据是不是延迟了,如果延迟了,比如这个窗口都过期了,窗口都不存在了,那么就不处理,我觉得这里可以输出到outputTag
- 将元素放到状态中,存着,比如放到list中,
还不能计算,只是在内存中
- 然后根据trigger去判断这个数据是否可以进行触发计算了,比如时间到了。
- 从list中获取数据,然后进行计算。
- 如果是purge window包装了,那么需要清除状态。参考【Flink】Flin