flink窗口和水位线(代码片段)

棣棣的小屋 棣棣的小屋     2022-12-03     167

关键词:

什么是窗口

我认为的窗口是无限处理流的一个核心,因为stream是流数据,而batch是批数据,

window也是stream通往batch的一个转折,因为通过窗口可以实现批流一体

什么是水位线

个人理解:水位线是处理乱序数据或迟到数据的,如果和窗口一起使用的话,水位线还有一个功能就是可以控制窗口的关闭时间

窗口分类

时间窗口:滚动窗口:窗口长度固定,数据不重复

                  滑动窗口:窗口长度固定,数据重复

                 会话窗口:时间不固定,数据不重复

计数窗口:同上,不是以时间为单位,是到达一定个数触发窗口

窗口模型

assigner(分配器):如何将元素分配给窗口

function(计算函数):完成窗口的数据的计算

triger(触发器):什么条下完成触发计算

evictor(退出):完成计算后删除数据

水位线的使用:

SingleOutputStreamOperator<OrderGoodsWideEntity> orderwate = OrderDs.assignTimestampsAndWatermarks(
                WatermarkStrategy.<OrderGoodsWideEntity>forBoundedOutOfOrderness(Duration.ofSeconds(1))
                        .withTimestampAssigner(new SerializableTimestampAssigner<OrderGoodsWideEntity>() 
                            @Override
                            public long extractTimestamp(OrderGoodsWideEntity element, long recordTimestamp) 
                                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                String create_time = element.getCreateTime();
                                Date parse = null;
                                try 
                                    parse = format.parse(create_time);
                                 catch (ParseException e) 
                                    e.printStackTrace();
                                
                                return parse.getTime();
                            
                        )
        );

 理解:因为设置水位线其实就是时间戳,水位线的时间语义是:事件时间(数据自带时间)

因为我数据源的时间类型是date类型,经过转换,转换为时间戳类型进行返回,如果时间语义为处理时间(processtime)就会看不出原有数据的效果,因为处理时间是系统时间

水位线和窗口的结合

就比如我上述代码中写的是延迟1s,我窗口设置了个滚动窗口30s意思就是延迟1s就是31s关闭窗口,执行并触发计算,水位线还有一个功能是处理乱序数据,就是可能31秒关闭窗口执行计算,32秒的数据在窗口关闭前到了,但是29s的数据未到,可以给个方法allower...在手动延迟多少时间,直到数据在窗口关闭前到达,如果还没有到达定义标签进行测输出;

keywindow和nokey window区别

如果在window前进行了key拆分聚合,将key相同的任务进行并行操作,如果是no key window的就是数据在一个窗口进行操作并行度就是1,大大降低了计算效率

keywindow

 No key window

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

...有一个机制来解决这个问题,这个特别的机制就是“水位线”。Flink的窗口和时间根据窗口数据划分的不同,目前Flink支持如下3种:滚动窗口,窗口数据有固定的大小,窗口中的数据不会叠加;滑动窗口,窗口数据有固定... 查看详情

flink总结之一文彻底搞懂时间和窗口(代码片段)

...f08;ProcessingTime)3.摄入时间(IngestionTime)二、水位线(Watermark)1.什么是水位线2.水位线分类1.有序流中的水位线1、如何使用2.乱序流中的水位线2.1乱序流中如何保证数据的准确性2.2如何使用三、窗口1.什么是窗... 查看详情

flink窗口与水位线不得不说的秘密(代码片段)

        众所周知,ApacheFlink是一个框架和分布式处理引擎,用于对无界和有界流进行有状态计算。在我们的这个Flink框架中,自Flink1.12.0正式发布流批一体统一运行之后,我们的实时计算框架真正步入了Flink的... 查看详情

flink窗口函数处理数据(watermark和sideoutput)(代码片段)

...c;针对数据延迟或乱序有几个重要的解决思路,1.添加水位线Watermark2.推迟关闭窗口时间3.超时数据的side输出下面的例子是 查看详情

flinkdatastreamapi(代码片段)

...二章Flink 环境部署第三章FlinkDataStreamAPI第四章Flink窗口和水位线第五章FlinkTableAPI&SQL第六章新闻热搜实时分析系统一、DataStreamAPI是什么?Flink中的DataStream程序是对数据流(例如过滤、更新状态、定义窗口、聚合)... 查看详情

flink/scala-timewindow处理迟到数据详解(代码片段)

...c;窗口中可能出现数据迟到的情况,即Event时间戳小于水位线Watermark,此时数据流未乱序流,水位线不能保证小于自己的时间戳的Event不会到来。这时会出现一种情况,水位线到达窗口触发时间触发窗口计算,... 查看详情

flink/scala-timewindow处理迟到数据详解(代码片段)

...c;窗口中可能出现数据迟到的情况,即Event时间戳小于水位线Watermark,此时数据流未乱序流,水位线不能保证小于自己的时间戳的Event不会到来。这时会出现一种情况,水位线到达窗口触发时间触发窗口计算,... 查看详情

flink窗口window(代码片段)

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

12-flink-1.10.1-flink中的时间语义和watermark(代码片段)

...录1Fink中的时间语义1.1哪种时间语义更重要2设置EventTime3水位线(Watermark)3.1水位线概念3.2watermark原理和特点4watermark的传递,引入和设置4.1 watermark的传递 4.2watermark代码中引入 4.3自定义watermark4.4 watermark的实例代码4.... 查看详情

12-flink-1.10.1-flink中的时间语义和watermark(代码片段)

...录1Fink中的时间语义1.1哪种时间语义更重要2设置EventTime3水位线(Watermark)3.1水位线概念3.2watermark原理和特点4watermark的传递,引入和设置4.1 watermark的传递 4.2watermark代码中引入 4.3自定义watermark4.4 watermark的实例代码4.... 查看详情

1分钟理解flink中watermark机制(代码片段)

...;必须触发窗口去进行计算了。这个特别的机制,就是水位线(waterark)。一、watermark是什么?在Flink中,水位线是一种衡量EventTime进展的机制,用来处理实时数据中的乱序问题的,通常是水位线和窗口结合使用来... 查看详情

大数据(9e)图解flink窗口(代码片段)

...口1.2、基于事件个数的窗口2、时间语义3、WaterMark(水位线)3.1、WaterMark策略3.2、WaterMark与窗口4、其它1、窗口的分类将无界限的数据切分为有界限的数据https://yellow520.blog.csdn.net/article/details/1212882401.1、基于时间的窗口基... 查看详情

大数据(9e)图解flink窗口(代码片段)

...口1.2、基于事件个数的窗口2、时间语义3、WaterMark(水位线)3.1、WaterMark策略3.2、WaterMark与窗口4、其它1、窗口的分类将无界限的数据切分为有界限的数据https://yellow520.blog.csdn.net/article/details/1212882401.1、基于时间的窗口基... 查看详情

flink-水位线的设置以及传递(代码片段)

6.2水位线6.2.1概述分类有序流无序流判断的时间延迟延迟时间判定6.2.2水位线的设置分析DataStream下的assignTimstampsAndWatermarks方法,返回SingleOutputStreamOperator本质还是个算子,传入的参数是WatermarkStrategy的生成策略但是WatermarkStrategy是... 查看详情

flink详解系列之五--水位线(watermark)

参考技术A在Flink中,水位线是一种衡量EventTime进展的机制,用来处理实时数据中的乱序问题的,通常是水位线和窗口结合使用来实现。从设备生成实时流事件,到Flink的source,再到多个oparator处理数据,过程中会受到网络延迟、... 查看详情

flink水位线机制watermark实践处理乱序消息(代码片段)

1水位线(WaterMark)是一个时间戳,等于当前到达的消息最大时间戳减去配置的延迟时间,水位线是单调递增的,如果有晚到达的早消息也不会更新水位线,因为消息最大时间戳没变水位线= 消息最大时... 查看详情

flink窗口window机制详解(代码片段)

...引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从Streaming到Batch的一个桥梁。Flink提供了非常完善的窗口机制,这是我认为的Flink最大的亮点之一(其他的亮点包括消息乱序处理,和checkpoint机制)。本... 查看详情

14-flink-1.10.1-flinkprocessfunctionapi(代码片段)

...们之前学的转换算子是无法获取访问时间的时间搓信息和水位线信息的。而这在一些应用场景下,极为总要,例如MapFunction这样的map转换算子就无法访问时间戳或者当前时间的事件时间。基于此,DataStreamAPI提供了一些... 查看详情