41、Flink 连续窗口操作详解

使用窗口计算的结果
a)概述

窗口操作的结果会变回 DataStream,并且窗口操作的信息不会保存在输出的元素中,如果想要保留窗口的 meta-information,需要在 ProcessWindowFunction 里手动将他们放入输出的元素中。

输出元素中保留的唯一相关的信息是元素的 timestamp ,它被设置为窗口能允许的最大 timestamp,也就是 end timestamp - 1,因为窗口末端的 timestamp 是排它的,同时适用于 event-time 窗口和 processing-time 窗口。

在窗口操作之后,元素总是会携带一个 event-time 或 processing-time timestamp,对 Processing-time 窗口来说,这并不意味着什么。 而对于 event-time 窗口来说,"输出携带 timestamp" 以及 "watermark 与窗口的相互作用" 这两者使建立窗口大小相同的连续窗口操作变为可能。

b)watermarks 和 windows 的交互

当 watermark 到达窗口算子时,它触发了两件事:

  • 这个 watermark 触发了所有最大 timestamp(即 end-timestamp - 1)小于它的窗口
  • 这个 watermark 被原封不动地转发给下游的任务。
c)连续窗口操作

窗口结果的 timestamp 如何计算以及 watermark 如何与窗口相互作用使串联多个窗口操作成为可能;这提供了一种便利的方法,能够有两个连续的窗口,他们即能使用不同的 key, 又能让上游操作中某个窗口的数据出现在下游操作的相同窗口。

示例 :第一个操作中时间窗口[0, 5) 的结果会出现在下一个窗口操作的 [0, 5) 窗口中,即先在一个窗口内按 key 求和,再在下一个操作中找出这个窗口中 top-k 的元素。

复制代码
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());
相关推荐
STLearner15 小时前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
亚马逊云开发者17 小时前
【Bedrock AgentCore】AI Agent 回答不一致怎么办?双 Memory 架构实现服务标准化(附完整代码)
大数据·人工智能·架构
大嘴皮猴儿19 小时前
从零开始学商品图翻译:小白也能快速掌握的多语言文字处理与上架技巧
大数据·ide·人工智能·macos·新媒体运营·xcode·自动翻译
雷工笔记19 小时前
《为什么 10 倍增长比 2 倍更容易》读书笔记:反内卷的指数级增长破局法
大数据
captain_AIouo19 小时前
OZON航海引领者Captain AI指引运营新航向
大数据·人工智能·经验分享·aigc
K3v20 小时前
【git】删除本地以及远端已经合并到master的分支
大数据·git·elasticsearch
53AI21 小时前
智能调度赋能交通行业:从经验驱动到数据智能的跨越
大数据·人工智能·知识库·智能调度·53ai
黎阳之光1 天前
黎阳之光核工厂202应急管控平台|全域实景孪生,筑牢核安全最后一道防线
大数据·人工智能·算法·安全·数字孪生
roman_日积跬步-终至千里1 天前
【系统架构设计师-综合题-知识点(1)】系统工程与信息技术基础
大数据
Elastic 中国社区官方博客1 天前
Elasticsearch:快速近似 ES|QL - 第二部分
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索