flink实战—时间窗口(Time Windows)的原理和使用
概述
flink中支持多种窗口,包括:时间窗口,session窗口,count窗口等,本文简单介绍这些窗口的原理,并通过例子说明如何使用这些窗口。
时间窗口(Time Windows)
最简单常用的窗口形式是基于时间的窗口,flink支持两种时间窗口:
- 一种是翻滚时间窗口(tumbling time window)
- 一种是滑动时间窗口(sliding time window)
翻滚时间窗口(tumbling time window)
翻滚时间窗口的窗口是固定的,比如设定一个1分钟的时间窗口,该时间窗口将只计算当前1分钟内的数据,而不会管前1分钟或后1分钟的数据。
如上图所示,编写了一个1分钟的翻滚窗口,用来收集最后一分钟的值,并在1分钟结束时输出它们的总和。
从上图可见,该窗口只会计算从当前计时开始的1分钟内的数据,当1分钟完成时输出结果。然后,从完成这一刻起开始计算1分钟内的数据,依次类推。
一个翻滚窗口的定义如下:
val env = StreamExecutionEnvironment.getExecutionEnvironmentval text = env.socketTextStream("localhost", 9999)val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }.map { (_, 1) }.keyBy(0).timeWindow(Time.seconds(5)) //定义一个5秒的翻滚窗口.sum(1)
滑动时间窗口(sliding time window)
滑动窗口,顾名思义,该时间窗口是滑动的。所以,从概念上讲,这里有两个方面的概念需要理解:
- 窗口:需要定义窗口的大小
- 滑动:需要定义在窗口中滑动的大小,但理论上讲滑动的大小不能超过窗口大小
下面我们来看一个图例:
如上图所示,定义了一个1分钟的滑动窗口。在第一个滑动窗口中,将值9,6,8和4相加,得到结果27。接着,窗口滑动半分钟(例如,在我们的示例中为2个值),此时窗口中的值为8,4和7,3,产生结果22,以此类推。
可以在Flink中定义1分钟的滑动窗口,每30秒滑动一次,定义如下:
stream.timeWindow(Time.minutes(1), Time.seconds(30))
定义中,1分钟为窗口时间,30秒为滑动时间。
滑动窗口使用例子
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Timeobject WindowWordCount {def main(args: Array[String]) {println("start word count")val env = StreamExecutionEnvironment.getExecutionEnvironmentval text = env.socketTextStream("localhost", 9999)val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }.map { (_, 1) }.keyBy(0).timeWindow(Time.seconds(5), Time.seconds(3)) // 定义了一个滑动窗口,窗口大小为5秒,每3秒滑动一次.sum(1)counts.print()println("end word count")env.execute("Window Stream WordCount")println("exit now!")}
}
可以在另一个终端通过命令nc -lk 9999输入一些数据,查看一下效果,并理解一下。
this is a test, time windows.
为了,省去编译和打包的麻烦,可以直接在flink的scala-shell中,修改一下上面的程序,把evn改成senv。
val text = senv.socketTextStream("localhost", 9999)val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } } .map { (_, 1) } .keyBy(0) .timeWindow(Time.seconds(5), Time.seconds(3)) .sum(1)counts.print()senv.execute("Window Stream WordCount")
总结
本文介绍了flink中事件窗口的基本概念。时间窗口在流式计算中是一个非常核心的概念,需要很好的理解。
flink实战—时间窗口(Time Windows)的原理和使用相关推荐
- 时间窗口(Time Windows)的原理和使用
概述 flink中支持多种窗口,包括:时间窗口,session窗口,count窗口等,本文简单介绍这些窗口的原理,并通过例子说明如何使用这些窗口. 时间窗口(Time Windows) 最简单常用的窗 ...
- java Flink滚动时间窗口聚合TumblingProcessingTimeWindows运算例子
整个的思路是: 构造数据源 窗口聚合代码 1. 构造数据源 首先构造数据,新建一个MyData2.java的文件,写入这个MyData2的类 package create_data;import ja ...
- Flink从入门到真香(12、Flink一大利器-时间窗口)
flink中支持多种窗口,包括:时间窗口,session窗口,统计窗口等等,能想到的基本都可以实现 时间窗口(Time Windows) 最简单常用的窗口形式是基于时间的窗口,flink支持三种种时间 ...
- 限流算法-固定时间窗口
本文介绍了固定时间窗口限流算法. 前言 首先限流的算法有很多种,比如固定时间窗口限流算法.滑动时间窗口算法.漏桶算法.令牌桶算法,其余的算法后续我们会一一介绍. 一.限流场景 站在服务调用方的角度来说 ...
- Flink实战—基于时间窗口定时输出sink
Flink时间窗口运用 上一篇介绍了Flink定时读取外部数据Flink 定时加载外部文件数据并广播 这一篇将介绍Flink定时输出到外部存储介质,有两种办法实现,一种是同上一篇一样,在RichXXX ...
- Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例
我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题.Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理.本文将 ...
- 【Flink】各种窗口的使用(处理时间窗口、事件时间窗口、窗口聚合窗口)
文章目录 一 Flink 中的 Window 1 Window (1)Window概述 (2) Window类型 a 滚动窗口(Tumbling Windows) b 滑动窗口(Sliding Win ...
- Flink教程(3) 大白话 时间 窗口 watermark
大白话 时间 窗口 watermark 一.前言 二.流处理术语 1 延迟和吞吐 1.1 延迟 1.2 吞吐 2 数据流上的操作 2.1 数据接入和数据输出 2.2 转换操作 2.3 滚动聚合 2.4 ...
- 万字详述 Flink SQL 4 种时间窗口语义!(收藏)
DML:窗口聚合 大家好我是老羊,由于窗口涉及到的知识内容比较多,所以博主先为大家说明介绍下面内容时的思路,大家跟着思路走.思路如下: ⭐ 先介绍 Flink SQL 支持的 4 种时间窗口 ⭐ 分别 ...
- Flink学习:Flink如何打印窗口的开始时间和结束时间
Window 一.简介 二.代码实现 三.测试 一.简介 大家知道,Flink用水位线和窗口机制配合来处理乱序事件,保证窗口计算数据的正确性,当水位线超过窗口结束时间的时候,就会触发窗口计算 水位线是 ...
最新文章
- java并发编程实战:第十六章----Java内存模型
- 贪吃蛇游戏(c/c++)
- win10 docker desktop无法拉取镜像解决办法
- Linux 2.6.32-279.el6.x86_64 ANDROID SDK碰到”LIBC.SO.6: VERSION `GLIBC_2.14′ NOT FOUND”的解决方法(1)
- codevs 1576 最长严格上升子序列
- 【树链剖分】LCA(P4211)
- 前端学习(3246):react的生命周期getSnap
- Javascript 之《函数传参到底是值传递还是引用传递》
- 微课|玩转Python轻松过二级:第3章课后习题解答2
- 按值传递和按引用传递的区别_c++按值、地址、引用传递参数
- 将网页转换成PDF文件的N种方式
- android studio svn 忽略文件
- OpenLayers坐标转换
- 《S.忒修斯之船》读后感600字心得体会
- MySQL必知必会(2)
- 分立式数码管循环显示数字0到9.
- catia v5r21保姆级下载安装教程
- CSDN没有适配竖屏显示器(3840x2160)
- Mysql如何添加环境变量(详细教程)
- 通过Kali Linux暴力破解WiFi密码
热门文章
- 让我康康,是谁进了 Hack for wuhan 初赛?
- JavaScript与浏览器
- html不能默认IE浏览器,编辑告诉您win7如何设置ie为默认浏览器的完全解决办法
- ios备忘录下载安卓版_ios8备忘录安卓版下载,ios8备忘录app软件下载安卓版 v3.0-开心路...
- C1能力认证考试训练任务01-进制与信息编码
- sprintf函数的使用方法
- 【saas公司案例】易快报与浦发云资金
- 数字化转型投入大、效果差,永洪BI如何帮助企业迈出数据应用第一步
- 华为路由器:AR真机忘记Console口密码的处理方法全过程演示
- Java -- 定时任务实现方式