状态偏斜 - Managed Service for Apache Flink

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

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

状态偏斜

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

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

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

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