排查批量作业中的 Straggler 问题

Straggler 是指通过阻止工作并行执行,拖慢 Dataflow 作业速度的工作项。

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

  • 完成 Straggler 花费的时间比完成同一阶段中其他工作项花费的时间长很多。
  • Straggler 会降低阶段内的并行性。
  • Straggler 会阻止新工作启动。

在最糟糕的情况下,由于一小部分工作正在进行中,Straggler 会阻止阶段完成,因而导致作业出现整体延迟。

Dataflow 可检测在批量作业期间发生的 Straggler。如果 Dataflow 检测到 Straggler,还会尝试确定 Straggler 的原因。

在 Google Cloud 控制台中查看 Straggler

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

您可以按阶段或工作器查看 Straggler。使用视图可找到哪些阶段存在 Straggler,然后精确定位每个阶段中出现 Straggler 的工作器。

按阶段查看 Straggler

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

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

    前往作业

  2. 点击作业的名称。

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

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

  5. 如需查看阶段的详细信息,请将指针悬停在阶段对应的条形上。如需查看该阶段的工作器,请点击详细信息面板中的查看工作器

按工作器查看 Straggler

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

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

    前往作业

  2. 点击作业的名称。

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

  4. 图表视图列表中,选择工作器进度

  5. 按阶段过滤工作器列表中,选择相应阶段。进度图显示针对该阶段检测到的任何 Straggler。条形在首次检测到 Straggler 的位置存在较深的阴影。

  6. 如需查看工作器的详细信息,请将指针悬停在该工作器对应的条形上。

阶段信息面板中,Straggler 详细信息部分列出了页面上显示的所有工作器的 Straggler,其中包含以下信息:

  • 检测到 Straggler 的开始时间。
  • 出现 Straggler 的工作器。
  • 原因(如果已知)。

排查批量 Straggler 问题

Dataflow 会检测批处理流水线中 Straggler 的以下原因:

  • 热键。热键是一个键,表示元素明显多于同一 PCollection 中的其他键。如需了解详情,请参阅本文档中的排查由热键导致的 Straggler 问题

  • 慢速工作器。在慢速工作器上,工作项的运行速度比平常慢。通常,慢速工作器的处理速度低于工作器在同一阶段执行类似工作的处理速度。很多因素可能会导致工作器运行缓慢,包括 CPU 耗尽、抖动、机器架构以及工作器进程卡滞。如果运行缓慢,Dataflow 会尝试自动缓解问题。如需了解详情,请参阅本文档中的自动缓解由慢速工作器导致的 Straggler

  • 不确定的原因。如果开发者遇到不确定原因,请参阅“排查作业速度缓慢或卡住的问题”中针对批量作业运行缓慢的一般问题排查步骤。

排查由热键导致的 Straggler

各种因素可能会导致 Straggler,但一种常见的原因是存在热键。热键是一个键,表示元素明显多于同一 PCollection 中的其他键。热键可能会造成 Straggler,因为它们会限制 Dataflow 并行处理元素的能力。

如果 Dataflow 检测到由热键导致的 Straggler,则 Straggler 详细信息面板会列出 Hot Key 作为原因。

默认情况下,Dataflow 不会显示热键的键值。如需显示键值,请在运行作业时将 hotKeyLoggingEnabled 流水线选项设置为 true

要解决此问题,请检查您的数据是否均匀分布。如果某个键具有异常多的值,请考虑执行以下操作流程:

例如,如果流水线在 SQL 转换期间执行 JOIN 操作,在展开的 JOIN 操作中,当给定键被送入 GroupByKey 时,该键可能会包含不成比例的数据量。

如需了解详情,请参阅以下功能请求:beam-issue/28186

自动缓解由慢速工作器导致的 Straggler

慢速工作器在 Dataflow 上不常见,但可能会影响作业性能。为了防止性能问题,当 Dataflow 检测到慢速工作器时,它会尝试在工作器导致 Straggler 之前缓解问题。

自动缓解会模拟主机维护事件。该事件是定期发生的 Compute Engine 维护机制。根据工作器的主机维护政策,工作器会实时迁移或重启。如果发生实时迁移,则工作负载不会中断。如果工作器重启,则慢速工作器正在进行的工作会丢失,并且处理将重启。

如果检测到慢速工作器并成功缓解,则 job-message 日志中会显示以下消息:

Slow worker ... detected and automatically remediated ...

由于慢速工作器不是 Straggler,因此您无需采取进一步的措施。

如果缓解失败,则慢速工作器会导致 Straggler,该 Straggler 显示在 Dataflow 监控界面中。

如果您的项目用尽实例模拟维护事件请求配额,则自动缓解可能会失败。如需详细了解默认配额,请参阅“资源用量配额和权限管理”中的区域指标的 API 速率限制。如需申请更高的配额限制,请参阅“查看和管理配额”中的申请更高的配额限制

后续步骤