Flink中窗口的时间不是根据进入窗口的第一个元素计为窗口的开始时间和加Size计窗口结束时间,而是根据Flink内置计算公式timestamp - (timestamp - offset + windowSize) % windowSize
计算。
/**
* Method to get the window start for a timestamp.
*
* @param timestamp epoch millisecond to get the window start. (记录时间戳)
* @param offset The offset which window start would be shifted by. (偏移时间,默认为0)
* @param windowSize The size of the generated windows. windowSize. (为窗口大小)
* @return window start
*/
public static long getWindowStartWithOffset(long timestamp, long offset, long windowSize) {
return timestamp - (timestamp - offset + windowSize) % windowSize;
}
timestamp - (timestamp - offset + windowSize) % windowSize:
其中括号内的windowSize用于防止相减后结果负数,offset默认为0。整个公式可以演变为timestamp - (timestamp) % windowSize
,当前时间戳timestamp减去余数,剩下的恰好是窗口的整数倍。
关注公众号 数据工匠记
,专注于大数据领域离线、实时技术干货定期分享!个人网站 www.lllpan.top