我有以下流程, ListFile ---> FetchFile --->吗? ExecuteScript(也许)--->通知
基本上,我想去通知,如果
我认为第一个条件很容易实现。如果200转到SUCCESS或ROLLBACK会话,我可以拥有一个可以读取大量流文件的groovy脚本。
但是我想知道如何检查队列中n个(数量可以少于200个)流文件超过3小时左右的时间?
更新 问题出在这里:我们目前有一个批处理(约200个文件,以后可能会根据业务增长)。我们有一条NiFi管道,即列表,提取,基于校验和的基本验证等,并且处理正常(调用SQL)。 根据业务,我们可以全天对数据进行更正,以便我们可以对所有或部分文件进行“重新处理”。那也很好,可以正常工作。
现在,根据新的要求,我们需要在此“批次”完成之后构建流程。因此,在最佳情况下,我可以使用最大bin为n的MergeContent处理器,并发出信号或通知我的新处理器。 但是,如上所述,在这一天中,我们只能获得很少或全部文件。因此,现在我的“ n”可能与重新处理的文件的新“数量”不匹配。因此,即使在这种情况下,如果经过了3个小时,那么无论“ n”是否等于重新处理的新文件数,我都应通知新进程再次运行。 因此,我要查找n个文件或经过m个小时的检查。
答案 0 :(得分:1)
我认为这可能是一个XY problem的示例-您正在尝试解决问题,并认为计算获取的文件数或经过的时间会有所帮助,但是在Apache中通常不建议使用此模式NiFi和其他解决原始问题的方法。我鼓励您更全面地描述您要解决的更高级别的问题,以查看是否有更好的解决方案。
我会回答这个问题(这些都不是理想的解决方案)。
MergeContent
处理器,最小仓数为200 ExecuteScript
处理器DistributedCacheMapServer
处理器执行时将一个值(当前时间戳)写入Notify
,并使用FetchDistributedCacheMap
处理器根据当前时间戳检查该值,并使用简单的表达语言语句以比较时间戳值我认为您可能还想阅读Wait
/ Notify
逻辑的一些示例,因为创建阈值(例如“ 200个传入流文件||经过3小时”)就是Wait
处理器呢。