首页 > 数据库 >FlinkSQL窗口函数TUMBLE、SESSION 和 HOP的区别

FlinkSQL窗口函数TUMBLE、SESSION 和 HOP的区别

时间:2024-07-26 14:28:33浏览次数:12  
标签:PROCTIME 窗口 TUMBLE FlinkSQL SESSION 时间 事件 HOP

目录

TUMBLE 滚动窗口(Tumbling Window)

SESSION 会话窗口(Session Window)

HOP 滑动窗口(Hopping Window)

小结

HOP 窗口为什么不需要rowtime(事件时间)

 PROCTIME() vs row_time

 为什么 HOP 窗口常用 PROCTIME()?

总结

TUMBLE、SESSION可以使用处理时间嘛

TUMBLE 窗口(滚动窗口)

SESSION 窗口(会话窗口)

总结


TUMBLESESSIONHOP。它们各自的窗口行为和使用场景有所不同

TUMBLE 滚动窗口(Tumbling Window)

滚动窗口是一种固定大小、不重叠的窗口。每个事件只属于一个窗口。

在这个查询中,TUMBLE 窗口定义了一个10秒的固定窗口,每个窗口从row_time的每10秒开始计算。例如,窗口将从00:00:0000:00:10,然后从00:00:1000:00:20,依此类推

SESSION 会话窗口(Session Window)

会话窗口根据不活动时间(gap)来定义窗口。事件之间的时间间隔超过指定的gap时,将生成一个新的窗口。

在这个查询中,SESSION 窗口定义了一个会话窗口,gap为10秒。这意味着,如果两个事件之间的时间间隔超过10秒,将创建一个新的会话窗口。

HOP 滑动窗口(Hopping Window)

滑动窗口是一种固定大小且可以重叠的窗口。每个事件可以属于多个窗口。

在这个查询中,HOP 窗口定义了一个10秒的窗口,每5秒滑动一次。这意味着每个窗口大小为10秒,并且每5秒开始一个新的窗口。由于窗口重叠,每个事件可能会属于多个窗口。

小结

  1. TUMBLE 窗口:固定大小的窗口,事件只属于一个窗口。
  2. SESSION 窗口:基于不活动时间间隔(gap)的窗口,适合不规则的事件流。
  3. HOP 窗口:固定大小且可以重叠的窗口,事件可以属于多个窗口。

选择哪种窗口取决于你的应用场景和需求。例如,如果你需要固定时间间隔的统计,可以选择 TUMBLE 窗口;如果你需要处理不规则事件流,可以选择 SESSION 窗口;如果你需要频繁的时间间隔统计,可以选择 HOP 窗口

HOP 窗口为什么不需要rowtime(事件时间)

在Flink SQL中使用 HOP 滑动窗口时,HOP 函数的时间字段通常使用的是 PROCTIME(),而不是 row_time。下面是原因和详细解释:

 PROCTIME() vs row_time

  • PROCTIME(): 代表处理时间(Processing Time),即事件被处理的时间。处理时间是Flink系统的本地时间,适用于实时性要求高的应用或当事件时间不重要时使用。

  • row_time: 代表事件时间(Event Time),即事件产生的实际时间。事件时间是从数据流中提取的时间戳,适用于需要基于事件实际时间进行处理的应用。

 为什么 HOP 窗口常用 PROCTIME()

  • 滑动窗口的特性: HOP 窗口通常用于需要在时间上重叠的统计,例如每隔5秒计算10秒窗口内的统计量。使用 PROCTIME() 可以让你基于系统时间来滑动窗口,适用于需要实时处理的场景。

  • 实时数据处理: 在很多实时数据处理应用中,系统时间(PROCTIME())足以满足需求。使用 PROCTIME() 可以避免因为事件时间的延迟或乱序引入复杂性。

  • 简化使用: 对于简单的实时分析或流处理任务,使用 PROCTIME() 可以简化窗口操作,因为不需要处理复杂的事件时间问题,如乱序、延迟等

总结

  • 使用 PROCTIME() 时,HOP 窗口基于系统时间滑动,适合实时数据处理。
  • 使用 row_time 时,HOP 窗口可以基于事件时间滑动,适合需要处理事件时间的场景。

选择哪个时间字段取决于你的业务需求和数据特性。如果实时性和简洁性更重要,PROCTIME() 是一个很好的选择;如果事件时间更重要,则使用 row_time

TUMBLE、SESSION可以使用处理时间嘛

 在Flink SQL中,TUMBLESESSION 窗口通常用于事件时间,但它们也可以使用处理时间。如果你选择使用处理时间,Flink提供了 PROCTIME() 函数来获取系统当前时间

TUMBLE 窗口(滚动窗口)

使用处理时间的示例

在这个例子中,PROCTIME() 返回处理时间,窗口从每10秒的处理时间开始计算。每个事件会按照处理时间被划分到相应的窗口中。

SESSION 窗口(会话窗口)

使用处理时间的示例

在这个例子中,PROCTIME() 返回处理时间。会话窗口会基于处理时间中的不活动间隔(gap)进行划分,每当两个事件之间的处理时间间隔超过10秒,就会创建一个新的会话窗口

总结

  • TUMBLE 窗口:可以使用事件时间或处理时间。使用处理时间时,每个事件根据系统当前时间划分到固定大小的窗口中。
  • SESSION 窗口:也可以使用事件时间或处理时间。使用处理时间时,会话窗口基于事件的处理时间间隔来定义窗口。

选择使用事件时间还是处理时间取决于你的业务需求。如果事件的实际发生时间重要(例如,日志数据或用户活动数据),通常使用事件时间;如果系统时间和实时性更为关键(例如,实时监控数据),则可以使用处理时间

标签:PROCTIME,窗口,TUMBLE,FlinkSQL,SESSION,时间,事件,HOP
From: https://blog.csdn.net/weixin_64261178/article/details/140714413

相关文章

  • 会话技术-Cookie&Session
    目录会话跟踪技术会话会话跟踪CookieCookie基本使用概念工作流程基本使用发送Cookie获取CookieCookie原理分析Cookie使用细节Cookie的存活时间Cookie存储中文SessionSession基本使用概念工作流程基本使用Session原理分析Session使用细节Session钝化与活......
  • shiro中session的使用
    下图是shiro中session的存放使用逻辑使用shiro中的session的步骤一、创建SessionFactory的实现类,实现createSession方法@OverridepublicSessioncreateSession(SessionContextinitData){OnlineSessionsession=newOnlineSession();if(initData!=null&&initDatai......
  • mybatisPlus3.4 自定义sqlSessionFactory sql注入器失效、mybatis-plus批量插入报错In
    文章目录一、报错背景二、解决方法在mybatis-plus项目中集成自定义批量插入方法后报错。以下整理一下报错及解决方法。一、报错背景mybatis-plus是不提供insertList批量插入方法的,本人在自定义批量插入方法后,启动时正常,但是执行到insertList时报错。org.apache.i......
  • 基于 Session 实现短信登录
    短信验证 一、基于Session1、登录流程1)发送验证码用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户2)短信验证码登录、注册用户将验证码和......
  • SpringBoot升级到3.3.2版本,JDK升级到17,引入Mybatis-plus后启动报错:Property 'sqlSessi
    【问题描述】2024-07-23T15:16:07.174+08:00WARN2604---[questionnaire][main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependen......
  • 一段时间后登录时 Flask 出现 SESSION_COOKIE_NAME 错误
    直到最近,一切都很好,但现在我的网站不断给出“SESSION_COOKIE_NAME”和“NoneType”对象没有属性“修改”错误。但令人感兴趣的是,如果我更改代码,错误如何消失一段时间并不重要。请帮助知识渊博的人这里是代码最重要的部分:importosimportplotly.expressaspximportcs50......
  • JWT 没那么神秘,用它换掉 Session + Cookie 认证
    本项目代码已开源,具体见fullstack-blog。数据库初始化脚本:关注公众号程序员白彬,回复关键词“博客数据库脚本”,即可获取。背景引入在《前端轻松拿捏!最简全栈登录认证和权限设计!》一文中,我们掌握了如何基于Session+Cookie实现一个基本的登录认证功能,这是一个经得起时......
  • 分布式环境下,如何实现 Session共享
    先了解一下为什么会出现这种session共享的解决方案?随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集群下,此时就会出现一个问题:当用户进行一个session会话的时候,比如一个用户去登录项目,一般的大公司的项目都是有Nginx进......
  • 封禁 NetBIOS Session Service 和 SMB 服务(特别是旧版本的SMB)可能是出于安全性考虑。
    封禁NetBIOSSessionService和SMB服务(特别是旧版本的SMB)可能是出于安全性考虑。这两种服务在过去的实现中存在一些安全漏洞和风险,特别是在现代网络环境中,这些风险可能会被利用来进行攻击或者未经授权的访问。下面是一些常见的安全考虑:中间人攻击:未加密的NetBIOS和旧版本......
  • Cookie、Session、JWT在koa中的应用及实现原理
    Cookie、Session、JWT在koa中的应用及实现原理  目录Cookie重要属性实现原理cookie签名实现原理注意事项Session实现原理JWT使用方式组成实际应用实现原理前端存储方式cookiesessionlocalStoragesessionStoragetoken区别 CookieHTTP......