apache-flink - 优化 flink 窗口
问题描述
我有 flink 工作,我需要在 1 小时内对收到的记录进行重复数据删除。重复数据删除后,我需要收集所有这些已重复数据删除的文档并进行一些聚合(例如计数),然后生成目标主题。
现在,因为我只需要收集那些重复数据的文件,我可能不一定需要等待 1 小时。我怎样才能避免这个 1 小时的窗口只是为了收集这些文件,但是一旦它们收集了就继续进行聚合。
因此,我想避免的资源占用内存和检查点大小正在增加。
水印策略:
WatermarkStrategy<PlImaGuidInterimMessageVO> watermarkStrategy = WatermarkStrategy
.<PlImaGuidInterimMessageVO>forBoundedOutOfOrderness(Duration.ofMillis(maxOutOfOrderness))
.withTimestampAssigner((event, timestamp) -> event.getEventTimeStamp());
任何建议,将不胜感激。
解决方案
除非您正在执行未显示的异常操作,否则第二层窗口将在收到第一层的结果后立即关闭。换句话说,一旦完成重复数据删除,您就应该得到最终结果。
但是,翻转窗口并不是实现重复数据删除的理想技术。问题是窗口与时代对齐。这意味着时间戳为 1:59 且在 2:01 重复的事件不会被删除重复数据。
在我看来,最好使用带有计时器的简单 KeyedProcessFunction。对流进行键控,以便只有重复项具有相同的键,并在 ValueState 中使用布尔值来记住给定键最近是否已被看到足够多,以至于应过滤掉后续出现。使用 Timer 清除状态。
会话窗口是实现重复数据删除的另一种好方法,尽管语义再次不同。
推荐阅读
- r - R:效果包 | 混合效应模型。绘制模型估计
- css - 调整大小时 CSS 网格项不跨越设置的列
- docker - Nginx 在 dockerized react 应用程序中尝试获取子路由时返回 404
- python - python:有时会忽略影响
- python - 在 Tkinter 中更新条目和标签小部件
- ruby-on-rails - Rails 路线出现但抛出 404 错误
- jmeter - Jmeter中的参数化文件/文件夹路径
- oracle - 通过 APEX 从数据库服务器下载文件
- vue.js - 设置 vue.config.js 文件以模拟生产设置(连接两个应用程序)
- vba - 使用 Find 和 Resize 转置值错误