

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

# 状态偏斜
<a name="troubleshooting-state-skew"></a>

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

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

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

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