州无界增长 - Amazon Kinesis Data Analytics
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

州无界增长

如果你的应用程序没有正确处置过时的状态信息,它会不断积累并导致应用程序性能或稳定性问题。本节介绍这种情况的症状和故障排除步骤。

征兆

这种情况可能为以下症状:

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

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

原因和解决方法

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

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

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

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

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

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

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

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