美文网首页
Flink中的事件语义和watermark机制

Flink中的事件语义和watermark机制

作者: Anthons | 来源:发表于2021-04-16 22:54 被阅读0次

    Flink中的事件语义和watermark机制

    【[白话解析] Flink的Watermark机制】:https://www.cnblogs.com/rossiXYZ/p/12286407.html

    一、Flink窗口(window)

    1、窗口(window)的作用

    窗口(window)是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶(bucket)中进行分析。

    2、window类型

    时间窗口:滚动时间窗口、滑动时间窗口、会话窗口。

    计数窗口:滚动计数窗口、滑动计数窗口。

    滚动时间窗口

    image-20210416173150865.png

    特点:时间对齐,窗口长度固定,没有重叠。

    滑动时间窗口

    image-20210416173409667.png

    特点:窗口大小、滑动步长固定,可以有重叠。

    会话时间窗口

    image-20210416173626952.png

    特点:指定固定时间间隙。

    二、Flink时间语义

    1、时间语义

    image-20210412105849498.png

    <u><u>Event Time:事件时间。(流事件的时间戳)</u></u>

    Ingestion Time:提取事件,事件进入Flink的事件。

    Processing Time:执行操作算子的本地系统事件,与机器无关。

    2、乱序数据的影响

    image-20210416174830412.png

    当Flink以Event Time模式处理数据流时,它会根据数据里的时间戳来处理基于时间的算子。

    由于网络、分布式等原因,会导致乱序数据的产生。

    乱序数据会让窗口计算不准确。

    三、Flink对乱序时间处理

    解决方案:Watermark/allowLateNess/sideOutPut

    1、水位线(Watermark)

    Watermark:遇到一个时间戳达到了窗口关闭时间,<u><u>不应该立刻触发窗口计算</u></u>,而是等待一段时间,等迟到的数据来了再关闭窗口。

    2、allowLateNess

    allowLateNess:<u><u>达到窗口关闭时间,触发窗口计算,但窗口关闭时间延长。</u></u>

    优点:机制允许用户设置一个允许的最大迟到时长,这期间的迟到时间不会被丢弃,而是默认会触发窗口重新计算。

    缺点:因为保存窗口状态需要额外内存,并且迟到事件会触发窗口的全量计算,代价比较大,所以允许迟到时长不应设的太长,迟到事件不宜过多。

    注:设置Watermark设置的延迟时间不结束不会输出结果,而allowLateNess在时间结束后会输出结果但窗口不会关闭,会在设置的延迟时间内更新结果。

    3、sideOutPut

    sideOutPut:当指定窗口彻底关闭后,就会把所有过期延迟数据放到侧输出流,让用户决定如何处理。

    相关文章

      网友评论

          本文标题:Flink中的事件语义和watermark机制

          本文链接:https://www.haomeiwen.com/subject/bgmylltx.html