热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flink滚动窗口函数的开窗起始时间计算规则

结论:窗口的开始时间,并不一定是最早的记录时间,而是一个计算出来的时间Flink的窗口函数起始时间计算公式:timest

结论:窗口的开始时间,并不一定是最早的记录时间,而是一个计算出来的时间

Flink的窗口函数起始时间计算公式:

timestamp - (timestamp - offset + windowSize) % windowSize
# timestamp为最早时间的记录时间戳
# offset 为参数偏移时间
# windowSize为窗口大小
# 以上计算单位全部统一到毫秒再进行计算

业务代码: .window(TumblingEventTimeWindows.of(Time.seconds(3L)))

其中滚动窗口api:TumblingEventTimeWindows of(Time size, Time offset)

源码:

类:org.apache.flink.streaming.api.windowing.windows.TimeWindow
public static long getWindowStartWithOffset(long timestamp, long offset, long windowSize) {return timestamp - (timestamp - offset + windowSize) % windowSize;
}

如果offset不输入,默认为0,那么起始时间就是timestamp - timestamp+windowsize和windowsize的取模,假定以秒为小单位。

输入时间是个偶数秒T,windowsize长度为2s,offset为0的情况下,那么经过取模部分值为0,起始时间就是T。

写个小程序计算下启动时间:

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;public class WindowStartTimeCalculate {public static void main(String[] args) throws Exception {String[] ss = {"2020-04-20 10:12:44", "2020-04-20 8:50:44", "2020-04-20 14:12:44", "2020-04-20 18:12:44", "2020-04-20 20:12:44"};for (String date : ss) {cac(Time.days(1L), date, Time.hours(16L));}}/*** @param w 窗口大小* @param d 事件时间* @param o 偏移时间* @throws Exception*/public static void cac(Time w, String d, Time o) throws Exception {LocalDateTime parse = LocalDateTime.parse(d, DateTimeFormatter.ofPattern("yyyy-MM-dd H:mm:ss"));long timestamp = parse.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();long offset = o.toMilliseconds();long windowSize = w.toMilliseconds();long startTime = timestamp - (timestamp - offset + windowSize) % windowSize;System.out.println("offset:" + offset + ", windowSize: " + windowSize + ", " + startTime + "--" + LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault()));}
}

窗口1天:

偏移时间不填写,那么起始时间是:2020-04-20T08:00

偏移时间1小时Time.hours(1L),那么起始时间是:2020-04-20T09:00

依次类推...

偏移时间16小时,则起始时间为:2020-04-20T00:00

偏移时间23小时,则起始时间为:2020-04-20T07:00

 

窗口3s,规律不明显,大部分都是-1s:

offset:0, windowSize: 3000, record:2020-04-20 10:12:01 ,startTime:2020-04-20T10:12:00
offset:0, windowSize: 3000, record:2020-04-20 08:50:14 ,startTime:2020-04-20T08:50:12
offset:0, windowSize: 3000, record:2020-04-20 14:12:37 ,startTime:2020-04-20T14:12:36
offset:0, windowSize: 3000, record:2020-04-20 18:12:49 ,startTime:2020-04-20T18:12:48
offset:0, windowSize: 3000, record:2020-04-20 20:12:50 ,startTime:2020-04-20T20:12:48

窗口10s,则起始时间以事件时间个位数为0的时间开始:

offset:0, windowSize: 10000, record:2020-04-20 10:12:01 ,startTime:2020-04-20T10:12:00
offset:0, windowSize: 10000, record:2020-04-20 8:50:14 ,startTime:2020-04-20T08:50:10
offset:0, windowSize: 10000, record:2020-04-20 14:12:37 ,startTime:2020-04-20T14:12:30
offset:0, windowSize: 10000, record:2020-04-20 18:12:49 ,startTime:2020-04-20T18:12:40
offset:0, windowSize: 10000, record:2020-04-20 20:12:50 ,startTime:2020-04-20T20:12:50

窗口5秒:

offset:0, windowSize: 5000, record:2020-04-20 10:12:01 ,startTime:2020-04-20T10:12:00
offset:0, windowSize: 5000, record:2020-04-20 8:50:14 ,startTime:2020-04-20T08:50:10
offset:0, windowSize: 5000, record:2020-04-20 14:12:37 ,startTime:2020-04-20T14:12:35
offset:0, windowSize: 5000, record:2020-04-20 18:12:49 ,startTime:2020-04-20T18:12:45
offset:0, windowSize: 5000, record:2020-04-20 20:12:50 ,startTime:2020-04-20T20:12:50

窗口为500毫秒,偏移为空值,则起始时间就是最早记录:

offset:0, windowSize: 500, record:2020-04-20 10:12:01 ,startTime:2020-04-20T10:12:01
offset:0, windowSize: 500, record:2020-04-20 8:50:14 ,startTime:2020-04-20T08:50:14
offset:0, windowSize: 500, record:2020-04-20 14:12:37 ,startTime:2020-04-20T14:12:37
offset:0, windowSize: 500, record:2020-04-20 18:12:49 ,startTime:2020-04-20T18:12:49
offset:0, windowSize: 500, record:2020-04-20 20:12:50 ,startTime:2020-04-20T20:12:50

 


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
author-avatar
李纯皓_922
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有