使用指标和维度分析流分析作业性能

若要理解 Azure 流分析作业的运行状况,请务必了解如何使用作业的指标和维度。 可以使用 Azure 门户或 SDK 获取你感兴趣的指标和维度。

本文演示如何通过 Azure 门户使用流分析作业指标和维度来分析作业的性能。

水印延迟和积压输入事件是确定流分析作业性能的主要指标。 如果作业的水印延迟持续增加,并且输入事件积压,则意味着作业无法跟上输入事件的速率并及时生成输出。

让我们来看几个通过水印延迟指标数据作为起点来分析作业性能的示例。

某些分区没有输入导致作业水印延迟增加

如果易并行作业水印延迟稳步增加,请转到“指标”。 然后,使用以下步骤找出根本原因是否为出输入源的某些分区中缺少数据:

  1. 检查哪个分区的水印延迟正在增加。 选择“水印延迟”指标,并按“分区 ID”维度进行拆分。 在下面的示例中,分区 465 具有较高的水印延迟。

    图表的屏幕截图,其中显示了分区中无输入的情况下,按分区 ID 拆分的水印延迟。

  2. 检查此分区是否缺少任何输入数据。 选择“输入事件”指标并将其筛选为此特定分区 ID。

    图表的屏幕截图,其中显示了分区中无输入的情况下,按分区 ID 拆分的输入事件。

可以进一步采取哪些操作?

此分区的水印延迟增加是因为没有输入事件流入此分区。 如果作业的延迟到达容限窗口是几个小时,并且没有输入数据流入分区,则预计该分区的水印延迟会继续增加,直至达到延迟到达容限窗口。

例如,如果延迟到达容限为 6 小时,并且输入数据没有流入输入分区 1,则输出分区 1 的水印延迟将增加,直到达到 6 小时。 可以检查输入源是否按预期生成数据。

输入数据倾斜会导致高水印延迟

如前例所述,当易并行作业具有较高的水印延迟时,首先要做的是按“分区 ID”维度拆分“水印延迟”指标。 然后,可以确定是所有分区都有高水印延迟,还是只有其中一些分区有高延迟。

在以下示例中,分区 0 和 1 具有比其他 8 个分区更高的水印延迟(大约 20 到 30 秒)。 其他分区的水印延迟始终稳定在 8 到 10 秒。

图表的屏幕截图,其中显示了数据倾斜的情况下,按分区 ID 拆分的水印延迟。

让我们通过“分区 ID”拆分的“输入事件”指标来检查所有这些分区的输入数据情况:

图表的屏幕截图,其中显示了数据倾斜的情况下,按分区 ID 拆分的输入事件。

可以进一步采取哪些操作?

如上面的示例所示,具有高水印延迟的分区(0 和 1)接收的输入数据比其他分区要多得多。 这种情况称之为“数据倾斜”。 处理出现数据倾斜分区的流式处理节点需要消耗的 CPU 和内存资源比其他节点多,如以下屏幕截图所示。

图表的屏幕截图,其中显示了出现数据倾斜分区的资源使用率。

处理具有较高数据偏斜分区的流式处理节点会显示更高的 CPU 和/或流单元 (SU) 利用率。 此利用率会影响作业的性能并增加水印延迟。 若要缓解此问题,需要更均匀地将输入数据重新分区。

还可以使用物理作业图调试此问题,详见物理作业图:识别不均匀分布式输入事件(数据倾斜)

重载的 CPU 或内存会增加水印延迟

当易并行作业的水印延迟增加时,它可能不仅发生在一个或多个分区上,而是发生在所有分区上。 如何确认工作是否陷入这种情况?

  1. 按“分区 ID”拆分“水印延迟”指标。 例如:

    图表的屏幕截图,其中显示了 CPU 和内存重载的情况下,按分区 ID 拆分的水印延迟。

  2. 按“分区 ID”拆分“输入事件”指标,确认每个分区的输入数据是否存在数据倾斜。

  3. 检查 CPU 和 SU 利用率,查看所有流式处理节点中的利用率是否过高。

    图表的屏幕截图,其中显示了 CPU 和内存重载的情况下,按节点名称拆分的 CPU 和内存利用率。

  4. 如果所有流式处理节点中的 CPU 和 SU 利用率很高(超过80%),则可以得出结论,此作业在每个流式处理节点中处理大量数据。

    通过检查“输入事件”指标,可以进一步检查分配给一个流式处理节点的分区数。 使用“节点名称”维度按流式处理节点 ID 进行筛选,并按“分区 ID”进行拆分。

    图表的屏幕截图,其中显示了 CPU 和内存重载的情况下,一个流式处理节点上的分区计数的图表。

  5. 上面的屏幕截图显示,向一个流式处理节点分配了四个分区,该节点占用约 90% 到 100% 的流式处理节点资源。 可以使用类似的方法来检查其余流式处理节点,以确认它们是否同样正在处理来自四个分区的数据。

可以进一步采取哪些操作?

可以考虑减少每个流式处理节点的分区数,以减少每个流式处理节点的输入数据。 为此,可以加倍 SU 的数量,使每个流式处理节点处理来自两个分区的数据。 或者可以将 SU 的数量变为原来的四倍,使每个流式处理节点处理来自一个分区的数据。 有关 SU 分配和流式处理节点计数的信息,请参阅了解并调整流单元

一个流式节点处理来自一个分区的数据时,如果水印延迟仍在增加,应该怎么办? 将输入重新划分为更多分区,以减少每个分区中的数据量。 有关详细信息,请参阅使用重新分区优化 Azure 流分析作业

还可以使用物理作业图调试此问题,详见物理作业图:识别 CPU 或内存过载的原因

后续步骤