• [AIGC] 深入理解Flink中的窗口、水位线和定时器


    Apache Flink是一种流处理和批处理的混合引擎,它提供了一套丰富的APIs,以满足不同的数据处理需求。在本文中,我们主要讨论Flink中的三个核心机制:窗口(Windows)、水位线(Watermarks)和定时器(Timers)。

    1. 窗口

    流处理应用中,一种常见的需求是计算某个时间范围内的数据,这种时间范围就是所谓的窗口。根据实际需求,Flink提供了各种类型的窗口,例如滚动窗口与滑动窗口。滚动窗口将数据流分成长度相等的非重叠区间,而滑动窗口则分成可能重叠的区间。

    例如,您可以在每5分钟的滚动窗口上进行计算,以对数据进行归档或元数据统计。

    input
        .timeWindow(Time.minutes(5))
        .apply(new MyWindowFunction());
    
    • 1
    • 2
    • 3

    2. 水位线

    水位线是Flink时间机制中至关重要的一部分,用于跟踪事件时间的进度。水位线本质上是一个带有时间戳的流,在同一个数据流中流动,并表示处理到某个时间点为止的数据。

    例如,一个时间戳为t的水位线表示所有时间戳小于或等于t的数据都已经到达。这为乱序事件提供了处理可能性,让Flink在事件的延迟统计中有了一定的伸缩性。

    3. 定时器

    定时器提供了在指定的未来时间点触发计算的能力。配合事件时间语义,定时器成为了处理事件事件迟到情况的有力工具。在窗口接收到延迟数据时,通过定时器,可以自由地进行一些补救操作,如触发额外的窗口计算。

    例如,下面的代码设置了一个在事件时间超过窗口末端1小时后还能触发窗口计算的定时器:

    public class LateDataWindowFunction extends WindowFunction<...> {
      public void apply(...) {
        // set timer for one hour later
        ctx.registerEventTimeTimer(window.getEnd + 3600000);
      }
    
      @Override
      public void onTimer(long timestamp, OnTimerContext ctx, ... out) throws Exception {
        // triggered when the watermark passes the timer's timestamp
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Flink的窗口、水位线和定时器是流处理中不可或缺的工具,它们共同作用,帮助Flink处理难题,确保在面对各种复杂情况时,都能提供准确可靠的处理结果。

    参考资料
  • 相关阅读:
    prometheus+alertmanager 企业微信告警
    MySQL的事务基础
    Android NfcManager 之NFC接入
    微服务的艺术:构建可扩展和弹性的分布式应用
    JumpServer 堡垒机 v2.25.0 发布
    Camera模组及相关概念大全
    excel用RAND函数、或者RAND.NV函数生成随机数、这两个函数的区别
    基于OpenCv的图像特征匹配
    WPF不弹出控件的情况下,将控件内容生成截图
    Hadoop,Spark,Tez的区别与联系
  • 原文地址:https://blog.csdn.net/qq_45704048/article/details/136490798