flink 窗口

flink 窗口window 一般真实的流都是无界的 怎么处理无界的数据 可以把无限的数据流进行切分 得到有限的数据集进行处理也就是得到有界流窗口就是将无限流切割为有限流的一种方式 它会将流数据分发到有限大小的桶中进行分析窗口类型时间窗口 timewindow 滚动时间窗口 TumblingWind 将数据依据固定的窗口长度对数据进行切分时间对齐 窗口长度固定 没有重叠 每条数据

window

  • 一般真实的流都是无界的,怎么处理无界的数据?
  • 可以把无限的数据流进行切分,得到有限的数据集进行处理 –也就是得到有界流
  • 窗口就是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶中进行分析

窗口类型

时间窗口(time window)

滚动时间窗口(Tumbling Window)

  • 将数据依据固定的窗口长度对数据进行切分
  • 时间对齐,窗口长度固定,没有重叠,每条数据只能划分到确定的一个窗口里面
  • 适用场景:适合做BI统计等(做每个时间段的聚合计算)。



滑动时间窗口(Sliding Window)(实际应用最多)

  • 滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成
  • 窗口长度固定,可以有重叠。
  • 适用场景:对最近一个时间段内的统计(求某接口最近5min的失败率来决定是否要报警)。



会话时间窗口(Session Window)

  • 由一系列事件组合一个指定时间长度的timeout间隙组成,有就是有一段时间没有接收到数据就会生成一个新的窗口
  • 窗口长度不固定,没有重叠,每条数据只能划分到确定的一个窗口里面



计数窗口(count window)

滚动计数窗口

  • 窗口消息条数固定,没有重叠,每条数据只能划分到确定的一个窗口里面



滑动计数窗口

  • 窗口消息条数固定,可以有重叠,每条数据可能划分到多个窗口里面



windiw API

* Keyed Windows <可以理解为按照原始数据流中的某个key进行分类,拥有同一个key值的数据流将为进入同一个window,多个窗口并行的逻辑流> 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 <不做分类,每进入一条数据即增加一个窗口,多个窗口并行,每个窗口处理1条数据> 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" 用`[ ]`包含的内容,其中的方法均为可选函数,如需了解可以查阅一下官方文档。 
  • 每个window必备的是触发器Trigger和一个附加在window上的函数
窗口分配器–WindAssinger
  • 滚动窗口(Tumbling Window)

    .timeWindow(Time.seconds(15))







  • 滑动窗口(Sliding Window)

    .timeWindow(Time.seconds(15),Time.seconds(5))







  • 会话窗口(Session Window)

    .window(EventTimeSessionWindows.withGap(Time.minutes(10)))







  • 全局窗口(global window不会结束的窗口) 用于自定义窗口结束

    .window(GlobalWindows.create())









  • 滚动计数窗口

    .countWindow(5)







  • 滑动计数窗口

    .countWindow(10,2)







窗口函数 (window function)

  • AggerateFunction/ReduceFunction/FoldFunction/… 聚合函数
此类为数据计算函数,适用于仅计算,无需做时间窗口的情况。 AggerateFunction为用户自定义函数,可以按照个人需求做各类统计。 
  • WindowFunction/ProcessWindowFunction/… 全窗口函数
此类为做窗口函数,适用于无需计算只做时间窗口统计的情况。(ps.貌似很少有这样的情况) 

聚合函数+全窗口函数

两种方式的结合适用于需要进行计算后再做滑动窗口统计结果的情况。 (直接对全部SourceData数据做WindowFunction消耗会较大,所以先做计算,提取出需要的特征、结果后,减轻窗口函数的压力。) 
增量聚合函数 incremental aggregation functions
  • 每条数据进来都进行计算,保持一个简单的状态
  • ReduceFunction、AggragationFunction

    适合聚合

    窗口的输出要在窗口关闭之后,全窗口会存下所有数据最后再进行计算,
    相对于增量聚合函数更占空间而且可以提前计算,缺点是增量聚合函数比较简单。








全窗口函数 full window function
  • 先把所有窗口的数据收集起来,等到计算的时候会遍历所有的数据
  • ProcessWindowFunction 也是8中ProcessFunction之一

    适合排序

    不过ProcessWindowFunction可以跟其他的窗口函数(ReduceFunction, AggregateFunction, or FoldFunction)结合使用,其他函数接受增量信息,ProcessWindowFunction接受窗口的元数据。










dataStream ->WindowAll -> allwindowedStream -> 增量聚合/全窗口函数 ->dataStream

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228445.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:00
下一篇 2026年3月16日 下午7:00


相关推荐

  • C++数组求和用自带的库超级方便

    C++数组求和用自带的库超级方便C 数组求和用自带的库超级方便 而且也达到代码更加简洁的目的 你只需要做 2 步 1 导入库文件 include2 添加空间名 usingnamespa 然后就可以直接使用 accumulate arrayName arrayName 数组长度 数组起始位 demo intarray 6 1 2 3 4 5 6 in

    2026年3月16日
    1
  • 毕业——少年,你还太弱,请专心练剑

    有段时间没有更新博客,一是比较忙,二是考虑自己的博客内容。之前的博客都是自己的学习记录,输入的同时做了输出,自己思考了一下主要就是以下几类:1、一些比较常见的知识点,像这些都是本来就已经存在的内容,我只是做了一次梳理按照我的逻辑整理出来,就算我不整理,也能找的到,所以我觉得存在的必要性并不大。2、错误记录,自己学习和开发过程中遇到的各种问题,对于遇到类似问题的同学可能有所帮助。3、自己的经验总结,这

    2022年3月11日
    54
  • 服务器知识_服务器个人买能干什么

    服务器知识_服务器个人买能干什么一服务器知识1.1电脑所谓的电脑就是一种计算机,而计算机其实是:『接受使用者输入指令与资料,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的资讯』。因此,只要有输入设备(不管是键盘还

    2022年8月1日
    3
  • git stash详解

    git stash详解应用场景 1 当正在 dev 分支上开发某个项目 这时项目中出现一个 bug 需要紧急修复 但是正在开发的内容只是完成一半 还不想提交 这时可以用 gitstash 命令将修改的内容保存至堆栈区 然后顺利切换到 hotfix 分支进行 bug 修复 修复完成后 再次切回到 dev 分支 从堆栈中恢复刚刚保存的内容 2 由于疏忽 本应该在 dev 分支开发的内容 却在 master 上进行了开发 需要重新切回到 dev 分

    2026年3月20日
    2
  • Ext终于开始收费了

    Ext终于开始收费了

    2021年7月30日
    61
  • PID控制器开发笔记之十二:模糊PID控制器的实现[通俗易懂]

    PID控制器开发笔记之十二:模糊PID控制器的实现[通俗易懂]在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题。模糊PID控制器是将模糊算法与PID控制参数的自整定相结合的一种控制算法。可以说是模糊算法在PID参数整定上的应用。1、模糊算法的原理模糊算法是一种基于智能推理的算法,虽然称之为模糊算法其实并不模糊,实际上是一种逐步求精的思想。一…

    2022年5月3日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号