【发布时间】:2016-05-24 11:05:40
【问题描述】:
我想知道如何找出/捕获 Apache Nifi 中任何流的总执行时间。有没有办法做到这一点并将其添加到属性列表中,以便可以通过 PutEmail 共享相同的内容?
【问题讨论】:
标签: time execution apache-nifi
我想知道如何找出/捕获 Apache Nifi 中任何流的总执行时间。有没有办法做到这一点并将其添加到属性列表中,以便可以通过 PutEmail 共享相同的内容?
【问题讨论】:
标签: time execution apache-nifi
我相信您必须在收到流文件时添加自定义时间戳属性,完成大部分处理,然后计算经过时间属性以包含在电子邮件中。您可以使用两个 UpdateAttribute 处理器来执行此操作。
UpdateAttribute,已收到 = ${now():toNumber()}
(进行处理)
UpdateAttribute, elapsed = ${now():toNumber():minus(${received}):format("HH:mm:ss")}
这会将经过的时间格式化为“00:04:16”(4 分 16 秒)。您可以在您的 PutEmail 消息内容中将其用作 ${elapsed}。
但这有点难看,只给出了处理时间的近似值。 NiFi 出处系统维护“Lineage Duration”,它描述了自文件进入 NiFi 以来经过的时间。这是一个更权威的数字。但我不相信你可以从表达语言中查询谱系持续时间。您必须单独查询和分析出处数据。
【讨论】:
詹姆斯在上面提供了一个很好的解释。不过,还有一点需要注意的是,您可以简单地引用lineageStartDate 属性,而不是为接收数据的时间戳添加属性:
${now():toNumber():minus(${lineageStartDate}):format("HH:mm:ss")}
这与用于确定来源中的血统持续时间的值相同。
【讨论】:
${now():toNumber():minus(${lineageStartDate}):format("HH:mm:ss")}?太棒了,我不知道这是可以访问的,+1!
${now():toNumber():minus(${lineageStartDate}):format("HH:mm:ss")}。很好地抓住了我的错字:)