Flink-时间流与水印

时间流与水印

  • 一、背景
  • 二、时间语义
    • 1.事件时间(event time)
    • 2.读取时间(ingestion time)
    • 3.处理时间(processing time)
  • 三、水印-Watermarks
    • 1.延迟和正确性
    • 2.延迟事件
    • 3.顺序流
    • 4.无序流
    • 5.并行流
  • 四、Windows
    • 1.窗口维度分类
      • 1.1 时间窗口
      • 1.2 数量窗口
    • 2.窗口规则分类
      • 2.1 滚动窗口
      • 2.2 滑动窗口
      • 2.3 会话窗口
      • 2.4 全局窗口
    • 3.内置窗口
    • 4.窗口函数
      • 4.1 增量计算
      • 4.2 全量计算
  • 总结
    • 参考链接


一、背景

Flink需要支持流重放并且还要不影响结果,因此不能仅仅支持计算时间还要支持事件时间。事件流在传输和处理过程耗时不同,导致下游节点接受到的数据流可能是乱序的。由于程序不能无限制等待所有事件到达之后再处理,因此需要决定何时停止等待前序事件,这就是Watermarks的作用。
Flink中流入的数据分为三种类型:事件流、watermark和checkpoint barriers。其中watermark和checkpoint barriers都是flink根据一些策略生产的。
在这里插入图片描述

二、时间语义

Flink支持三种时间语义:

1.事件时间(event time)

事件产生的时间,记录的是设备生产或者存储事件的时间。

2.读取时间(ingestion time)

Flink读取事件时记录的时间

3.处理时间(processing time)

Flink 具体算子处理事件的时间

三、水印-Watermarks

Watermarks主要是定义何时停止等待较早事件。在Flink中采用的是固定延迟策略,也就是假定所有的事件都是有一个最大延迟。

1.延迟和正确性

开发人员需要在延迟和结果正确性作出权衡。如果Watermarks的边界时间设置的相对较短,那么会快速产生一个可能不太准确的结果。如果Watermarks的边界时间设置的小队较长,那么会延迟很久的情况下产生一个相对比较准确的结果。

2.延迟事件

如果算子接受到了Watermark(t) ,则表示事件流的时间已经到达了 t; watermark 之后的时间戳 ≤ t 的任何事件都被称之为延迟事件。

3.顺序流

在顺序流中,watermark也是顺序的分布在整个事件流中,并且是周期性出现的。
在这里插入图片描述

4.无序流

针对无序流由于事件不是按照时间戳顺序出现,所以watermark非常重要。watermark到达算子就表明这个时间戳之前的所有事件都已经到达了此算子,此算子就可以进行相应计算。并且在操作完成后会生成一个新的watermark以供下游算子参考。
在这里插入图片描述

5.并行流

watermark是在数据源输入时产生的,各个分区输入是互相独立的。当watermark到达某个算子时,算子会产生一个新的watermark。如果算子有多个输入流,算子会输出输入流中事件时间的最小值。
在这里插入图片描述

四、Windows

Flink在窗口的场景上处理有非常丰富的api,应用过程中经常遇到分析一个时间段内的浏览量、最高量、平均值等场景。

1.窗口维度分类

对于无界数据流进行一些数据统计不现实,所以需要在一定的窗口内对数据进行统计和分析。按照划分维度可以分为时间窗口和数量窗口。
在这里插入图片描述

1.1 时间窗口

时间窗口就是以时间点来定义窗口的开始和结束,在窗口开放期间符合条件的事件会进入窗口,在窗口结束前会对窗口内的事件进行计算和处理。

1.2 数量窗口

数量窗口就是以事件个数来定义窗口的开始和结束,在窗口开放期间事件会进入窗口,在窗口结束前会对窗口内的事件进行计算和处理。

2.窗口规则分类

除了维度窗口外,每个窗口的划分还有更细致的划分:滚动窗口( Tumbling Window )、滑动窗口( Sliding Window )、会话窗口( Session Window ),以及全局窗口( Global Window )。

2.1 滚动窗口

滚动窗口是指固定大小的窗口,对数据流按时间或者事件个数进行均匀的划分。窗口之间是首尾想接的没有重叠。比如计算每分钟页面浏览量。

2.2 滑动窗口

滑动窗口大小也是固定的,但是滑动窗口首尾不是相接的有一定重叠。比如计算每10秒计算前一分钟的页面浏览量。

2.3 会话窗口

会话窗口就是基于会话来对数据进行分组。

2.4 全局窗口

全局窗口会把相同key的所有数据放到同一个窗口中。

3.内置窗口

Flink计算窗口主要有两个抽象概念:窗口分配器和窗口函数,窗口分配器主要是指如果将事件分配到窗口,窗口函数是指如何对窗口内的事件进行处理。

Flink内置窗口分配器如下:
在这里插入图片描述
基于时间的窗口即可以根据事件时间也可以根据处理时间来划分窗口,基于计算的窗口只有在事件数量达到要求才会触发计算。

4.窗口函数

窗口函数可以进行增量计算和全量计算。

4.1 增量计算

开发者需要继承ReduceFunction或AggregateFunction。当每个事件被加到窗口时,都会调用 ReduceFunction 或者 AggregateFunction 来增量计算。

4.2 全量计算

开发者需要继承ProcessWindowFunction。当触发窗口时,会调用ProcessWindowFunction做全量计算。

总结

主要是对时间流和水印产生背景和作用进行了介绍,对窗口分类和窗口函数进行初步了解。


参考链接

1.Flink实时流
2.Flink流式分析

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

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

相关文章

28 主题管理

1.如何删除主题 执行kafka-topics脚本,删除操作是异步的,执行完脚本只是把主题标记为已删除 2.删除主题失败 可能原因: 副本所在broker宕机了待删除主题的部分分区还在迁移 解决方法: 手动删除zk节点/admin/delete_topics下以…

初识Java 18-5 泛型

目录 动态类型安全 异常 混型 C中的混型 替代方案 与接口混合 使用装饰器模式 与动态代理混合 本笔记参考自: 《On Java 中文版》 动态类型安全 在Java 5引入泛型前,老版本的Java程序中就已经存在了List等原生集合类型。这意味着,我们…

【计算机网络笔记】交换机

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

【MySQL工具】my2sql-快速解析binlog

​​​​​​ 目录 ​​​​​​安装 my2sql简介 用途 工具优势 限制 账号所需权限 参数解析 场景 场景1 回滚 安装 安装比较简单 直接下载二进制命令即可使用 wget https://github.com/liuhr/my2sql/raw/master/releases/centOS_release_7.x/my2sql my2sql简介 …

AUTOSAR系统服务篇 - BswM

文章目录 模式仲裁仲裁规则模式条件和逻辑表达式模式仲裁的要求立即操作和延时操作初始化后的仲裁行为模式控制模式处理周期模式控制的要求触发和条件动作列表可用动作初始化后的模式控制行为等待功能多分区支持BswM接口和端口模式请求端口模式切换端口模式切换通知组件类型和内…

上海亚商投顾:沪指震荡下跌 成交量继续下破8000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整,深成指、创业板指午后跌超1%,北证50指数跌超7%,超百只北…

Windows11编译Hadoop3.3.6源码

由于https://github.com/kontext-tech/winutils还未发布3.3.6版本,因此尝试源码编译 目录 环境和安装包准备,见2zlib编译方法一:方法二: 配置文件更改1. maven阿里云镜像2. Node版本3. 越过Javadoc检查 编译HadoopError,其他报错…

JavaScript中的异步处理方法

JavaScript中的异步处理是开发者在日常开发过程中必须面对的一个重要问题。由于JavaScript是单线程的,因此对于一些可能需要长时间执行的操作,如网络请求、IO操作等,如果采用同步的方式,可能会导致应用程序的阻塞,降低…

科研学习|论文解读——Deep learning for anomaly detection in log data: a survey

摘要 自动日志文件分析能够及早发现系统故障等相关事件。特别是,自学习异常检测技术能够捕捉日志数据中的模式,然后向系统操作员报告意外的日志发生,而无需提前提供或手动建模异常场景。最近,越来越多的利用深度学习方法来实现此目…

【Java】JDBC 之 PreparedStatement 和 Statement 的区别和理解【转载并梳理】

一、PreparedStatement 和 Statement 的含义和区别 1、含义 PreparedStatement:PreparedStatement 是预编译的,对于批量处理可以大大提高效率,也叫 JDBC存储过程。Statement:使用 Statement 对象,在对数据库只执行一…

ExoPlayer - Failed to initialize OMX.qcom.video.decoder.avc

人莫鉴于流水而鉴于止水,唯止能止众止 1. 背景 使用ExoPlayer,我不信你没遇到过这个问题: java.lang.IllegalArgumentException: Failed to initialize OMX.qcom.video.decoder.avc 详细内容如下图所示: 2. MediaCodec(解码器) …

ArkUI框架中的PersistentStorage和Environment深入详解【鸿蒙专栏-13】

文章目录 ArkUI框架中的PersistentStorage和EnvironmentPersistentStorage:保持状态的长存储概述限制条件使用场景初始化和访问属性示例流程图注意事项Environment:设备环境查询使用场景从UI中访问Environment参数应用逻辑使用Environment深入ArkUI框架的持久化存储与设备环境…

FastApi接收不到Apifox发送的from-data字符串_解决方法

接收不到Apifox发送的from-data字符串_解决方法 问题描述解决方法弯路总结弯路描述纵观全局小结 问题描述 这里写了一个接口,功能是上传文件,接口参数是file文件和一个id字符串 gpt_router.post("/uploadfiles") async def create_upload_fi…

使用Feign简化Spring Boot微服务间的调用

摘要: 在微服务架构中,服务间的通信是至关重要的。Spring Cloud提供了多种工具,其中Feign是一款声明式的Web服务客户端,能够显著简化服务调用的过程。本文将详细介绍在Spring Boot应用中如何使用Feign进行微服务之间的调用。 正文…

配置自动化部署Jenkins和Gitea

配置自动化部署 这里使用的是JenkinsGitea 如果不知道怎么安装Jenkins和Gitea可以参考下面文章 https://blog.csdn.net/weixin_46533577/article/details/134644144 我的另一篇文章 介绍 前端 先说下自己的情况,因为自己服务器原因,使用的服务器内…

防篡改,Tripwire的快速安装与简洁使用

防篡改Tripwire 一、安装 1.准备(centos7的yum不带tripwire) wget https://mirrors.ustc.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm rpm -ivh epel-release-7-14.noarch.rpm yum -y install tripwire另一个方法 cd /etc/yum.rep…

面向对象的四大特性:封装、抽象、继承、多态

封装(Encapsulation) 封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如 Java 中的 private、protected、pu…

Linux基础项目开发1:量产工具——输入系统(三)

前言: 前面我们已经实现了显示系统,现在我们来实现输入系统,与显示系统类似,下面让我们一起来对输入系统进行学习搭建吧 目录 一、数据结构抽象 1. 数据本身 2. 设备本身: 3. input_manager.h 二、触摸屏编程 to…

Mysq8l在Centos上安装后忘记root密码如何重新设置

场景 Mysql8在Windows上离线安装时忘记root密码: Mysql8在Windows上离线安装时忘记root密码-CSDN博客 如果是在Windows上忘记密码可以参考上面。 如果在Centos中安装mysql可以参考下面。 CentOS7中安装Mysql8并配置远程连接和修改密码等: CentOS7中…