debug一下找到reduce算子的调用链,进到下图这个类里面
主要去看下图这个函数
1. 先拿到 这次进入的value
2.判断是不是在历史状态values里面,拿到历史聚合过的状态值。(这里就已经初步可以看出flink的基于状态是怎么回事了)
2.如果在的话,就调用你new 的reduceFunction里面实现的reduce函数逻辑,将历史状态值和这次进入的value进行聚合,然后调用outpur.collect进行输出(凡是算子最后调用这个函数来进行输出)
4 如果不在的话,也就是 新value,把它放入历史状态values中,等待下次进入的value进行上述操作。