首页 > 其他分享 >Flink的DateStream API中的ProcessWindowFunction和AllWindowFunction两种用于窗口处理的函数接口的区别

Flink的DateStream API中的ProcessWindowFunction和AllWindowFunction两种用于窗口处理的函数接口的区别

时间:2024-07-31 12:59:03浏览次数:10  
标签:窗口 示例 AllWindowFunction Flink DateStream 获取 时间 ProcessWindowFunction

目录

ProcessWindowFunction

AllWindowFunction

具体区别

ProcessWindowFunction 示例

AllWindowFunction 示例

获取时间不同,一个数据产生的时间一个是数据处理的时间

ProcessWindowFunction

AllWindowFunction

具体示例

ProcessWindowFunction 示例

AllWindowFunction 示例

总结


在Flink的DataStream API中,ProcessWindowFunctionAllWindowFunction是两种用于窗口处理的函数接口。它们之间的主要区别在于应用的上下文和作用的粒度。

ProcessWindowFunction

ProcessWindowFunction 是一种更灵活和强大的窗口处理函数。它允许你对每个窗口中的所有元素进行处理,并且可以访问窗口的元数据信息,比如窗口的开始时间和结束时间。

  • 用法:适用于对每个窗口中的元素进行复杂处理的场景。
  • 调用上下文:用于 keyed streams(即,已经通过 keyBy 操作进行了分区的流)。
  • 函数签名

AllWindowFunction

AllWindowFunction 则是一个较为简单的窗口处理函数,用于处理没有分区的流中的所有元素。

  • 用法:适用于不需要按键分区的场景,对整个流的所有元素进行窗口处理。
  • 调用上下文:用于 non-keyed streams(即,未通过 keyBy 操作进行分区的流)。
  • 函数签名  

具体区别

  1. 应用场景

    • ProcessWindowFunction 适用于 keyed streams,每个窗口中的元素会按照键进行分组。
    • AllWindowFunction 适用于 non-keyed streams,对整个流中的所有元素进行处理。
  2. 参数

    • ProcessWindowFunction 中的 process 方法接收一个键(key)参数,而 AllWindowFunction 中的 apply 方法没有键参数。
    • ProcessWindowFunction 可以访问窗口的上下文信息(如窗口的开始和结束时间),而 AllWindowFunction 则只能访问窗口和元素。
  3. 复杂性

    • ProcessWindowFunction 提供了更多的功能和灵活性,可以访问更多的上下文信息,适用于更复杂的窗口计算。
    • AllWindowFunction 较为简单,适用于不需要按键处理的简单场景。

ProcessWindowFunction 示例

AllWindowFunction 示例

通过了解这些区别,可以根据具体需求选择合适的窗口函数接口,来实现所需的窗口计算逻辑

获取时间不同,一个数据产生的时间一个是数据处理的时间

ProcessWindowFunctionAllWindowFunction 在处理时间方面也有所不同。具体来说,它们处理的时间语义是基于 Flink 的事件时间(event time)或处理时间(processing time),但获取时间的方式和内容有所不同。

ProcessWindowFunction

ProcessWindowFunction 中,你可以访问窗口的元数据,包括窗口的开始时间和结束时间。这些时间通常是基于事件时间(event time)的。Flink 提供了上下文(context)对象,可以通过它来获取这些信息。

  • 获取窗口时间

    context.window().getStart(); context.window().getEnd();

  • 事件时间: 通过 context.timestamp() 可以获取当前处理的事件的事件时间。

  • 处理时间: Flink 也允许你获取当前的处理时间,通过调用 System.currentTimeMillis() 或使用 context.currentProcessingTime()

AllWindowFunction

AllWindowFunction 中,你同样可以获取窗口的开始时间和结束时间,但获取这些信息的方式稍有不同。

  • 获取窗口时间
    window.getStart(); window.getEnd();
    

具体示例

ProcessWindowFunction 示例

AllWindowFunction 示例


总结

  • ProcessWindowFunction:通过 context 对象可以获取窗口的开始时间、结束时间、事件时间和处理时间。
  • AllWindowFunction:通过 window 对象可以获取窗口的开始时间和结束时间,可以通过 System.currentTimeMillis() 获取当前处理时间。

因此,两者在获取时间信息的细节上有所不同,但总体来说,ProcessWindowFunction 提供了更多的上下文信息,允许你更灵活地访问时间信息

标签:窗口,示例,AllWindowFunction,Flink,DateStream,获取,时间,ProcessWindowFunction
From: https://blog.csdn.net/weixin_64261178/article/details/140817818

相关文章

  • 当我尝试在 flink 集群上运行 Beam Pipeline 时,为什么会出现 ERROR:root:java.lang.Nu
    我正在尝试在本地托管的Flink集群上运行一个简单的Beam管道,但在执行此操作时遇到错误。我已经尝试了在互联网上可以找到的所有内容。importapache_beamasbeamfromapache_beam.ioimportReadFromTextfromapache_beam.ioimportWriteToTextfromapache_beam.option......
  • Java中的数据流处理框架:Apache Flink
    Java中的数据流处理框架:ApacheFlink大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下Java中的数据流处理框架——ApacheFlink。Flink是一款用于处理数据流和批处理的分布式处理框架。它具有高吞吐量、低延迟和容错的特性,广泛应用于实时......
  • Flink-CDC
    Flink-CDC(FlinkChangeDataCapture)是一个基于Flink计算框架的数据集成工具,它实现了对数据库变更数据的捕获、处理和传输,支持全量和增量数据的一体化读取。下面将从多个方面对Flink-CDC进行详细的解析。一、Flink-CDC概述1.1CDC简介CDC(ChangeDataCapture)是变更数据捕......
  • dedecms友情链接标签flink怎么用
    row='24'表示读取24个,如果row不设置,则默认为24,titlelen="24"表示友情链接为文字形式,网站名称取24字符宽度,网站编码GBK则12个汉字,网站编码为UTF-8则为8个汉字.typeid="0"1综合网站2娱乐类3教育类4计算机类5电子商务6网上信息7论坛类8其它类型如......
  • Flink SQL 的工作机制
    前言FlinkSQL引擎的工作流总结如图所示。 从图中可以看出,一段查询SQL/使用TableAPI编写的程序(以下简称TableAPI代码)从输入到编译为可执行的JobGraph主要经历如下几个阶段:将SQL文本/TableAPI代码转化为逻辑执行计划(LogicalPlan)LogicalPlan通过优化器优......
  • FlinkSQL窗口函数TUMBLE、SESSION 和 HOP的区别
    目录TUMBLE滚动窗口(TumblingWindow)SESSION会话窗口(SessionWindow)HOP滑动窗口(HoppingWindow)小结HOP窗口为什么不需要rowtime(事件时间) PROCTIME()vsrow_time 为什么HOP窗口常用PROCTIME()?总结TUMBLE、SESSION可以使用处理时间嘛TUMBLE窗口(滚动窗口)SESS......
  • 整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0
    一、环境准备1.环境准备:flink1.13.1+hudi0.10+hive2.1.1+cdh6.3.0+mysql5.7+flinkcdc2.1+flinkweb平台二.编译hudi(这个编译是以前的一个测试版本,编译大同小异)1.使用git命令下载hudi0.10的代码steven@wangyuxiangdeMacBook-Pro~gitclonehttps://github.com/ap......
  • SpringBoot整合Flink CDC,实时追踪mysql数据变动
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......
  • 1、Flink 的 Table API & SQL API 概述
    1)概览1.TableAPI&SQLFlink有两种关系型API来做流批统一处理:TableAPI和SQL。TableAPI是用于Scala和Java语言的查询API,它可以用一种非常直观的方式来组合使用选取、过滤、join等关系型算子。FlinkSQL是基于ApacheCalcite来实现的标准SQL。无论输入......
  • 【大数据专题】Flink题库
    1.简述什么是ApacheFlink?ApacheFlink是一个开源的基于流的有状态计算框架。它是分布式地执行的,具备低延迟、高吞吐的优秀性能,并且非常擅长处理有状态的复杂计算逻辑场景2.简述Flink的核心概念?Flink的核心概念主要有四个:EventStreams、State、Time和Snapsho......