Flink中事件时间和处理时间(TumblingEventTimeWindows TumblingProcessingTimeWindows)

这篇具有很好参考价值的文章主要介绍了Flink中事件时间和处理时间(TumblingEventTimeWindows TumblingProcessingTimeWindows)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TumblingEventTimeWindowsTumblingProcessingTimeWindows是 Flink 中两种不同的窗口类型.

区别如下:

  1. 时间类型:TumblingEventTimeWindows是基于事件时间的窗口类型,可以通过设置WatermarkEventTimeCharacteristic来确定事件时间;而TumblingProcessingTimeWindows是基于处理时间的窗口类型,时间由 Flink 运行时系统确定。

  2. 窗口大小的选取:在TumblingEventTimeWindows中,窗口大小通常由用户设定的时间长度、Watermark和窗口策略共同决定;而在TumblingProcessingTimeWindows中,窗口大小通常由用户设定的时间长度和窗口策略共同决定。

  3. 触发器的行为:在TumblingEventTimeWindows中,Watermark的到达会触发窗口计算;而在TumblingProcessingTimeWindows中,窗口计算会根据设定的 Trigger 来触发。

二者通过assignWindows方法就可以看出区别
TumblingEventTimeWindowsassignWindows源码内容如下

@Override
    public Collection<TimeWindow> assignWindows(
            Object element, long timestamp, WindowAssignerContext context) {
        if (timestamp > Long.MIN_VALUE) { // 区别1 先对事件时间时间进行判断
            if (staggerOffset == null) {
                staggerOffset =
                        windowStagger.getStaggerOffset(context.getCurrentProcessingTime(), size);
            }
            // Long.MIN_VALUE is currently assigned when no timestamp is present
            long start =
                    TimeWindow.getWindowStartWithOffset(
                            timestamp, (globalOffset + staggerOffset) % size, size);// 区别2 以事件时间作为参数传入
            return Collections.singletonList(new TimeWindow(start, start + size));
        } else {
            throw new RuntimeException(
                    "Record has Long.MIN_VALUE timestamp (= no timestamp marker). "
                            + "Is the time characteristic set to 'ProcessingTime', or did you forget to call "
                            + "'DataStream.assignTimestampsAndWatermarks(...)'?");
        }
    }

可以看到参数timestampTimeWindow.getWindowStartWithOffset(timestamp, (globalOffset + staggerOffset) % size, size)有使用到,timestamp就是事件时间.

TumblingProcessingTimeWindowsassignWindows源码内容如下

@Override
   public Collection<TimeWindow> assignWindows(
           Object element, long timestamp, WindowAssignerContext context) {
       final long now = context.getCurrentProcessingTime();
       // 区别1 这里没有对事件时间进行判断,因为不需要使用到事件时间
       if (staggerOffset == null) {
           staggerOffset =
                   windowStagger.getStaggerOffset(context.getCurrentProcessingTime(), size);
       }
       long start =
               TimeWindow.getWindowStartWithOffset(
                       now, (globalOffset + staggerOffset) % size, size);
       return Collections.singletonList(new TimeWindow(start, start + size)); // 区别2 这里以当前时间作为参数传入
   }

从这段代码可以看到timestamp这个参数并没有进行使用在TimeWindow.getWindowStartWithOffset( now, (globalOffset + staggerOffset) % size, size);这段代码中第一个参数换成了now使用的当前时间,也就是处理时间.

使用场景:
TumblingEventTimeWindows适用于基于事件时间的数据流,并通常用于执行基于时间的聚合操作。例如,可以使用TumblingEventTimeWindows来计算每小时的平均输入请求量或处理不同餐厅菜品的每月营业额。

TumblingProcessingTimeWindows则适用于基于处理时间的数据流,并通常用于执行其他类型的基于时间的操作。例如,可以使用 TumblingProcessingTimeWindows来检测某个服务在过去一分钟内是否超过了阈值,或者使用计时器来触发某个事件。

根据数据流的特定需求和数据特性,选择适当的时间窗口类型非常重要。如果处理的是基于事件时间的数据流,并且需要按时间窗口对数据进行聚合,则应该选择 TumblingEventTimeWindows;如果处理的是基于处理时间的数据流,并且需要按时间进行其它类型的操作,则适合使用TumblingProcessingTimeWindows文章来源地址https://www.toymoban.com/news/detail-728016.html

到了这里,关于Flink中事件时间和处理时间(TumblingEventTimeWindows TumblingProcessingTimeWindows)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FlinkCEP - Flink的复杂事件处理

    FlinkCEP是在Flink上层实现的复杂事件处理库。 它可以让你在无限事件流中检测出特定的事件模型,有机会掌握数据中重要的那部分。 本页讲述了Flink CEP中可用的API,我们首先讲述[模式API],它可以让你指定想在数据流中检测的模式,然后讲述如何[检测匹配的事件序列并进行处

    2024年01月21日
    浏览(29)
  • 【大数据】流处理基础概念(二):时间语义(处理时间、事件时间、水位线)

    流处理基础概念(一):Dataflow 编程基础、并行流处理 流处理基础概念(二):时间语义(处理时间、事件时间、水位线) 流处理基础概念(三):状态和一致性模型(任务故障、结果保障) 😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点

    2024年02月19日
    浏览(36)
  • Flink的流式数据处理与时间序列分析

    Apache Flink 是一个流处理框架,用于实时数据处理和分析。它支持大规模数据流处理,具有高吞吐量和低延迟。Flink 可以处理各种数据源和数据接收器,如 Kafka、HDFS、TCP 流等。 时间序列分析是一种用于分析时间序列数据的方法,用于发现数据中的趋势、季节性和随机性。时间

    2024年02月21日
    浏览(37)
  • Flink cdc同步mysql到starrocks(日期时间格式/时区处理)

    flink 1.15.3(此时最新版本为1.16.1) mysql 5.7+ starrocks 2.5.2 mysql同步表结构 mysql中的timestamp字段是可以正常同步的,但是多了8小时,设置了mysql链接属性也没效果 参考下方的链接有两种方式; 参考资料 https://blog.csdn.net/cloudbigdata/article/details/122935333 https://blog.csdn.net/WuBoooo/article/deta

    2024年02月16日
    浏览(31)
  • Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)

                           星光下的赶路人star的个人主页                        你生而真实,而非完美 Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认

    2024年02月06日
    浏览(31)
  • 【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理

    Watermark 是用于处理事件时间的一种机制,用于表示事件时间流的进展。在流处理中,由于事件到达的顺序和延迟,系统需要一种机制来衡量事件时间的进展,以便正确触发窗口操作等。Watermark 就是用来标记事件时间的进展情况的一种特殊数据元素。 Watermark 的生成方式通常是

    2024年02月20日
    浏览(34)
  • Flink Temporal Join 系列 (4):用 Temporal Table Function 实现基于处理时间的关联

    博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧

    2024年04月23日
    浏览(27)
  • 【Flink-Kafka-To-Mongo】使用 Flink 实现 Kafka 数据写入 Mongo(根据对应操作类型进行增、删、改操作,写入时对时间类型字段进行单独处理)

    需求描述: 1、数据从 Kafka 写入 Mongo。 2、相关配置存放于 Mysql 中,通过 Mysql 进行动态读取。 3、此案例中的 Kafka 是进行了 Kerberos 安全认证的,如果不需要自行修改。 4、Kafka 数据为 Json 格式,获取到的数据根据操作类型字段进行增删改操作。 5、读取时使用自定义 Source,写

    2024年02月22日
    浏览(40)
  • 0基础学习PyFlink——事件时间和运行时间的窗口

    在 《0基础学习PyFlink——时间滚动窗口(Tumbling Time Windows)》一文中,我们使用的是运行时间(Tumbling ProcessingTime Windows)作为窗口的参考时间: 而得到的结果也是不稳定的。 这是因为每次运行时,CPU等系统资源的繁忙程度是不一样的,这就影响了最后的运行结果。 为了让结果稳

    2024年02月05日
    浏览(42)
  • 《Flink学习笔记》——第六章 Flink的时间和窗口

    6.1 时间语义 6.1.1 Flink中的时间语义 对于一台机器而言,时间就是系统时间。但是Flink是一个分布式处理系统,多台机器“各自为政”,没有统一的时钟,各自有各自的系统时间。而对于并行的子任务来说,在不同的节点,系统时间就会有所差异。 我们知道一个集群有JobMana

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包