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