如何使用 AutoPilot 对作业自动调优?

简介: 本文主要介绍如何使用 AutoPilot 对作业自动调优,解决 Flink 作业开发和运维的两大难题。

作者 | 吕文龙(龙三),阿里巴巴高级技术专家

摘要:本文由阿里巴巴高级技术专家吕文龙(龙三)分享,主要介绍如何使用 AutoPilot 对作业自动调优。内容将通过以下四个部分来介绍:

  1. AutoPilot简介
  2. AutoPilot实操演示
  3. 如何选择AutoPilot策略
  4. AutoPilot使用注意事项

一、AutoPilot简介

1.AutoPilot解决的难题

AutoPilot的主要目标是解决 Flink 作业开发和运维的两大难题。

  • 第一、作业调优难,开发和运维成本高的问题。

Flink作业通常需要很长时间运行,数据和作业的流量也会随着时间不断变化,因此作业资源也会随着时间不断变化。通常,我们需要随着时间变化对作业不断调优,才能保证作业长时间稳定运行。

Flink SQL的引入大大简化了作业的开发的难度,但是加大了作业的调优的难度。因为SQL的用户通常对底层的具体实现不了解,这就导致作业的调优难度会变大。

幻灯片04.png

  • 第二、作业资源利用率低、执行资源成本高的问题。

造成这个问题的原因是因为作业在没有动态资源优化的时候,通常都需要以最高峰时期的资源需求进行配置,在长时间运行中,非高峰时期的资源利用率就会比较低,这就会导致作业运行的成本偏高。

总体来说AutoPilot的目标是希望通过自动化的、自适应的资源调优来降低 Flink 的使用的门槛,同时降低 Flink 的使用的成本。

2.AutoPilot的系统架构

AutoPilot属于 Flink 管控服务的一部分,主要包括异常检测跟异常解决两个部分。AutoPilot异常检测主要通过实时订阅 Flink 作业的事件信息进行统计分析,识别因为资源问题导致的异常状态。当出现异常时,会触发资源自动调优来解决。AutoPilot异常解决主要通过动态更新作业资源配置的参数来实现的。作业配置参数更新后,管控服务的另外一个服务,也就是APP Manager就会自动重启 Flink 的作业,来实现最新的配置上限,从而实现作业配置的更新。

幻灯片05.png

目前AutoPilot主要支持三个功能:

  • 根据作业的实际负载动态调整作业的并发度,同时对应的调整TM的个数,这样就可以保证作业的资源随着流量的变化而变化,实现动态的调整;
  • 根据TM的内存利用率,动态调整TM的资源,这样可以保证单个TM内存的资源处于一个合理的状态;
  • 自动识别作业因为资源问题导致的异常,动态调整TM的资源,保证作业处于一个稳定的状态。

二、AutoPilot实操演示

1.如何为作业配置AutoPilot

AutoPilot支持为每个作业独立配置,可以动态更新AutoPilot的配置,不影响作业的正常运行。

AutoPilot提供了三种模式

  • 默认的Disabled模式:即AutoPilot不会进行作业状态的监控;
  • Active模式:AutoPilot启动作业状态监控,并再必要的时候自动更新作业参数配置;
  • Monitoring模式: 启动作业状态监控,在识别到作业异常时,提供配置更新建议,但是需要用户确认,手动触发更新作业配置。

AutoPilot提供了五种策略

  • Cpu-based策略:主要基于TM的CPU实际利用率来动态调整并发度,这是一个典型的弹性计算伸缩策略。当CPU利用率高的时候,说明作业比较繁忙,这时候AutoPilot就会扩大作业的并发度,来减少单个TM的负载。当CPU利用率低的时候,说明 TM比较空闲,这时候就可以反过来减少作业的并发度,来释放多余的资源;

  • Source-delay-based策略:主要根据source的delay metrics来判断是否需要进行并发度调整。这个策略目前只支持sls和datahub两种source。正在社区推进metrics标准化即FLIP-33,完成以后,这个策略会支持更多的 source;

  • Slot-utilization-based策略:主要根据task的slot利用率判断是否需要调小并发度。和CPU的利用率不同的而是,如果task里有io wait或者sleep的逻辑也会被计算在内,利用率的计算会更加准确。但这个策略依赖对source节点的利用率的统计,会依赖FLIP-27,因此也需要等到FLIP-27完全完成后才能实际生效;

  • Memory-utilization-based策略:主要基于TM实际内存的利用率以及GC metrics信息来判断是否需要调整 TM内存大小。当TM整体内存利用率低,而且没有GC严重的时候,可以调整内存的大小;当TM内存利用率已经偏高,或者说GC严重的时候,可以调大单个TM的内存,来保证上面跑的task处于比较健康的状态;

  • Job-exception-based策略:主要是自动识别因为资源异常所产生的作业的异常。当识别到这种异常的时候,AutoPilot会自动调大单个TM内存的大小来解决这种资源的异常,保证作业处于稳定的状态。

幻灯片08.png

AutoPilot的冷却时间

当AutoPilot处于Active或者Monitoring状态时,需要配置 AutoPilot的冷却时间。冷却时间是指两次rescale的最小时间间隔。因为AutoPilot触发的时候,作业需要重启,重启过程中需要进行作业状态的初始化以及预热,因此需要把这段时间排除掉,才能避免AutoPilot的策略做出错误判断。通常来说state越大,作业的初始化和预热的时间会越长,因此这时候冷却时间通常也要配的大一点才能保证AutoPilot正常的运行。

AutoPilot自定义参数

可以通过自定义的参数来个性化的控制AutoPilot的策略行为,以适配一些特殊的作业的要求。比如IO操作特别多的作业,如果开启了cpu-based,就需要把 cpu-based触发的阈值调低,这样才能适配作业实际cpu使用场景。

实操演示

针对这个提前创建好的作业,当需要对它做AutoPilot配置时,需要在作业详情页面上选择AutoPilot的tab页。默认状况AutoPilot是不会启动的,当需要启动的时候,需要在tab页上把AutoPilot的模式从disable转换成 Active或者Monitoring。

image.png

选择好模式后,需要选择所需的策略以及冷却的时间,自定义配置位置填上自定义的参数。然后保存,这样就可以开启AutoPilot, 对这个作业状态的进行监控以及资源的自动调优。

image.png

当需要关闭一个作业的AutoPilot的时候,同样也只需在配置页面,把模式切换成disable并保存就可以了,这样AutoPilot的状态又回到了未启动。无论怎样操作AutoPilot都不会影响作业的正常运行。

2.如何查看AutoPilot运行状态

当AutoPilot启动的时候,可以在自动调优的状态页面查看当前AutoPilot运行的状态。状态信息主要包含两部分:

  • 第一是最新推荐的作业配置。当AutoPilot处于Monitoring状态下面,如果有新的配置推荐产生,就会在这个页面进行展示。同时可以手动在这个页面触发配置的更新。
  • 第二是看到每个AutoPilot启动策略所监控到的作业的状态信息。这些状态信息一方面可以解释目前AutoPilot为什么要进行配置的更新,同时也可以用根据一些状态信息来辅助进行手动作业的调优或者代码的优化。

image.png

3.如何查看AutoPilot历史信息

AutoPilot在运行过程中,一旦对作业的配置进行了修改,这些修改都会被作为事件保存下来,让用户可以在后期进行AutoPilot行为的review,以及作业流量的分析。事件信息的查看,可以在“运行事件”里,将AutoPilot类型的事件过滤出来并进行查看。

幻灯片10.png

三、如何选择AutoPilot策略

1.一般场景作业

推荐大家使用默认参数,也就是cpu-based + memory-utilization-based + job-exception-base的组合策略。在这个默认策略下面,当TM的CPU利用率长期比较高的的时候就会触发并发度的调整;TM的内存的使用率偏高或者偏低的时候,就会触发单个TM的内存调整;当作业出现资源相关的异常的时候,也会及时的触发TM资源的调整。整个配置跟常见的弹性计算的自动调优配置是基本保持一样的,因此比较简单易懂。

2.高优先级、延迟敏感的作业

推荐不要开启AutoPilot的Active模式,而是使用Monitoring模式。因为这种类型的作业一旦触发AutoPilot的调优,就会导致作业重启,可能会影响业务效果。通过Monitoring模式,可以人工的定时的去review,检查是否有需要优化的配置,可以在适当的时机进行手动更新。

3.使用sls或者datahub的作业

推荐使用source-delay-based + slot-utilization-based + memory-utilization-based + job-exception-based 策略。这样对作业并发度的调优效果会更好,整个算法的收敛的速度会更快。

幻灯片12.png

四、AutoPilot使用注意事项

幻灯片14.png

首先,AutoPilot修改并发度是通过默认的并发度来实现的,因此作业代码中不能显示设置并发度,否则就无法实现动态调节。

其次,AutoPilot触发更新以后,控制台会自动重启作业,这会导致作业短暂的停止处理数据,对于抖动敏感的作业推荐使用Monitoring模式,避免对业务产生影响。

第三,是AutoPilot策略对作业的数据模型有一定假设:

  • 作业的流量需要是流量平滑变化的,不能有数据倾斜,这样可以根据当前时间之前一小段时间作业的运行统计数据来预估作业所需资源;
  • 作业的数据不能有数据倾斜,每个算子的吞吐能力会随着并发度线性扩展,这样才可以根据当前作业的吞吐能力去预估并发度调整后作业的吞吐能力,从而决定作业需要调整多少并发度;

当作业的pattern严重偏离这几个假设时,可能会存在作业异常, AutoPilot没有触发自动调整,或者说AutoPilot触发了自动的调整,但是算法可能会出现无法收敛,这时作业会持续的处于异常状态,并且不断的重启等等。此时需要关闭AutoPilot,进行手动的作业调优,才能保证作业处于健康的状态。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
6月前
|
人工智能 运维 监控
Flink 智能调优:从人工运维到自动化的实践之路
本文由阿里云Flink产品专家黄睿撰写,基于平台实践经验,深入解析流计算作业资源调优难题。针对人工调优效率低、业务波动影响大等挑战,介绍Flink自动调优架构设计,涵盖监控、定时、智能三种模式,并融合混合计费实现成本优化。展望未来AI化方向,推动运维智能化升级。
826 8
Flink 智能调优:从人工运维到自动化的实践之路
|
SQL 消息中间件 存储
Flink报错问题之Flink报错:Table sink 'a' doesn't support consuming update and delete changes which is produced by node如何解决
Flink报错通常是指在使用Apache Flink进行实时数据处理时遇到的错误和异常情况;本合集致力于收集Flink运行中的报错信息和解决策略,以便开发者及时排查和修复问题,优化Flink作业的稳定性。
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
物联网 Linux C#
一键掌控未来!用 Uno Platform 打造跨平台 IoT 应用,轻松连接你的智能设备,让生活更智能!
微软的开源跨平台框架 Uno Platform 支持使用 C# 和 XAML 一次性编写代码并部署至多个平台,如 Windows、macOS、Linux、WebAssembly 及 iOS/Android,这使其成为 IoT 设备开发的理想选择。本文通过创建控制网络 LED 灯的应用,详细介绍了 Uno Platform 的环境搭建及 MQTT 客户端配置过程,实现了 LED 状态订阅与控制指令发送功能。该案例展示了 Uno Platform 在 IoT 领域的潜力及其跨平台优势,未来可扩展至更多设备类型,构建智能家居系统。
893 58
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
|
消息中间件 SQL 分布式计算
重新定义性能测试: Apache Flink 重磅开源流计算基准测试框架
每一种引擎有其优势的地方,如何选择适合自己业务的流计算引擎成了一个由来已久的话题。除了比较各个引擎提供的不同的功能矩阵之外,性能是一个无法绕开的评估因素。基准测试(benchmark)就是用来评估系统性能的一个重要和常见的过程。
重新定义性能测试: Apache Flink 重磅开源流计算基准测试框架
|
机器学习/深度学习 图形学 UED
优化用户体验与广告收入平衡的策略:提升IAA游戏变现效率
【7月更文第30天】随着移动游戏市场的竞争日益激烈,开发者必须确保他们的应用既能吸引并保留用户,又能从中获得足够的收入来维持运营和发展。IAA是一种有效的收入来源,但如果处理不当,可能会损害用户体验。因此,了解如何平衡IAA与用户体验至关重要。
1012 0
|
SQL Oracle 关系型数据库
Flink的表值函数(Table-Valued Function,TVF)是一种返回值是一张表的函数
【2月更文挑战第17天】Flink的表值函数(Table-Valued Function,TVF)是一种返回值是一张表的函数
404 1
|
存储 关系型数据库 数据挖掘
Hologres
Hologres 是一个基于 PostgreSQL 的云原生数据仓库,由阿里云提供。它将 PostgreSQL 数据库和 Apache Hadoop 的分布式计算引擎相结合,提供了高效的数据仓库存储和分析功能,支持 PB 级别的数据处理和查询。
1187 1