Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache nifi Nifi-根据计数或经过的时间处理文件?_Apache Nifi - Fatal编程技术网

Apache nifi Nifi-根据计数或经过的时间处理文件?

Apache nifi Nifi-根据计数或经过的时间处理文件?,apache-nifi,Apache Nifi,我有一个如下的流程, ListFile-->FetchFile-->?ExecuteScript(可能)--->通知 基本上,我想去通知,如果 总的流文件(从获取文件)是说200或 经过的时间(从最后一个信号开始)大约是3小时 我认为第一个条件很容易实现。我可以有一个groovy脚本,它可以读取流文件的数量,如果200个成功,或者回滚会话 但我想知道如何检查队列中n(数量可以小于200)个流文件的时间是否超过3小时左右 更新 问题是:目前我们有一个批处理(大约200个文件,并且可以根据未来的

我有一个如下的流程, ListFile-->FetchFile-->?ExecuteScript(可能)--->通知

基本上,我想去通知,如果

  • 总的流文件(从获取文件)是说200
  • 经过的时间(从最后一个信号开始)大约是3小时
我认为第一个条件很容易实现。我可以有一个groovy脚本,它可以读取流文件的数量,如果200个成功,或者回滚会话

但我想知道如何检查队列中n(数量可以小于200)个流文件的时间是否超过3小时左右

更新 问题是:目前我们有一个批处理(大约200个文件,并且可以根据未来的业务增加)。我们有一个NiFi管道,即List、Fetch、校验和的基本验证等,并且处理(调用SQL)工作正常。 根据业务情况,我们可以在一天中对数据进行更正,以便我们能够“重新处理”所有或部分文件。这也很好,很有效

现在,根据新的需求,我们需要在“批处理”完成后构建流程。因此,在最好的情况下,我可以使用最大bin为n的MergeContent处理器,并向我的新处理器发出信号或通知。 但是,如上所述,在这一天中,我们可以重新处理很少或所有的文件。因此,现在我的“n”可能与重新处理的文件的新“数量”不匹配。因此,即使在这种情况下,如果我们已经过了3个小时,那么不管“n”不等于重新处理的新文件数,我都应该通知新进程重新运行。
因此,我正在寻找n个文件或m个小时的运行时间检查。

我认为这可能是一个例子——您试图解决一个问题,并且相信计算获取的文件数或运行时间会有所帮助,但Apache NiFi通常不鼓励这种模式,并且对于原始问题还有其他解决方案。我鼓励你更全面地描述你试图解决的更高层次的问题,看看是否有更好的解决方案

不过我会回答这个问题(这些都不是理想的解决方案)

  • 您可以使用最小仓位数为200的
    MergeContent
    处理器
  • 如您所述,您可以使用
    ExecuteScript
    处理器
  • Notify
    处理器执行时,您可以将值(当前时间戳)写入
    DistributedCacheMapServer
    ,并使用
    FetchDistributedCacheMap
    处理器对照当前时间戳检查该值,并使用简单的表达式语言语句比较时间戳值
我认为您可能还想阅读一些
Wait
/
Notify
逻辑示例,因为
Wait
处理器所做的就是创建“200个传入流文件| | 3小时经过时间”这样的阈值


嗨,安迪,谢谢你回来。我已经按问题编辑了关于当前流程和新需求的更多细节。等待并通知是有意义的,我将进一步探讨它,看看如何适应“n个文件| | m分钟”的检查。谢谢