Flink 基础学习之窗口 Window

本文深入探讨了Apache Flink中的窗口机制,包括时间驱动的Tumbling和Sliding Windows,以及CountWindows。讲解了窗口的核心API:Window Assigner、Trigger和Evictor,以及它们在处理无限流中的作用。此外,通过实例展示了如何使用时间窗口进行数据统计。
摘要由CSDN通过智能技术生成

01、前言

前面讲了时间 Time 的概念和实际解决问题后,本篇来看下经常搭配使用的另一个关键工具:窗口 Window

窗口也有三种类型可供选择使用:

  • Tumbling Windows:滚动窗口

  • Sliding Windows:滑动窗口

  • Session Windows:会话窗口

友情提示,本篇主要翻译自官网以及参考了 wuchong 大神的博客,内容比较干货,介绍这三种窗口的概念以及使用场景,希望看完能对 Flink 的窗口概念加深理解。

02、Window 窗口是什么

Windows 是处理无限流的核心。Windows 将流分成有限大小的“存储桶”,我们可以在其上应用计算。Flink 是一个优秀的流计算引擎,数据是源源不断的,它认为批处理 Batch 是一种特殊的流计算,在流中分割出一个个窗口,每个窗口相当于有限大小的空间,汇聚了待处理的数据。

窗口式 Flink 程序的一般结构如下所示。第一个片段指的是键控流,第二个片段指的是非键控流。可以看到,唯一的区别是对键控流的 keyBy(...) 调用和对非键控流的 window(...) 变为 windowAll(...)

  • Keyed Windows 键控流

stream
.keyBy(...) <- keyed versus non-keyed windows
.window(...) <- required: "assigner"
[.trigger(...)] <- optional: "trigger" (else default trigger)
[.evictor(...)] <- optional: "evictor" (else no evictor)
[.allowedLateness(...)] <- optional: "lateness" (else zero)
[.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data)
.reduce/aggregate/fold/apply() <- required: "function"
[.getSideOutput(...)] <- optional: "output tag"
  • Non-Keyed Windows 非键控流

stream
.windowAll(...) <- required: "assigner"
[.trigger(...)] <- optional: "trigger" (else default trigger)
[.evictor(...)] <- optional: "evictor" (else no evictor)
[.allowedLateness(...)] <- optional: "lateness" (else zero)
[.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data)
.reduce/aggregate/fold/apply() <- required: "function"
[.getSideOutput(...)] <- optional: "output tag"

03、Window 按驱动类型分类

上图按照不同驱动类型,将窗口分成三类。

  • 时间驱动(Time Window,例如:每 10 秒钟)

  • 数据驱动&

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值