背景信息
用户通常需要花费大量的时间对作业进行调优。例如新上线一个作业时,需要考虑如何配置该作业的并行度、TaskManager 个数、TaskManager CU 数等。此外,作业运行过程中,还需要考虑如何调整作业资源配置,提升作业的资源利用率;而作业出现反压或延时增大的情况时,需要考虑增大作业资源配置等。
Oceanus 提供的自动调优功能,可以帮助用户更合理地调整作业并行度和资源配置,全局优化您的作业,解决作业吞吐量不足、作业繁忙以及资源浪费等各种性能调优问题。
使用限制
自动调优无法解决流作业本身的性能瓶颈。
因为调优策略对作业的处理模式是基于一定的假设的。例如,流量平滑变化、不能有数据倾斜、每个算子的吞吐能力能够随并发度的升高而线性拓展。当业务逻辑严重偏离以上假设时,作业可能会存在异常。如果作业本身存在问题,您需要进行手动调优。常见的作业异常如下:
无法修改作业并发度。
作业不能达到正常状态、作业持续重启。
自定义函数 UDF 性能问题。
数据严重倾斜。
自动调优无法解决外部系统导致的问题。
外部系统故障或访问变慢时,会导致作业并行度增大,加重外部系统的压力,导致外部系统雪崩。如果出现外部系统问题,您需要自行解决。常见的外部系统问题如下:
源头消息队列分区数不足或吞吐量不足。
下游 Sink 性能问题。
下游数据库死锁。
注意事项
自动调优功能为目前处于公开测试阶段(Beta 版本),暂不建议对重要的生产任务开启自动扩缩容。
自动调优触发后需要重启作业,因此会导致作业短暂停止处理数据。大状态的作业由于启停过程耗时较长,可能导致长时间停流,不建议开启自动扩缩。
连续两次自动调优触发间隔默认为10分钟。
如果用户为 Jar 类型的作业开启了自动调优,请确认作业代码中未配置作业并行度,否则自动扩缩容将无法调整作业资源,即自动调优配置无法生效。
由于集群资源限制,当前作业自动调优过程为串行执行,因此不要为集群中所有作业开启自动调优,否则会相互影响。
默认调优规则
开启自动调优后,Oceanus 会自动调整作业并行度和 TaskManager CU 数这两个配置,对作业进行优化。
1. 自动调优会调整作业并行度来满足作业流量变化所需要的吞吐。自动调优会监控TaskManager CPU 使用率和各个算子处理数据能力来调整作业的并发度。详情如下:
作业所有 TaskManager 的 CPU 使用率连续 10 分钟超过 80%,将作业默认并行度调高为原来的一倍,但作业运行 CU 数不超过设置最大的资源(默认为 64 CU)。
作业任意一个 Vertex 节点连续 10 分钟处理数据时间占比超过 80%,将作业默认并行度调高为原来的一倍,但作业运行 CU 数不超过设置最大的资源(默认为 64 CU)。
作业所有 TaskManager 的 CPU 使用率连续 4 小时低于 20%,并且所有 Vertex 节点 4 小时内处理数据时间占比均低于 20% 时,将作业默认并行度调低为原来的一半,最小降低到 1。
2. 自动调优也会监控作业的 TaskManager 内存使用情况来调整作业的内存配置。详情如下:
作业所有 TaskManager 的堆内存使用率连续 1 小时超过 80%,将 TaskManager CU 数调高为原来的一倍。
作业所有 TaskManager 的堆内存使用率连续 4 小时低于 30% 时,将 TaskManager CU 数调低为原来的一半。
注意
作业并行度最小降低到 1。TaskManager CU 数根据集群是否开启细粒度资源可以有不同的配置,开启细粒度资源则 CU 数可以为 0.25, 0.5, 1, 2 否则 CU 数只能为 1。
本页内容是否解决了您的问题?