排查流式作业中的 Straggler 问题

对于流处理流水线,Straggler 定义为具有以下特征的工作项:

  • 它会长时间阻止水印前进(大约几分钟)。
  • 与同一阶段中的其他工作项相比,其处理时间很长。

Straggler 会保留水印并增加作业的延迟时间。如果您的应用场景可接受延迟,则无需执行任何操作。如果您想缩短作业的延迟时间,请先解决任何 Straggler。

在 Google Cloud 控制台中查看流式 Straggler

启动 Dataflow 作业后,您可以使用 Google Cloud 控制台查看任何检测到的 Straggler。

您可以在阶段进度视图阶段工作流视图中查看流式 Straggler。

按阶段进度查看 Straggler

如需按阶段进度查看 Straggler,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Dataflow 作业页面。

    进入“作业”

  2. 点击作业的名称。

  3. 作业详情页面中,点击执行详情标签页。

  4. 图表视图列表中,选择阶段进度。进度图显示每个阶段中检测到的所有 Straggler 的汇总计数。

    阶段进度视图的屏幕截图。

  5. 如需查看某个阶段的详细信息,请将指针悬停在该阶段对应的条形上。详细信息窗格包含指向工作器日志的链接。点击此链接会打开 Cloud Logging,其范围限定于该工作器以及检测到 Straggler 时的时间范围。

    Straggler 详细信息卡片的屏幕截图。

按阶段工作流查看 Straggler

如需按阶段工作流查看 Straggler,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Dataflow 作业页面。

    前往作业

  2. 点击作业的名称。

  3. 在作业详情页面中,点击执行详情标签页。

  4. 图表视图列表中,选择阶段工作流。阶段工作流显示作业的执行阶段(以工作流图表示)。

    “阶段”工作流视图的屏幕截图。

排查流式 Straggler 问题

如果检测到 Straggler,则表示流水线中的操作已运行了很长时间。

如需排查此问题,请先检查 Dataflow 数据分析是否指出了任何问题。

如果您仍无法确定原因,请检查报告 Straggler 的阶段的工作器日志。如需查看相关工作器日志,请查看阶段进度中的 Straggler 详细信息。然后,点击相应工作器的链接。此链接会打开 Cloud Logging,其范围限定于该工作器以及检测到 Straggler 时的时间范围。查找可能会减慢阶段执行速度的问题,例如:

  • DoFn 代码中存在 Bug 或 DoFns 卡滞。在日志中查找堆栈轨迹,接近检测到 Straggler 时的时间戳。
  • 调用外部服务需要很长时间才能完成。为缓解此问题,请批量调用外部服务,并设置 RPC 的超时。
  • 接收器中的配额限制。如果流水线输出到 Google Cloud 服务,您可以提高配额。如需了解详情,请参阅使用配额。另外,请参阅优化策略的特定服务的文档,以及 I/O 连接器的文档。
  • DoFns 对永久性状态执行大量读取或写入操作。请考虑重构代码,以对永久性状态执行较少的读取或写入操作。

您还可以使用侧边信息面板查找阶段中执行速度最慢的步骤。其中一个步骤可能导致 Straggler。点击相应步骤名称可查看该步骤的工作器日志。

确定原因后,请使用新代码更新流水线并监控结果。

后续步骤