Flink系列文档-(YY09)-Flink时间语义

news2025/4/3 22:08:06

1 三种时间语义

在实时流式计算中,"时间"是一个能影响计算结果的非常重要因素!

试想场景:每隔1分钟计算一次最近10分钟的活跃用户量:

①假设此刻的时间是13:10,要计算的活跃用户量时间段为:[ 13:00,13:10 );

②有一条行为日志中记录的用户的行为时间是12:59,但到达flink计算程序时已是13:02;

那么,这个用户是否要纳入本次计算的结果中呢?看如何定义:

①如果时段 [13:00 , 13:10 )定义的是用户行为的发生时间(数据中的业务时间),则不应纳入;

②如果时段 [13:00 , 13:10 )定义的是计算时的时间,则应该纳入;

上面的问题是:数据的产生时间和数据的处理时间不一致

flink内部为了直观地统一计算时所用的时间标准,特制定了两种时间语义:

  1. processing time   处理时间
  2. event time  事件时间
  3. Ingestion time 注入时间

时间语义主要影响 "窗口计算" ;

 2 两种时间语义

时间语义,是flink中用于时间推进和时间判断的机制;

时间推进和时间判断,以什么为标准,就产出了两种不同的时间语义;

  1. 以 processing time为依据,则叫做处理时间语义
  2. 以 event time为依据,则叫做事件时间语义

  时间语义的设计意义 

process(EventLog eventlog){
Long  eventTime  =  eventLog.getTimestamp();
Long  processTime = System.currentMillimise()
      // 用户完全可以自己根据需求中的时间定义来进行相应的计算
}

Flink为什么还要搞出一个  “事件时间语义”:时间按数据中的业务时间戳来推进!

主要是,实时流式计算中,有大量跟时间相关的统计需求,比如:时间窗口计算定时器等,而这些需求,如果都让用户像上面的代码那样自己去进行判断、处理,那么它觉得自己的api不够强大!

所以,flink想在api的层面,将两类时间定义的计算需求进行api层面的统一,它才搞出这么一种”事件时间语义“,有了这种语义,那么,处理时间 和  事件时间,都可以看成 ”时间”

用户在不同时间定义下,要进行一个定时动作时,就不需要再像上面的代码那种去进行各种判断,而是一个统一的动作:  到 xxx时间,给我做个什么事!

process(EventLog eventlog,TimeStamp timestamp){

      // 不管需求是需要用哪种时间来计算,用户代码只需要看到一个timestamp了

}

代码中的timestamp到底是事件时间,还是处理时间,取决于环境中设置的“时间语义”

  处理时间(processing time)语义

Processing Time是指数据被Operator处理时所在机器的系统时间。

处理时间遵循客观世界中时间的特性:单调递增,恒定速度,永不停滞,永不回退;

  事件时间(event time)语义

Event Time是指在数据本身的业务时间(如用户行为日志中的用户行为时间戳);

Event Time语义中,时间的推进完全由流入flink系统的数据来驱动:

数据中的业务时间推进到哪,flink就认为自己的时间推进到了哪

它可能停滞,也可能速度不恒定,但也一定是单调递增不可回退

3 设置时间语义

1.12及以后,flink以event time作为默认的时间语义,在需要指定时间语义的相关操作(如时间窗口)时,可以通过显式的api来使用特定的时间语义;

上面我们介绍到 时间语义主要影响 "窗口计算" ;

API设置时间语义

keyedStream.window(SlidingEventTimeWindows.of(Time.seconds(5),Time.seconds(1)));

keyedStream.window(SlidingProcessingTimeWindows.of(Time.seconds(5),Time.seconds(1)));

keyedStream.window(TumblingEventTimeWindows.of(Time.seconds(5)));

keyedStream.window(TumblingProcessingTimeWindows.of(Time.seconds(5)));

 API中禁用时间语义

如果需要禁用event time机制,则可以通过设置watermark生成频率间隔来实现:

// 如果设置为0,则禁用了watermark的生成;从而失去了event time语义

ExecutionConfig.setAutoWatermarkInterval(long)

提示:如果需要使用已过期的 ingestion time,可以通过设置恰当的watermark来实现; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】类和对象(下)

​🌠 作者:阿亮joy. 🎆专栏:《吃透西嘎嘎》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉再谈构造…

kindle自定义屏保之自定义字帖

kindle自定义屏保之自定义字帖 01 前言 毕业以后,很少动笔写字了,某天要手写一堆材料,写出来实在不忍直视,于是当晚下班后突发奇想——能不能把一些字帖搞成kindle屏保,摆在桌面上,睡前说不准还能练练 随…

web课程设计 基于html+css+javascript+jquery女性化妆品商城

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

软件测试基础知识

软件测试基础知识1.测试模型2.测试分类3.测试目的与原则4.测试流程5.测试发展规划6.单元测试7.黑盒测试8.白盒测试9.缺陷1.测试模型 瀑布模型 开发将系统都做好了,然后测试。最大问题是测试工作后置,导致整个项目开发完成之后如果发现比较重要的问题&…

基于微信小程序的校运会管理系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mave…

【大学课程设计】计算器实现(附源码)

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

6.Paddle Graph Learning (PGL)图学习之图游走类模型[系列四]

Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aistudio.baidu.com/aistudio/projectdetail/5002782?contributionType1 相关项目参考: 关于图计算&图学习…

路由规划——运输距离的估算

运输距离的估算1. 常规的拟合距离1.1 欧氏距离1. 2 球面距离拟合2. 一种改进的球面距离拟合参考文献在进行路径规划时,需要获取点与点之间的距离,点之间的距离通常是通过坐标或者经纬度计算得到,可分为拟合距离和导航距离两类。导航距离顾名思…

基础二叉树及其高频面试题

目录 一、树的概念及其结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示法 二、二叉树的概念及其结构 2.1 概念 2.2 特殊二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 顺序存储 链式存储 三、链式二叉树 3.1 遍历方式 深度优先遍历:DFS 层序遍历:BFS(广度优先…

【附源码】Python计算机毕业设计社区防疫信息管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Debian11中 Nginx1.22.1 php8.1.12 Mariadb10.5.15的安装

起因:我之前发的关于LEMP的搭建的文章,已经有3年9个月了,各个软件的版本更新了比较多。最主要的是,CentOS系统终止了,我也完全更换到了Debian系统之上。这里重新搭建了一下,主要是计划结合frp,构…

Vue | Vue.js 全家桶 Pinia状态管理

🖥️ Vue .js专栏:Node.js Vue.js 全家桶 Pinia状态管理 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀…

[基础服务] [操作系统] 类Linux的文件和目录

🍁简介 在奔腾70年代的中美建交之际,UNIX 也逐渐展露头角(也有说是60年代末),十五年后Windows诞生了,又过了五年Linux横空出世三大主流操作系统直到现在呈现三足鼎立之势~ 出生时间是: UNIX(70年代初) > Windows(80年代中) > Linux (90年代初) 可以…

基于微信小程序的电影院票务系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mav…

HCIP-Datacom OSPF进阶(二)最常用的路由协议 OSPF各种LSA作用详解

目录 OSPF路由计算: LSA头部信息: Router-LSA(1类): 一类LSA: 一类LSA可以描述四种链路类型: Network-LSA(2类): 二类: IR、ABR、ASBR是什…

【HTML实战】把专属于她的爱心代码放在自己的网站上是一种什么体验?

一、 写在前面的话 看多了李洵的炫酷爱心,今天来点不一样的爱心代码。需要李洵的炫酷爱心代码请看我的上一篇文章。 最近随着电视剧《点燃我温暖你》的火热播出,剧中帅气学霸李洵的炫酷爱心代码也迅速火出了圈,作为一个喜欢动手实践的我来说…

力扣206 - 反转链表【校招面试高频考题】

乾坤大挪移~一、题目描述二、思路分析1、头插2、三指针迭代三、整体代码展示【需要自取】1、头插2、三指针迭代四、总结与提炼一、题目描述 原题传送门 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入&#xf…

【Redis】CentOs 虚拟机安装 Redis 缓存数据库

一、使用案例: 以淘宝为例,几个人一起登入淘宝,去检索男装,这几个人的访问都得到相同的结果。这时,我们就可以考虑将男装缓存在一个地方,而不是再去访问数据库,这时,就是我们 Redis…

ctfshow文件包含

web78 源码&#xff1a; if(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__);//高亮显示当前文件内容 }解法一 - php://input # http://challenge.ctf.show/?filephp://input # [POST DATA] <?php system(ls)?> <?php…

基于可视图法(VG)的路径规划算法简述

可视图法路径规划&#xff08;VG&#xff09; 可视图法由Lozano-Perez和Wesley于1979年在论文&#xff1a;《An Algorithm for Planning Collision-Free Paths among Polyhedral Obstacles.》中提出。 基于可视图法路径规划算法主要包括以下两个步骤&#xff1a;①可视图的构建…