apache-flink - Flink 关于与第一项时间戳相关的事件时间窗口的混淆
问题描述
我有一个包含数据和时间戳的记录日志,并且我的 Flink 应用程序按时间戳升序接收记录。在某个键的第一个项目到达窗口后,我想在 X 事件时间后关闭窗口并检查是否有足够的项目到达某个条件,并为该键发出通过或失败。
这对于 Flink 中的基本窗口函数是不可能的吗?例如,如果我希望我的窗口长 30 秒,但键的第一项到达 15 秒,最后一项到达 40 秒,那么窗口似乎将在 30 秒关闭,并且该键的记录轨迹将分为两个窗口。在这种情况下,我想要的是窗口在事件时间的 15 秒处开始并在 45 秒处关闭。
解决方案
以我的经验,这些用例在 a 中KeyedProcessFunction
比使用自定义窗口更容易实现(内置窗口不能满足您的要求):
- 在
processElement
您可以将元素缓冲到托管状态并在未来一段时间(30秒)注册一个计时器 - 在
onTimer
您检查是否有足够的元素到达,评估您的状况并向下游发出。
推荐阅读
- ruamel.yaml - 使用 ruamel yaml 保留 YAML 的结构
- python - 带有 macOS Big Sur 11.2.1 的苹果 m1 安装软件失败,出现终止错误
- google-apps-script - 谷歌驱动评论,下一个 PageToken 和登录到谷歌表
- amazon-web-services - AWS Amplify 中的应用程序设置下不存在监控选项
- python - 使用 AWS lambda 连接到 SQL Server 时出错
- c++ - 错误:无法为 A 合成构造函数
- laravel - 使用 Laravel 查询构建器的“何时”方法时,你真的需要返回吗?
- html - Bootstrap 5导航栏按钮折叠不起作用
- python - OpenCV 代码中的错误:cv2.error: OpenCV(4.5.1)
- python - 这 for 语句如何正确?