为什么我的Flink窗口使用这么多状态?



Flink作业的检查点越来越大。在深入到单个任务之后,键控窗口函数似乎要为大部分的大小负责。我怎样才能减少这个?

如果在windows中绑定了许多状态,则有以下几种可能性:

  • 使用增量聚合(通过使用reduceaggregate)可以显著降低存储需求。否则,每个事件将被复制到分配给每个窗口的事件列表中。

  • 如果您在多个时间范围内聚合,例如,每分钟和每10分钟,您可以级联这些窗口,以便10分钟窗口只消耗一分钟窗口的输出,而不是每个事件。

  • 如果你使用滑动窗口,每个事件被分配到每个重叠的窗口。例如,如果您的窗口长2分钟,滑动1秒,则每个事件被复制到120个窗口中。增量和/或预聚合将在这里提供帮助(很多!),或者您可能希望使用KeyedProcessFunction而不是窗口来优化您的状态占用。

  • 如果你有键计数窗口,你可能有键,所需的批大小从来没有(或只是非常缓慢)达到,导致越来越多的部分批处于状态。您可以实现一个自定义的Trigger,除了基于计数的触发之外,还包含一个超时,以便最终处理这些部分批处理。

  • 如果您在ProcessWindowFunction中使用globalState,则失效密钥的globalState将累积。您可以在globalState的状态描述符上使用状态TTL。注意:这是唯一一个在清除窗口时不会自动释放窗口状态的地方。

  • 或者可能只是你的键空间随着时间的推移而增长,除了扩展集群之外,真的没有什么可以做的。

相关内容

  • 没有找到相关文章

最新更新