【问题标题】:Data Factory - Data Lake File Created Event Trigger fires twice数据工厂 - 数据湖文件创建事件触发器触发两次
【发布时间】:2019-11-13 12:13:22
【问题描述】:

我正在 Azure 数据工厂 V2 中开发 Pipeline。它有非常简单的复制活动。当文件添加到 Azure Data Lake Store Gen 2 时,管道必须启动。为此,我在创建的 Blob 上创建了一个附加到 ADLS_gen2 的事件触发器。然后将触发器分配给管道并将触发器数据@triggerBody().fileName 关联到管道参数。

为了测试这一点,我正在使用 Azure 存储资源管理器并将文件上传到数据湖。问题是数据工厂中的触发器被触发了两次,导致管道启动了两次。第一个管道运行按预期完成,第二个管道仍在处理中。

有人遇到过这个问题吗?我试图删除 DF 中的触发器并创建新触发器,但结果与新触发器相同。 enter image description here

enter image description here

【问题讨论】:

    标签: azure-data-factory-2


    【解决方案1】:

    我自己也有同样的问题。

    在将文件写入 ADLS v2 时,有一个初始的 CreateFile 操作和一个 FlushWithClose 操作,它们都触发了 Microsoft.Storage.BlobCreated 事件类型。

    https://docs.microsoft.com/en-us/azure/event-grid/event-schema-blob-storage

    如果要确保仅在块 Blob 完全提交时触发 Microsoft.Storage.BlobCreated 事件,请过滤事件以进行 FlushWithClose REST API 调用。只有在数据完全提交到块 Blob 后,此 API 调用才会触发 Microsoft.Storage.BlobCreated 事件。

    https://docs.microsoft.com/en-us/azure/event-grid/how-to-filter-events

    您可以通过导航到 Azure 门户中的事件订阅并选择正确的主题类型(存储帐户)以及订阅和位置来过滤掉 CreateFile 操作。完成后,您应该能够看到触发器并更新其上的过滤器设置。我删除了 CreateFile。

    【讨论】:

    • 感谢您的回答。有趣的是,当我使用 Azure 存储资源管理器添加文件时会发生这种情况。我编写了一个 .net 核心应用程序,将文件上传到 ADLS,在这种情况下触发器只触发一次。
    • 很高兴知道,我们最终也会这样做。
    • @Darko 你知道为什么 .net 核心应用程序不会触发 FlushWithClose 事件吗?我从 Azure 数据工厂看到了同样的问题。但是如果我通过存储资源管理器上传它就像你说的那样工作。文档声明您应该在 FlushWithClose 上进行过滤。
    • 您是否使用 cli 创建过滤器?您可以发布您正在使用的 cli 参数吗?
    【解决方案2】:

    在您的触发器定义中,将“忽略空 blob”设置为是。

    @dtape 的评论可能是下面发生的事情,并且切换此忽略空设置有效地过滤掉创建部分(但不是数据写入部分)。

    这解决了我的问题。

    【讨论】:

    • 谢谢你的回答,好像没问题
    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多