apache-flink - 为什么我的 Flink 窗口使用这么多状态?
问题描述
我的 Flink 工作的检查点越来越大。在深入研究单个任务之后,键控窗口功能似乎负责大部分大小。我怎样才能减少这种情况?
解决方案
如果您在 Windows 中绑定了很多状态,则有几种可能性:
使用增量聚合(通过使用
reduce
oraggregate
)可以显着降低您的存储需求。否则,每个事件都会被复制到分配给每个窗口的事件列表中。如果您在多个时间范围内进行聚合,例如每分钟和每 10 分钟,您可以级联这些窗口,以便 10 分钟窗口仅消耗一分钟窗口的输出,而不是每个事件。
如果您使用滑动窗口,则每个事件都被分配给每个重叠窗口。例如,如果您的窗口长 2 分钟并滑动 1 秒,则每个事件将被复制到 120 个窗口中。增量和/或预聚合在这里会有所帮助(很多!),或者您可能希望使用 a
KeyedProcessFunction
而不是窗口来优化您的状态足迹。如果您有键控计数窗口,您可能拥有从未(或仅非常缓慢地)达到所需批量大小的键,导致越来越多的部分批次处于状态。除了基于计数的触发之外,您还可以实现一个
Trigger
包含超时的自定义,以便最终处理这些部分批次。如果您
globalState
在 a中使用ProcessWindowFunction
,则过期键的 globalState 将累积。您可以在 globalState 的状态描述符上使用状态 TTL。注意:这是唯一一个在清除窗口时不会自动释放窗口状态的地方。或者可能只是您的密钥空间随着时间的推移而增长,除了扩展集群之外,真的没有什么可以做的。
推荐阅读
- powershell - 将字节写入文件,字节移位
- javascript - 如何在 mvc 和 JavaScript 中使用异步获取进行发布请求?
- angular - 找不到连接的设备。模拟器启动失败
- android - 为什么必须在 onDestroyView() 中调用 clearFindViewByIdCache()?
- python - 检查python3中是否存在samba目录
- sql - 按年份选择最小计数('x')
- c# - 使用 @Html.dropdrowlistfor 还是使用从 html 中选择并使用 javascript 填充它会更好吗?
- python - 模型的特征数量必须与输入相匹配。Python 错误
- azure-container-instances - 在 Azure 容器实例中装载单个文件?
- swift - 如何在 tvOS 上使用 Photokit 创建连续图像幻灯片?