无限制的州增长 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink 之前称为 Amazon Kinesis Data Analytics for Apache Flink。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

无限制的州增长

如果您的应用程序未正确处理过时的状态信息,则这些信息将不断积累并导致应用程序性能或稳定性出现问题。本节介绍这种情况的症状和故障排除步骤。

症状

这种情况可能具有以下症状:

  • lastCheckpointDuration指标正在逐渐增加或激增。

  • lastCheckpointSize指标正在逐渐增加或激增。

原因和解决方案

以下情况可能会导致您的应用程序积累状态数据:

  • 您的应用程序保留状态数据的时间超过了所需的时间。

  • 您的应用程序使用持续时间过长的窗口查询。

  • 您没有为状态数据设置 TTL。有关更多信息,请参阅 Apache Flink 文档中的状态存活时间 (TTL)

  • 您正在运行的应用程序依赖于 Apache Beam 版本 2.25.0 或更高版本。你可以选择退出新版本的读取转换,方法是 BeamApplicationProperties使用关键实验和值来扩展你的读取转换use_deprecated_read。有关更多信息,请参阅 Apache Beam 文档

有时,应用程序会面临不断增加的状态规模增长,从长远来看,这是不可持续的(毕竟 Flink 应用程序可以无限期运行)。有时,这可以追溯到应用程序将数据存储在状态中,而旧信息没有正确过期。但是有时候人们对 Flink 能提供的功能抱有不合理的期望。应用程序可以在跨几天甚至几周的大时间窗口内使用聚合。AggregateFunctions除非使用允许增量聚合,否则 Flink 需要保持整个窗口的事件处于状态。

此外,在使用流程函数实现自定义运算符时,应用程序需要从状态中删除业务逻辑不再需要的数据。在这种情况下, time-to-live可以使用 st at e 根据处理时间自动使数据过时。Managed Service for Apache Flink使用增量检查点,因此状态 ttl 基于 RocksDB 压缩。只有在压缩操作发生后,您才能观察到状态大小的实际缩小(由检查点大小表示)。特别是对于小于 200 MB 的检查点大小,您不太可能观察到由于状态过期而导致检查点大小缩小。但是,保存点基于不包含旧数据的状态的干净副本,因此您可以在 Managed Service for Apache Flink中触发快照,以强制删除过期的状态。

出于调试目的,禁用增量检查点以更快地验证检查点大小是否确实减小或稳定下来(并避免 RockSB 中压缩的影响)将很有用。不过,这需要向服务团队创建工单。