NiFi处理器执行数百万个任务,然后解决

时间:2019-09-29 18:07:51

标签: apache-nifi

我创建了一个处理器。当PutFile失败时(由于文件已存在),我想将文件从myfile.JPG重命名为myfile_1.JPG重命名为myfile_2.JPG,依此类推,直到PutFile成功。在进行此处理之前,“ myfile”在文件名中的任何地方都不应带有下划线。

nifi

我的流程如下: PutFile-> UpdateAttribute-> PutFile(循环)

${filename:contains('_'):ifElse(   
 ${filename:substringBeforeLast('_'):append('_'):append(${filename:substringAfterLast('_'):substringBefore('.'):plus(1)}):append('.'):append(${filename:substringAfter('.')})},
 ${filename:substringBefore('.'):append('_1.'):append(${filename:substringAfter('.')})}     
)}

示例输入文件名:2017-06-15-175053.JPG

示例输出文件名:2017-06-15-175053_1.JPG

示例输入文件名:2017-06-15-175053_1.JPG

示例输出文件名:2017-06-15-175053_2.JPG

首先,我检查文件名中是否存在“ _”(预计输入的文件名将在我的“增量名称”处理器运行之前不包含它)

如果确实存在“ _”,请抓住“ _”和“。”之间的数字,并将其递增 如果“ _”不存在,请在末尾附加“ _.JPG”。

预期结果:文件名立即增加,直到PutFile成功。

实际结果:几分钟后,执行了数百万个任务,文件最终被重命名为“ myfile_6.JPG”,我不确定为什么要进行如此多次的迭代。

1 个答案:

答案 0 :(得分:3)

PutFile对失败的流文件进行惩罚。

默认情况下为Penalty duration = 30sec。这意味着,下一个处理器(UpdateAttribute)将在30秒内不处理该文件。

您可以将此时间设置为0sec,以避免在Settings处理器的Configuration中的PutFile选项卡上出现此延迟。因此,下一个处理器将不等待处理失败的文件。