开发者学堂课程【《实时计算 Flink 版产品入门与实操》:如何使用 AutoPilot 对作业自动调优】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/334/detail/3740
如何使用 AutoPilot 对作业自动调优
目录:
● AutoPilot 简介
● AutoPilot 实操演示
● 如何选择 AutoPilot 的策略
● AutoPilot 的使用注意事项
一、AutoPilot 简介
AutoPilot 的目标
● 作业调优难,开发、运维的人力成本高
>Flink流作业长时间运行,作业流量随时间不断变化,数据会随着时间不断变化,资源需求也会随着时间不断变化,需要重复的调优。
>Flink SQL 大大简化了作业的开发难度,加大了作业调优难度∶由于 SQL 用户对底层具体实现不了解,问题定位难。
● 作业资源利用率低,执行的资源成本高
>以高峰期的资源配置长时间运行,导致资源利用率低
● 自动化、自适应的调优,降低 Flink 的使用门槎、降低使用的成本
AutoPilot 的系统架构
AutoPilot 目前支持的功能
● 根据作业的实际负载动态调整作业的并发度,同时对应的调整 TM 的个数
●根据 TM 的内存利用率,动态调整 TM 的资源
● 自动识别作业因为资源问题导致的异常,动态调整 TM 的资源
二.AutoPilot 实操演示
如何为作业配置 AutoPilot
● 每个作业独立配置、动态更新
● 模式
>Disabled∶关团 AutoPilot
>Active∶启动作业状态监控,并在必要的时候自动更新作业参数配置。
>Monitoring∶启动作业状态监控,在识别到作业异常时,提供配置更新建议,但是需要用户确认,自己手动修改作业配置。
●策略
>Cpu-based∶基于 TM 的 cpu 利用率来动态调整并发度,典型的弹性伸缩的策略。
>Source-delay-based∶source 的 delay metrics 持续上升时,调大并发度,目前只支持 sls 和 datahub,社区正在推进 metrics 标准化(FLIP-33)。
>Slot-utilization-based∶基于 task 的 slot 利用率判断是否需要调小并发度,和 cpu不一样的是,io wait、sleep 也会被计算在内,利用率计算更加准确,依赖 FLIP-27 。
>Memory-utilization-based∶基于 TM 内存的实际利用率和 GC 的 metrics 判断是否需要调整 TM 的内存大小。
>Job-exception-based∶自动识别因为资源异常所产生的作业异常,自动调大 TM 的内存大小。
● 冷却时间
>两次 rescale 的最小间隔,用于初始化、预热
●自定义参数
> 个性化控制策略行为,来适配特殊作业的要求
> 对于 IO 操作多的作业,cpu-based 的触发调整的阈值要降低
查看 AutoPilot 的运行状态
● 自动调优->状态
● Monitoring 状态下,可以查看当前是否有新的配置推荐,推荐配置可以直接该改页面直接触发更新
● 可以看到启动的策略,监控到的作业的状态信息
查看 AutoPilot 的历史信息
● 运行事件页面->自动调优
● 可以查看整个作业生命周期内,AutoPilot 对作业做过什么操作,因为什么触发的配置更新
三、如何选择 AutoPilot 的策略
如何选择 AutoPilot 的策略
●一般作业使用默认参数∶
cpu-base+memory-utilization-based +job-exception-based
>简单、易懂
● 高优先级、延迟敏感作业,使用 Monitoring 模式,定时 review 检查优化推荐,手动更新
● 对于使用 sls、datahub 的作业,推荐使用 source-delay-based+slot-utilization-based+memory-utilization-
based + job-exception-based 策略
>效果更好,收敛速度更快
四、AutoPilot 的使用注意事项
● AutoPilot 修改并发度是通过默认的并发度来实现的,因此作业代码中不能显示设置并发度,否则就无法实现动态调节
● AutoPilot 触发更新后,控制台会自动重启作业,会导致作业短暂停止处理数据,对抖动敏感的作业,推荐使用 Monitor 模式,避免对业务产生影响
● AutoPilot 策略对作业的数据模型有一定假设∶
流量平滑变化、不能有数据倾斜、每个算子的吞吐能力能够随并发度线性拓展,当作业 pattern 严重偏离这几个假设时,可能会存在作业异常,没有触发自动调整,或者算法无法收敛,作业持续重启等异常场景,此时需要关闭 AutoPilot,手动进行作业调优