flink原理学习窗口和时间(代码片段)

oahaijgnahz oahaijgnahz     2023-02-17     631

关键词:

Flink原理学习之 窗口和时间


文章目录


Java、大数据开发学习要点(持续更新中…)


一、Flink的时间类型

Flink的时间语义分为三种:

  • Event Time:即事件时间,是事件真正发生的时间,一旦确定就不会发生变化。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。
  • Processing Time:即处理时间,是每一个执行基于时间操作的算子的本地系统时间,与机器相关,因此多次执行结果会不同,默认的时间属性就是Processing Time。
  • Ingestion Time:即摄取时间,是数据进入Flink的时间。摄取时间也无法避免Flink异常重启后数据处理的不准确问题。

一般来说Event Time才是事件真正的时间,也是Flink最大的特点之一,一般业务都是使用事件时间。像Processing Time,会产生多次计算结果不同的问题,也会因为数据延迟到达服务端而产生统计不准确的问题(Spark Streaming就是使用Processing Time)。

二、Watermark

  Watermark用于在EventTime下处理乱序事件,而正确处理乱序事件,通常通过Watermark和窗口来实现。乱序是由于网络、分布式等原因产生的,而乱序不经处理则会影响窗口数据统计的准确性。
  Watermark也可以理解成一个延迟触发机制,我们可以设置Watermark的延时时长t,每次系统会校验已经到达的数据中最大的maxEventTime,然后认定eventTime小于maxEventTime - t的所有数据都已经到达(实际是否真到了并不知道)如果有窗口的停止时间等于maxEventTime – t,那么这个窗口被触发执行
  Watermark是Source通过一定策略(分为两种一种是周期性插入,另一种是每个事件都计算Watermark,一般选择周期性)插入数据流并向下传递的。Watermark = maxEventTime - 最大延迟时间,一旦Watermark大于窗口结束时间,触发窗口计算的执行。由此可见,Watermark在数据流中是非减的。而如果出现Group By、Union等多个数据流汇集的算子,产生了多个Watermark汇集的情况,为了保证Watermark的递增和数据的完整性,那么该算子会保留最小的Watermark,并发送给下游。

三、Flink窗口机制

  流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集是指一种不断增长的本质上无限的数据集,而Window是一种切割无限数据为有限块进行处理的手段。Window将一个无限的流拆分成有限大小的buckets,我们可以在这些桶上做计算操作

Window可以分成两类:

  • CountWindow:按照指定的数据条数生成一个Window,与时间无关。
  • TimeWindow:按照时间生成Window【可以根据窗口实现原理的不同分成三类:滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)和会话窗口(Session Window)】
    • 滚动窗口:时间对齐,窗口长度固定,没有重叠
    • 滑动窗口:时间对齐,窗口长度固定,可以有重叠,在这种情况下同一个元素可能会被分配到多个窗口中。
    • 会话窗口:时间无对齐,一个窗口在一段时间未接受到数据后将会关闭,下次数据到来则开启一个新的窗口。(类似会话机制)

Window Function 定义了要对窗口中收集的数据做的计算操作,主要可以分为两类:

  • 增量聚合函数
    每条数据到来就进行计算,保存一个简单的状态。典型的增量聚合函数有ReduceFunction, AggregateFunction。

  • 全窗口函数
    先把窗口所有数据收集起来,等到计算的时候会遍历所有数据。ProcessWindowFunction就是一个全窗口函数。

      由上可知,窗口的数据都是保存在状态中的,并且窗口的容错机制靠状态的checkpoint机制实现。
    

flink学习(十四)flink窗口时间和水位线(代码片段)

Flink框架中支持事件时间、摄入时间和处理时间三种。而当我们在流式计算环境中数据从Source产生,再到转换和输出,这个过程由于网络和反压的原因会导致消息乱序。因此,需要有一个机制来解决这个问题,这个特别的机制就... 查看详情

flink窗口window(代码片段)

...ow:按照时间生成Window。对于TimeWindow,可以根据窗口实现原理的不同分成三类:滚动窗口(TumblingWindow)、滑动窗口(SlidingWindow)和会话窗口(SessionWindow)。  CountWindow:按照指定的数据条数生成一个Window,与时间无关。2.时... 查看详情

《从0到1学习flink》——flink中几种time详解(代码片段)

前言Flink在流程序中支持不同的Time概念,就比如有ProcessingTime、EventTime和IngestionTime。下面我们一起来看看这几个Time:ProcessingTimeProcessingTime是指事件被处理时机器的系统时间。当流程序在ProcessingTime上运行时,所有基于时间的操... 查看详情

flink原理与实现:sessionwindow(代码片段)

在上一篇文章:Window机制中,我们介绍了窗口的概念和底层实现,以及Flink一些内建的窗口,包括滑动窗口、翻滚窗口。本文将深入讲解一种较为特殊的窗口:会话窗口(sessionwindow)。建议您在阅读完... 查看详情

flink原理与实现:sessionwindow(代码片段)

在上一篇文章:Window机制中,我们介绍了窗口的概念和底层实现,以及Flink一些内建的窗口,包括滑动窗口、翻滚窗口。本文将深入讲解一种较为特殊的窗口:会话窗口(sessionwindow)。建议您在阅读完... 查看详情

flink学习笔记窗口详解(代码片段)

一、概述:        Flink中Batch是Streaming的一个特例,因此Flink底层引擎是一个流式引擎,在上面实现了流处理和批处理。而Window就是从Streaming到Batch的桥梁。二、flink窗口类型:Flink提供了丰富的窗口类型,... 查看详情

flink中的时间和窗口(代码片段)

...间语义更重要6.2水位线(Watermark)6.2.1事件时间和窗口6.2.2什么是水位线6.2.3如何生成水位线6.2.4水位线的传递 6.2.5水位线的总结6.1时间语义6.1.1Flink中的时间语义Flink是一个分布式处理系统。分布式架构最大的特点,就... 查看详情

flink原理与实现:window机制(代码片段)

Flink认为Batch是Streaming的一个特例,所以Flink底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从Streaming到Batch的一个桥梁。Flink提供了非常完善的窗口机制,这是我认为的Flink最大... 查看详情

flink中的时间和窗口(代码片段)

目录6.3窗口(Window)6.3.1窗口的概念 6.3.2窗口的分类6.3.3窗口API概览6.3.4窗口分配器(WindowAssigners)6.3.5窗口函数(WindowFunctions)6.3窗口(Window)在流处理中,我们往往需要面对的是连续不断、无... 查看详情

flink内核原理学习任务提交流程(代码片段)

Flink内核原理学习之任务提交流程文章目录Flink内核原理学习之任务提交流程一、Flink任务提交流程(yarn-per-job模式)1.1总体流程解析1.2具体组件解释二、Flink任务提交流程(yarn-session模式)Java、大数据开发学习要点(持续更新中…... 查看详情

flink内核原理学习组件通信rpc(代码片段)

Flink内核原理学习之RPC文章目录Flink内核原理学习之RPC一、Akka与Actor模型二、RPC消息类型三、Flink通信组件3.1RpcGateway3.2RpcEndpoint3.3RpcService与RpcServer3.4AkkaRpcActor四、PRC交互过程Java、大数据开发学习要点(持续更新中…)一、... 查看详情

flink内核原理学习内存模型(代码片段)

Flink内核原理学习之内存模型文章目录Flink内核原理学习之内存模型一、JVM内存管理的缺点二、TaskManager内存模型三、内存数据结构四、网络传输中的内存管理4.1网络IO内存管理4.2反压机制Java、大数据开发学习要点(持续更新... 查看详情

「flink」flink中的时间类型(代码片段)

Flink中的时间类型和窗口是非常重要概念,是学习Flink必须要掌握的两个知识点。Flink中的时间类型时间类型介绍Flink流式处理中支持不同类型的时间。分为以下几种:处理时间Flink程序执行对应操作的系统时间。所有基于时间的... 查看详情

flink学习笔记(代码片段)

Flink基础Flink特性流式计算是大数据计算的痛点,第1代实时计算引擎Storm对ExactlyOnce语义和窗口支持较弱,使用的场景有限且无法支持高吞吐计算;SparkStreaming采用“微批处理”模拟流计算,在窗口设置很小的场景... 查看详情

flink学习笔记(代码片段)

Flink基础Flink特性流式计算是大数据计算的痛点,第1代实时计算引擎Storm对ExactlyOnce语义和窗口支持较弱,使用的场景有限且无法支持高吞吐计算;SparkStreaming采用“微批处理”模拟流计算,在窗口设置很小的场景... 查看详情

flink和sentinel中计算当前时间所属的时间窗口算法(代码片段)

flink中:org.apache.flink.streaming.api.windowing.windows.TimeWindowpublicstaticlonggetWindowStartWithOffset(longtimestamp,longoffset,longwindowSize)//转载请标明链接:https://blog.csdn.net/wabiaoz 查看详情

flink笔记9[实验]体验窗口开启时间和关闭时间(eventtime)(代码片段)

体验窗口开启时间和关闭时间 实验数据实验代码实验结果实验分析窗口开始时间公式实验数据sensor_1,1619492107,36.2sensor_1,1619492108,36.0sensor_1,1619492109,36.5sensor_1,1619492110,34.3sensor_1,1619492111,34.3sensor_1,1619492112,34.3sensor_1,16194 查看详情

11.flink四大基石window窗口的分类flink提供了很多各种场景用的windowassigner基于时间的滚动和滑动基于时间的滚动和滑动窗口基于数量的滚动和滑动(代码片段)

本文来自:Flink1.12-2021黑马程序员贺岁视频的学习笔记11.Flink四大基石12.Window12.1.窗口的分类12.2.API12.2.1.window和windowAll12.2.2.API调用示例12.2.3.Flink提供了很多各种场景用的WindowAssigner12.3.代码演示–基于时间的滚动和滑动–掌握12... 查看详情