状态偏斜 - 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。

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

状态偏斜

对于有状态的运算符,即为其业务逻辑(例如窗口)保持状态的运算符,数据倾斜总是会导致状态偏差。由于数据偏差,某些子任务比其他子任务接收更多的事件,因此还会将更多的数据保留在状态中。但是,即使对于具有均衡分区的应用程序,在状态下保留的数据量也可能存在偏差。例如,对于会话窗口,某些用户和会话分别可能比其他用户和会话长得多。如果较长的会话恰好属于同一个分区,则可能导致同一操作员的不同子任务所保持的状态大小不平衡。

状态偏差不仅会增加单个子任务所需的更多内存和磁盘资源,还会降低应用程序的整体性能。当应用程序使用检查点或保存点时,操作员状态会保留到 Amazon S3 中,以保护该状态免受节点或集群故障的影响。在此过程中(尤其是在 Managed Service for Apache Flink 上默认启用一次语义的情况下),从外部角度来看,处理会停止,直到检查点/保存点完成。如果存在数据偏差,则完成操作的时间可能受累积了特别多的状态的单个子任务的限制。在极端情况下,由于单个子任务无法保持状态,因此获取检查点/保存点可能会失败。

与数据倾斜类似,状态偏差会大大降低应用程序的速度。

要识别状态偏差,您可以利用 Flink 控制面板。查找最近的检查点或保存点,并在详细信息中比较为各个子任务存储的数据量。