无限制的状态增长 - Managed Service for Apache Flink
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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 需要保持整个窗口的事件处于状态中。

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

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