本文为您介绍检查点和快照超时的诊断方法和调优策略。
运行原理
Flink的状态管理核心机制依赖于Chandy-Lamport算法,以确保数据的一致性和可靠性。在此框架下,检查点和快照的执行过程可以概括为两个主要阶段:
同步阶段:此阶段的关键在于Barrier的对齐和同步资源的维护。Barrier作为一种特殊的数据记录,在算子之间传递时,其对齐的时间与数据记录的延迟成正相关关系。
异步阶段:在此阶段算子会将本地状态数据上传至远程的持久化存储系统,上传时间的长短与状态数据的大小成正比。
当Flink作业面临反压问题时,同步阶段的执行可能会变得缓慢,从而导致检查点和快照超时。因此,在遇到检查点和快照超时问题,并且监测到作业存在反压时,应首先参考SQL作业大状态导致反压的调优原理与方法和DataStream作业大状态导致反压的调优原理与方法优先解决反压问题,以提高作业的整体效率和稳定性。
问题诊断方法
在反压问题解决后,如果检查点与快照仍出现超时现象,则首先应分析同步阶段的对齐时间是否过长,随后考虑是否由庞大的状态数据引起。
Checkpoint UI
在
页面作业日志页签下的 中,观察不同级别(作业、算子、单并发)的Checkpoint指标,分析检查点和快照超时原因。您可以着重观察超时的Checkpoint的异常算子或正在进行的Checkpoint的算子,定位思路如下:
其Sync Duration和Alignment Duration是否较长:如是,则可基本判定其瓶颈在同步阶段上,需要优先解决同步阶段问题。
其Async Duration是否较长,以及其Checkpointed Data Size是否较大:如是,则可基本判定其瓶颈在异步阶段状态上传上。
Checkpoint指标
在
页面监控告警页签查看lastCheckpointDuration和lastCheckpointSize指标,来粗粒度分析历史Checkpoint的耗时和大小。调优策略
在进行性能调优之前,首先要确保运行时性能达到预期。如果当前性能水平不足,应优先根据运行时性能优化指南进行调整。在满足基本性能要求后,为了进一步提高检查点和快照的效率,可以考虑以下策略。
策略 | 策略说明 | 使用场景 | 配置方法 | 注意事项 |
使用Unaligned Checkpoint和Buffer Debloating | 可以有效解决因等待数据对齐而导致的超时问题,适用于各种规模的作业。 | 检查点或快照同步超时 | 运行参数中配置,详情请参见Unaligned checkpoints和Buffer debloating使用方式。 | 请参见Limitations。 |
增加运行时的并发资源 | 通过增加并发资源,可以减少单个并发任务的状态量,从而加速异步快照的处理流程。 | 检查点或快照异步超时 | 在资源配置或细粒度资源配置中增加并发,详情请参见配置作业资源。 | 无。 |
使用原生快照 | 相比标准快照,原生快照生成速度更快,存储占用更小。 | 快照异步超时 | 对运行中的作业,创建原生格式的作业快照,详情请参见手动创建作业快照。 | 原生快照无法保证跨大版本兼容。 |
相关文档
大状态作业导致的问题和大状态作业诊断调优整体思路详情,请参见大状态作业调优实践指南。
Flink SQL由优化器根据配置项以及SQL语句来推导生成状态算子,想要高效处理有状态的大规模数据和性能调优,需要对SQL状态算子生成机制、管理策略、诊断方法和调优方法有一定了解,详情请参见SQL作业大状态导致反压的调优原理与方法。
Flink Datastream API在状态管理方面提供了灵活的接口,您可以采取相关措施来确保状态大小可控,避免状态的无限制增长,详情请参见DataStream作业大状态导致反压的调优原理与方法。
从检查点或快照中恢复作业会需要从远程存储中下载状态文件并重建状态引擎,容易成为恢复过程中的效率瓶颈,可能会造成作业的长时间停滞。恢复过程的瓶颈问题的诊断方法和调优策略详情,请参见作业启动和扩缩容速度优化。