阿里基于Blink开发了VVP实时计算开发平台,其中有个模块是autopliot,可以做到任务的实时监控并且完成资源的自动调优和分配,以下是一些记录:
【实现策略】
- 基于CPU利用率
- 基于内存利用率
- 基于由于反压导致的delay,需要调整算子并行度
- 基于slot利用率
- 基于JobException的原因进行诊断(这是一个兜底策略,但也是最难广泛涵盖的情况,目前可以识别并解决的有:因为资源分配不足导致任务启动的时候抛出的OOM异常)
【注意事项】
- AutoPliot自动调整并发度是通过默认的并发度来实现的,因此作业每个节点都不能设置并发度,否则就无法实现动态调节。
- AutoPliot触发后需要重启作业(重启后可根据checkpoint恢复),会导致作业短暂停止处理数据。
- AutoPliot策略对作业的处理模式假设:流量平滑变化、不能有数据倾斜、每个算子的吞吐能力能够随并发度线性拓展,当作业pattern严重偏离这几个假设,可能会存在作业异常,没有触发scale,或者算法无法收敛,作业持续重启等异常情景,此时需要关闭AutoPliot手动调优。
- AutoPliot目前无法识别外部系统的问题:当外部系统故障,访问变慢时,会导致作业scale up,导致输出压力变大,会加重外部系统的压力,导致外部系统雪崩。
- AutoPliot目前不支持session cluster部署的作业。
- Deployment更新后需要手动重启作业。