首页 > 其他分享 >Flink 中的时间和窗口

Flink 中的时间和窗口

时间:2024-01-24 10:25:26浏览次数:17  
标签:窗口 Flink 会话 Window 时间 滑动 数据

在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一条就得处理一条,那么我们怎么统计最近一段时间内的数据呢?引入“窗口”。

所谓的“窗口”,一般就是划定的一段时间范围,也就是“时间窗”;对在这范围内的数据进行处理,就是所谓的窗口计算。所以窗口和时间往往是分不开的。

1.窗口

1.概念

Flink 是一种流式计算引擎,主要是来处理无界数据流的,数据源源不断、无穷无尽。想要更加方便高效地处理无界流,一种方式就是将无限数据切割成有限的“数据块”进行处理,这就是所谓的“窗口”(Window)

在Flink中,将流切割成有限大小的多个窗口;每个数据都会分发到对应的窗口中,当到达窗口结束时间时,就对每个窗口中收集的数据进行计算处理。

注意:Flink 中窗口并不是静态准备好的,而是动态创建——当有落在这个窗口区间范围的数据达到时,才创建对应的窗口。另外,这里我们认为到达窗口结束时间时,窗口就触发计算并关闭,事实上“触发计算”和“窗口关闭”两个行为也可以分开。

2.分类

1.按照驱动类型分

窗口本身是截取有界数据的一种方式,所以窗口一个非常重要的信息其实就是“怎样截取数据”。换句话说,就是以什么标准来开始和结束数据的截取,我们把它叫作窗口的“驱动类型”。

  • 时间窗口(Time Window)
    时间窗口以时间点来定义窗口的开始(start)和结束(end),所以截取出的就是某一时间段的数据。到达结束时间时,窗口不再收集数据,触发计算输出结果,并将窗口关闭销毁。
  • 计数窗口(Count Window)
    计数窗口基于元素的个数来截取数据,到达固定的个数时就触发计算并关闭窗口。每个窗口截取数据的个数,就是窗口的大小。

2.按照窗口分配数据的规则分类

根据分配数据的规则,窗口的具体实现可以分为 4 类:滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)、会话窗口(Session Window),以及全局窗口(Global Window)。

  • 滚动窗口(Tumbling Windows)
    滚动窗口有固定的大小,是一种对数据进行“均匀切片”的划分方式。窗口之间没有重叠,也不会有间隔,是“首尾相接”的状态。这是最简单的窗口形式,每个数据都会被分配到一个窗口,而且只会属于一个窗口。

滚动窗口可以基于时间定义,也可以基于数据个数定义;需要的参数只有一个,就 是 窗口的大小 ( window size)。比如我们可以定义一个长度 为1小时的滚动时间窗口,那么每个小时就会进行一次统计;或者定义一个长度为10的滚动计数窗口,就会每10个数进行一次统计。

滚动窗口应用非常广泛,它可以对每个时间段做聚合统计,很多BI分析指标都可以用它来实现。

  • 滑动窗口(Sliding Windows)
    滑动窗口的大小也是固定的。但是窗口之间并不是首尾相接的,而是可以“错开”一定的位置。

定义滑动窗口的参数有两个:除去窗口大小(window size)之外,还有一个“滑动步长”(window slide),它其实就代表了窗口计算的频率。窗口在结束时间触发计算输出结果,那么滑动步长就代表了计算频率。

当滑动步长小于窗口大小时,滑动窗口就会出现重 叠,这时数据也可能会被同时分配到多个窗口中。而具体的个数,就由窗口大小和滑动步长的比值(size/slide)来决定。

滚动窗口也可以看作是一种特殊的滑动窗口-窗口大小等于滑动步长(size = slide)。

滑动窗口适合计算结果更新频率非常高的场景

  • 会话窗口(Session Windows)
    会话窗口,是基于“会话”(session)来来对数据进行分组的。会话窗口只能基于时间来定义。

会话窗口中,最重要的参数就是会话的超时时间,也就是两个会话窗口之间的最小距离。如果相邻两个数据到来的时间间隔(Gap)小于指定的大小(size),那说明还在保持会话,它们就属于同一个窗口;如果gap大于size,那么新来的数据就应该属于新的会话窗口,而前一个窗口就应该关闭了。

会话窗口的长度不固定,起始和结束时间也是不确定的,各个分区之间窗口没有任何关联。会话窗口之间一定 是不会重叠的,而且会留有至少为size的间隔(session gap)。

在一些类似保持会话的场景下,可以使用会话窗口来进行数据的处理统计。

  • 全局窗口(Global Windows)
    “全局窗口”,这种窗口全局有效,会把相同key的所有数据都分配到同一个窗口中。这种窗口没有结束的时候,默认是不会做触发计算的。如果希望它能对数据进行计算处理,还需要自定义“触发器”(Trigger)。

全局窗口没有结束的时间点,所以一般在希望做更加灵活的窗口处理时自定义使用。Flink中的计数窗口(Count Window),底层就是用全局窗口实现的。

3.窗口 API 概览

1.按键分区(Keyed)和非按键分区(Non-Keyed)

2.代码中窗口 API 的调用

4.窗口分配器

5.窗口函数

6.其他 API

2.时间语义

3.水位线(Watermark)

标签:窗口,Flink,会话,Window,时间,滑动,数据
From: https://www.cnblogs.com/fanqisoft/p/17984022

相关文章

  • 麒麟操作系统登录界面的等待时间
    如何在grub添加启动参数WelcometoopenKylin1.0(GNU/Linux6.1.0-3-genericx86_64)*Support:https://openkylin.topLastlogin:TueJan2320:20:132024from192.168.10.1*Support:https://openkylin.topLastlogin:TueJan2320:20:132024f......
  • linux CentOS MobaXterm 通过X11 Forwarding 在本地开启图形可视化窗口
    第一步操作系统安装图形界面X11Forwardingdnfinstallxorg-x11-xauthxorg-x11-fonts-*xorg-x11-font-utilsxorg-x11-fonts-Type1xclock1第二步修改参数,启用X11Forwardingvim/etc/ssh/sshd_config1修改参数X11Forwardingyes和X11UseLocalhostno#AllowAgentForwarding......
  • java Future多个任务的超时时间问题
    问题publicstaticvoidmain(String[]args)throwsInterruptedException,ExecutionException,TimeoutException{ExecutorServiceexecutor=Executors.newSingleThreadExecutor();Future<String>future=executor.submit(()->"......
  • 记录一下跑flink官方案例 table Api 进行实时报告
     按照官方文档下载https://github.com/apache/flink-playgrounds  flink-playgrounds代码并在idea里面打开 按照官方案例在spendReport上面加上相关代码 dockfile  echo"taskmanager.numberOfTaskSlots:30">>/opt/flink/conf/flink-conf.yaml;不然会报资......
  • 鸿蒙5.0发布时间已定!鸿蒙系统上的App开发新思路
    直接在百度上搜索「鸿蒙5.0发布时间」,出来的结果,那一个比一个焦虑~~百度的AI基于综合内容判断得出,鸿蒙5.0的发布时间在2023-04-17百度知道推的答案是202年年4月中但不管几月,“鸿蒙元年”似乎都是确定的,就是2024年。   鸿蒙5.0如此独特,直接引导......
  • go-carbon v2.3.6 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
    carbon是一个轻量级、语义化、对开发者友好的golang时间处理库,支持链式调用。目前已被awesome-go收录,如果您觉得不错,请给个star吧github.com/golang-module/carbongitee.com/golang-module/carbon安装使用Golang版本大于等于1.16//使用github库goget-ugithu......
  • bat启动多个ping 窗口持续ping同时开启指定的软件 批处理
    将代码复制存为BAT 修改IP,和软件路径即可使用。 @echooffcdclsstartcmd/c"TITLEPingServer192.168.103.7&&ping192.168.103.7-t"startcmd/c"TITLEPingServer192.168.100.156&&ping192.168.100.156-t"startcmd/c"TITLEPing......
  • 数据库优化---空间换时间优化
       在查询优化中,有一个重要的概念:空间换取查询时间     这一理论最好的应用就是:数据仓库(OLAP):在海量数据库里(一般是TB级)分析数据,通过对数据的ETL和计算汇总,得到有用的数据,并通过不同维度查看统计数据(一般比较少),实现上钻和下钻分析数据。   现在讨论一下在OLTP系统中空间......
  • MySQL事件自动kill运行时间超时的SQL
    delimiter$createeventmy_long_running_trx_monitoronscheduleevery1minutestarts'2015-09-1511:00:00'oncompletionpreserveenabledobegindeclarev_sqlvarchar(500);declareno_more_long_running_trxintegerdefault0;declarec_......
  • Layui select实现赋值和主动触发选择时间,及radio实现可取消
    Layuiselect赋值,并主动触发选择事件//Layuiselect赋值,并主动触发选择事件//Input:selectId:ID选择器,selectFilter:lay-filter名称,value:需要的赋值,text:显示文本值functionsetSelect(selectId,selectFilter,value,text){//赋值$(selectId).find("option[va......