反压是流式Shuffle中的一个重要概念,当下游处理能力不足时,会通知上游停止发送数据,从而避免数据丢失。本文为您介绍典型的反压场景及优化思路。
反压检测机制
实时计算3.0以上版本提供了作业反压检测机制,通过检测Vertex(可以理解为多个关联Chain在一起的Operator组)输出网络Buffer的拥塞情况,判断对应的Vertex是否存在反压。具体步骤如下:
- 登录作业运维页面。
- 登录实时计算控制台。
- 单击页面顶部的运维。
- 在作业列表区域,单击作业名称下的目标作业名。
- 在
- 在右侧信息区域的
- 红色high:表示该节点存在反压。
- 绿色ok:表示该节点不存在反压。
,查看反压状态。
反压场景及优化思路
说明 示意图中Vertex的颜色为绿色表示通过以上的检测显示不存在反压,红色表示存在反压。
- 仅存在1个Vertex,经检测无反压
由于Flink的特性,在最后一个Vertex的输出上没有设置网络Buffer(直接写出到下游存储),当作业仅存在一个(或最后一个)Vertex时,反压检测机制失效。因此以上Vertex拓扑示意图并不表示作业不存在反压,若需进一步判断反压点,需将Vertex0中的Operator拆分后再进行判断。拆分方法参见资源调优。
- 存在多个Vertex,倒数第2个Vertex经检测存在反压
- 存在多个Vertex,非倒数第2个Vertex经检测存在反压
该场景表示:Vertex0被反压,性能瓶颈点在Vertex1。此时,可以通过查看Vertex1中的Operator组的名称来判断具体的操作。常见的操作和对应的优化方法如下:- GROUP BY操作:可以考虑增加并发或设置
miniBatch
参数优化状态(State)的操作,具体方法参见作业参数调优。 - 维表JOIN操作:可以考虑增加并发数或者设置维表的Cache策略,具体请参见对应维表文档。
- UDX操作:可以考虑增加并发数或者优化对应的UDX代码。
- GROUP BY操作:可以考虑增加并发或设置
- 存在多个Vertex,所有Vertex经检测不存在反压
- 存在多个Vertex,其中1个Vertex经检测存在反压,但其后续的多个并行Vertex经检测不存在反压
该场景表示:Vertex0被反压,但是无法直接判断性能瓶颈点是Vertex1还是Vertex2。您可以通过Vertex1和Vertex2的IN_Q指标做初步判断,如果对应的IN_Q长时间为100%,则此节点极可能存在性能瓶颈点。若需要进一步确认,则需将此节点拆分后进行进一步判断。拆分方法参见资源调优。
在文档使用中是否遇到以下问题
更多建议
匿名提交