概述

flink中支持多种窗口,包括:时间窗口,session窗口,count窗口等,本文简单介绍这些窗口的原理,并通过例子说明如何使用这些窗口。

时间窗口(Time Windows)

最简单常用的窗口形式是基于时间的窗口,flink支持两种时间窗口:

翻滚时间窗口(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.

时间窗口(Time Windows)的原理和使用相关推荐

  1. Flink从入门到真香(12、Flink一大利器-时间窗口)

    flink中支持多种窗口,包括:时间窗口,session窗口,统计窗口等等,能想到的基本都可以实现 时间窗口(Time Windows) 最简单常用的窗口形式是基于时间的窗口,flink支持三种种时间 ...

  2. 限流算法-固定时间窗口

    本文介绍了固定时间窗口限流算法. 前言 首先限流的算法有很多种,比如固定时间窗口限流算法.滑动时间窗口算法.漏桶算法.令牌桶算法,其余的算法后续我们会一一介绍. 一.限流场景 站在服务调用方的角度来说 ...

  3. Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例

    我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题.Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理.本文将 ...

  4. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    @TOC初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程 [1]什么是windows API Windows API 中文翻译过来就是windows应用程序接口(Applica ...

  5. 【Flink】各种窗口的使用(处理时间窗口、事件时间窗口、窗口聚合窗口)

    文章目录 一 Flink 中的 Window 1 Window (1)Window概述 (2) Window类型 a 滚动窗口(Tumbling Windows) b 滑动窗口(Sliding Win ...

  6. Flink教程(3) 大白话 时间 窗口 watermark

    大白话 时间 窗口 watermark 一.前言 二.流处理术语 1 延迟和吞吐 1.1 延迟 1.2 吞吐 2 数据流上的操作 2.1 数据接入和数据输出 2.2 转换操作 2.3 滚动聚合 2.4 ...

  7. sentinel 时间窗口_Sentinel使用令牌桶实现预热【原理源码】

    前言 Sentinel的QPS流控效果有快速失败.预热模式.排队等待.预热+排队等待模式,本文主要分析预热模式中是如何使用令牌桶算法限流的. 一.流控效果源码结构 在FlowRule更新缓存时,根据配 ...

  8. Java 实现滑动时间窗口限流算法,你见过吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | dijia478 来源 | https://w ...

  9. 窗口消息——Windows核心编程学习手札之二十六

    窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...

最新文章

  1. 《孤独是一个人的清欢》读书感悟
  2. 获取客户端真实IP地址
  3. laravel5.6 数据库获取数据模式变为’数组‘
  4. linux docker导入镜像,Docker镜像的导入和导出
  5. apache ignite_Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序
  6. 推荐系列文章:《DotText源码阅读》
  7. linux bash 历史记录,Linux Bash History 命令历史记录
  8. java中logger关闭log_Log4J如何关闭Logger对象的IO流资源
  9. codeblocks修改MINGW位置使它能编译Build
  10. 关于CMR和SMR技术硬盘的选择
  11. c语言中find的作用,c语言find函数的用法详解
  12. Linux下 df 命令查看磁盘空间
  13. android 微博一键关注,新浪微博怎样一键关注多个好友
  14. V831——PWM驱动舵机
  15. linux中常用的压缩命令,Linux中常用的压缩和解压缩命令汇总
  16. X3D制作简易三维动画
  17. 计算机函数说课ppt,《excel公式与函数》说课稿
  18. [转]从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA
  19. 易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)
  20. 大学计算机操作题模拟,《大学计算机基础》上模拟试卷操作题

热门文章

  1. 基于STC89C52RC单片机制作的红外循迹小车(4个传感器)
  2. STC89C52RC定时器2串口通信
  3. Linux 快照 (snapshot) 原理与实践(二) 快照功能实践
  4. Java后端开发常考面试题大全
  5. 【OQPSK】基于MATLAB/FPGA的OQPSK实现
  6. JavaScript的基本原理
  7. 数据库包含哪几种锁?
  8. EAUML日拱一卒 历史状态
  9. Ubuntu系统管理 ——使用dpkg安装、查看、卸载软件包
  10. 小程序商品规格选择高亮功能的实现