Flink 窗口和水位线

Posted 棣棣的小屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 窗口和水位线相关的知识,希望对你有一定的参考价值。

什么是窗口

我认为的窗口是无限处理流的一个核心,因为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 时间语义水位线(Watermark)生成水位线水位线的传递

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

Flink窗口与水位线不得不说的秘密

flink窗口与水位线watermark例子