分享

Flink SQL开发指南作业调优:典型的反压场景及优化思路

问题导读:
1、如何理解反压检测机制?
2、反压场景及优化思路有哪些?
3、如何理解存在多个Vertex,倒数第2个Vertex经检测存在反压?
4、如何使用GROUP BY和维表JOIN操作?



上一篇:Flink SQL作业调优:手动配置调优
https://www.aboutyun.com/forum.php?mod=viewthread&tid=31109


反压是流式Shuffle中的一个重要概念,当下游处理能力不足时,会通知上游停止发送数据,从而避免数据丢失。本文为您介绍典型的反压场景及优化思路。

反压检测机制

实时计算3.0以上版本提供了作业反压检测机制,通过检测Vertex(可以理解为多个关联Chain在一起的Operator组)输出网络Buffer的拥塞情况,判断对应的Vertex是否存在反压。具体步骤如下:

1 登录作业运维页面。
  •         登录实时计算控制台。
  •         单击页面顶部的运维。
  •         在作业列表区域,单击作业名称下的目标作业名。

2 在运行信息 > Vertex拓扑,单击对应的节点边框。

2021-07-07_182554.jpg

3 在右侧信息区域的BackPressure > Status,查看反压状态。
  •         红色high:表示该节点存在反压。
  •         绿色ok:表示该节点不存在反压。

反压场景及优化思路 {#section_afq_m41_x94 .section}

说明: 示意图中Vertex的颜色为绿色表示通过以上的检测显示不存在反压,红色表示存在反压。

仅存在1个Vertex,经检测无反压
2021-07-07_182728.jpg



由于Flink的特性,在最后一个Vertex的输出上没有设置网络Buffer(直接写出到下游存储),当作业仅存在一个(或最后一个)Vertex时,反压检测机制失效。因此以上Vertex拓扑示意图并不表示作业不存在反压,若需进一步判断反压点,需将Vertex0中的Operator拆分后再进行判断。拆分方法参见[资源调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_dj3_clm_bgb)。

存在多个Vertex,倒数第2个Vertex经检测存在反压

2021-07-07_182812.jpg

该场景表示:Vertex1被反压,性能瓶颈点在Vertex2。此时,可以通过查看Vertex2中的Operator组的名称进行判断:

  •     若只涉及写出下游存储的操作,则可能是写出速度较慢所导致。建议增加Vertex2的并发数,或者配置对应结果表(Sink)的batchsize参数,具体操作步骤请参见[上下游参数调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_q6p_kx0_qrm)。
  •     若涉及到除写出下游存储外的其他操作,需要将其他操作对应的Operator拆分后再进一步判断。拆分方法参见[资源调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_dj3_clm_bgb)。

存在多个Vertex,非倒数第2个Vertex经检测存在反压


2021-07-07_182841.jpg

该场景表示:Vertex0被反压,性能瓶颈点在Vertex1。此时,可以通过查看Vertex1中的Operator组的名称来判断具体的操作。常见的操作和对应的优化方法如下:

  •     GROUP BY操作:可以考虑增加并发或设置miniBatch参数优化状态(State)的操作,具体方法参见[作业参数调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_sxj_yjm_bgb)。
  •     维表JOIN操作:可以考虑增加并发数或者设置维表的Cache策略,具体请参见对应维表文档。
  •     UDX操作:可以考虑增加并发数或者优化对应的UDX代码。

存在多个Vertex,所有Vertex经检测不存在反压

2021-07-07_182909.jpg

该场景表示:可能的性能瓶颈点在Vertex0,可以通过查看Vertex0中的Operator组的名称判断具体的操作。

  •     若其中只存在读取上游源表(Source)的操作,则可能实时计算本身没有性能瓶颈,只是读取Source的速度较慢而导致延时较大。此时可通过增加Source节点的并发数或者设置读取Source的batchsize的方法进行优化,具体步骤参见[上下游参数调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_q6p_kx0_qrm)。

    说明: Source节点增加后的并发数不能大于上游存储的Shard数。

  •     若其中除读取上游Source的操作外,还存在其他操作,建议将其他操作的Operator拆分后再进一步判断,拆分方法参见[资源调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_dj3_clm_bgb)。

存在多个Vertex,其中1个Vertex经检测存在反压,但其后续的多个并行Vertex经检测不存在反压

2021-07-07_182936.jpg

该场景表示:Vertex0被反压,但是无法直接判断性能瓶颈点是Vertex1还是Vertex2。您可以通过Vertex1和Vertex2的IN_Q指标做初步判断,如果对应的IN_Q长时间为100%,则此节点极可能存在性能瓶颈点。若需要进一步确认,则需将此节点拆分后进行进一步判断。拆分方法参见[资源调优](cn.zh-CN/Flink SQL开发指南/作业调优/手动配置调优.md#section_dj3_clm_bgb)。

作者:AlibabaCloudDocs
来源:https://github.com/AlibabaCloudDocs/sc/blob/master/cn.zh-CN/Flink

最新经典文章,欢迎关注公众号



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条