ForEach activity 如何在数据工厂中宣告成功?

How is ForEach activity declaring success in Data Factory?

在以下场景中,我们在 Azure Data Factory 管道中有一个 ForEach activity 运行,用于将数据从源复制到目标。 最后一个 CopyActivity 花费了 4:10:33 但 ForEach activity 在 36 分钟后宣布成功:4:46:12。 问题是,为什么 ForEach activity 需要额外的 36 分钟? 在宣布成功或失败之前,ForEach 是否还需要合并子活动的结果?

微软官方回答: ForEach activity 会等待所有内部 activity 运行 完成。从理论上讲,在其中的最后一个 activity 运行 成功之后,标记 foreach 运行 成功应该不会有太多延迟。但是,ADF 依赖合作伙伴服务来执行 运行,并且合作伙伴服务 运行 可能会出现故障,无法及时完成 foreach。他们有内置的逻辑来保持重试和恢复,但 ADF activity 运行s 中的行为是延迟。也有可能编排服务失败,合作伙伴服务不断重试呼叫我们。但通常合作伙伴服务延迟是这里的主要原因。

我们的假设: Duration time 是管道 activity 的端到端。这考虑了所有因素,例如将数据流脚本从 ADF 编组到 Spark 集群、集群获取时间、作业执行和 I/O 写入时间。由于 ADF 是无服务器计算,我认为 ForEach 需要时间等待所有活动获取和释放计算资源,但这是我的猜测,因为官方解释很少。

所以会有一个延迟时间,这个时间根据内部活动不同而不同。

Microsoft 的官方回答:ForEach activity 会等待所有内部 activity 运行 完成。从理论上讲,在其中的最后一个 activity 运行 成功之后标记 foreach 运行 成功应该不会有太多延迟。但是,ADF 依赖合作伙伴服务来执行 运行s,并且合作伙伴服务 运行 可能会出现故障,无法及时完成 foreach。他们有内置的逻辑来保持重试和恢复,但 ADF activity 运行s 中的行为是延迟。也有可能编排服务失败,合作伙伴服务不断重试呼叫我们。但通常合作伙伴服务延迟是这里的主要原因。