对于流处理流水线,Straggler 定义为具有以下特征的工作项:
- 它会长时间阻止水印前进(大约几分钟)。
- 它相对于同一阶段中的其他工作项需要很长时间进行处理。
Straggler 会保留水印并增加作业的延迟时间。如果您的应用场景可接受延迟,则无需执行任何操作。如果您想缩短作业的延迟时间,请先解决任何 Straggler。
在 Google Cloud 控制台中查看流式 Straggler
启动 Dataflow 作业后,您可以使用 Google Cloud 控制台查看任何检测到的 Straggler。
您可以在阶段进度视图或阶段工作流视图中查看流式 Straggler。
按阶段进度查看 Straggler
如需按阶段进度查看 Straggler,请执行以下操作:
在 Google Cloud 控制台中,前往 Dataflow 作业页面。
点击作业的名称。
在作业详情页面中,点击执行详情标签页。
在图表视图列表中,选择阶段进度。进度图显示每个阶段中检测到的所有 Straggler 的汇总计数。
如需查看某个阶段的详细信息,请将指针悬停在该阶段对应的条形上。详细信息窗格包含指向工作器日志的链接。点击此链接会打开 Cloud Logging,其范围限定于该工作器以及检测到 Straggler 时的时间范围。
按阶段工作流查看 Straggler
如需按阶段工作流查看 Straggler,请执行以下操作:
在 Google Cloud 控制台中,前往 Dataflow 作业页面。
前往作业
点击作业的名称。
在作业详情页面中,点击执行详情标签页。
在图表视图列表中,选择阶段工作流。阶段工作流显示作业的执行阶段(以工作流图表示)。
排查流式 Straggler 问题
如果检测到 Straggler,则表示流水线中的操作已运行了很长时间。
如需排查问题,请先检查 Dataflow 数据分析是否找出任何问题。
如果您仍无法确定原因,请检查报告 Straggler 的阶段的工作器日志。如需查看相关工作器日志,请查看阶段进度中的 Straggler 详细信息。然后点击相应工作器的链接。此链接会打开 Cloud Logging,其范围限定于该工作器以及检测到 Straggler 时的时间范围。查找可能会减慢阶段执行速度的问题,例如:
DoFn
代码中存在 Bug 或DoFns
卡滞。在日志中查找堆栈轨迹,接近检测到 Straggler 时的时间戳。- 调用外部服务需要很长时间才能完成。为缓解此问题,请批量调用外部服务,并设置 RPC 的超时。
- 接收器中的配额限制。如果流水线输出到 Google Cloud 服务,您可以提高配额。如需了解详情,请参阅使用配额。另外,请参阅优化策略的特定服务的文档,以及 I/O 连接器的文档。
DoFns
对永久性状态执行大量读取或写入操作。请考虑重构代码,以对永久性状态执行较少的读取或写入操作。
您还可以使用侧边信息面板查找阶段中执行速度最慢的步骤。其中一个步骤可能导致 Straggler。点击步骤名称即可查看该步骤的工作器日志。
确定原因后,请使用新代码更新流水线并监控结果。
后续步骤
- 了解如何使用 Dataflow 监控界面。
- 了解监控界面中的执行详情标签页。