今天有一个同学在群里面问了如下一个问题:
“每输入条记录,都会立即执行四次。。”
------
因为一直都是用的event time + watermark的方式来做的流,不太清楚他这个情况。一度以为是事件被复制了多份,导致了窗口Function被触发多次。
后来看了一下源码,发现这个问题其实很简单。reduce function跟普通的function不一样,需要等待窗口内的所有数据到齐之后再开始计算。而是窗口内数据条数大于1的时候就会触发一次reduce function,使窗口内始终保存一条数据。
至于上面问题中的被执行四次,那是因为有四个窗口。简单画一下:
可能画的有点抽象,简而言之就是事件时间点都被4个(window size/slide size)窗口所拥有,亦,这个事件会被分配给4个窗口,所以,才会有上面都每一个窗口addElement触发了reduce function的问题。
对应源码:
WindowOperator