Flink 使用窗口结果
2023-04-18 13:09:16 时间
窗口操作的结果还是一个DataStream,没有保留的信息窗口的操作结果元素,没有关于窗口操作的信息被保留在结果元素中,所以如果你想保留关于窗口的元信息,你必须手动将这些信息编码到ProcessWindowFunction的结果元素中。在结果元素上设置的唯一相关信息是元素时间戳。它被设置为已处理窗口允许的最大时间戳,即结束时间戳- 1,因为窗口结束时间戳是排他的。注意,这对于事件时间窗口和处理时间窗口都是正确的。例如,在一个窗口操作元素之后总是有一个时间戳,但这可以是一个事件时间戳或一个处理时间戳。对于处理时间窗口,这没有特别的含义,但是对于事件时间窗口,这一点以及水印与窗口的交互方式使得具有相同窗口大小的连续窗口操作成为可能。我们将在看了水印如何与窗口交互之后介绍这一点。
水印和窗口的相互作用
在继续本节之前,您可能希望看看我们关于事件时间和水印的部分。
当水印到达窗口操作符时,会触发两件事:
- 水印触发所有最大时间戳(end-timestamp – 1)小于新水印的窗口的计算
- 水印被(按原样)转发到下游操作
直观地说,一旦下游操作接收到水印,水印就会“清除”所有可能被认为是后期操作的窗口。
连续窗口的操作
如前所述,计算加窗结果的时间戳的方式以及水印与窗口交互的方式允许将连续加窗操作串在一起。当你想要执行两个连续的窗口操作,你想使用不同的键,但仍然希望来自相同的上游窗口的元素最终在相同的下游窗口时,这是很有用的。
DataStream<Integer> input = ...;
DataStream<Integer> resultsPerKey = input
.keyBy(<key selector>)
.window(TumblingEventTimeWindows.of(Time.seconds(5)))
.reduce(new Summer());
DataStream<Integer> globalResults = resultsPerKey
.windowAll(TumblingEventTimeWindows.of(Time.seconds(5)))
.process(new TopKWindowFunction());
在本例中,第一次操作的时间窗口[0,5)的结果也将在后续加窗操作的时间窗口[0,5)中结束。这允许计算每个键的和,然后在第二个操作中计算同一窗口内的top-k元素。
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!