本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
状态偏差
对于有状态运算符,即为其业务逻辑(如窗口)维护状态的运算符,数据偏斜总是会导致状态偏差。由于数据偏斜,某些子任务比其他子任务接收更多的事件,因此也将更多的数据保留在状态中。但是,即使对于分区均匀平衡的应用程序,在状态下保留的数据量也可能存在偏差。例如,对于会话窗口,某些用户和会话可能分别比其他用户和会话长得多。如果较长的会话恰好属于同一个分区,则可能导致同一运算符的不同子任务保持的状态大小不平衡。
状态偏差不仅会增加单个子任务所需的更多内存和磁盘资源,还会降低应用程序的整体性能。当应用程序使用检查点或保存点时,操作员状态将保留到 Amazon S3 中,以保护状态免受节点或集群故障的影响。在此过程中(尤其是在 Kinesis Data Analytics 上默认启用一次语义的情况下),从外部角度来看,处理将暂停,直到检查点/保存点完成。如果存在数据偏差,则完成操作的时间可能受单个子任务的限制,该子任务已累积了特别多的状态。在极端情况下,获取检查点/保存点可能会因为单个子任务无法保持状态而失败。
与数据偏斜类似,状态偏斜会大大减慢应用程序的速度。
要识别状态偏差,您可以利用 Flink 控制面板。查找最近的检查点或保存点,并在详细信息中比较为各个子任务存储的数据量。