Apache nifi 如何在nifi中重置等待通知计数器

Apache nifi 如何在nifi中重置等待通知计数器,apache-nifi,Apache Nifi,我有一个流程,每次我必须等待确切的12个文件 所以我编写了如下代码 getHDFS->notify->wait->some processing 通知具有以下配置 Release Signal Identifier = eredee_45rgfyWQQWQ Signal Counter Name = cntr_for_run Signal Counter Delta = 1 Signal Buffer Count = 1 Release Signal Identifier = eredee_4

我有一个流程,每次我必须等待确切的12个文件

所以我编写了如下代码

getHDFS->notify->wait->some processing

通知具有以下配置

Release Signal Identifier = eredee_45rgfyWQQWQ
Signal Counter Name = cntr_for_run
Signal Counter Delta = 1
Signal Buffer Count = 1
Release Signal Identifier = eredee_45rgfyWQQWQ
Target Signal Count = 12
Signal Counter Name = cntr_for_run
Wait Buffer Count = 1
Releasable FlowFile Count = 1
等待具有以下配置

Release Signal Identifier = eredee_45rgfyWQQWQ
Signal Counter Name = cntr_for_run
Signal Counter Delta = 1
Signal Buffer Count = 1
Release Signal Identifier = eredee_45rgfyWQQWQ
Target Signal Count = 12
Signal Counter Name = cntr_for_run
Wait Buffer Count = 1
Releasable FlowFile Count = 1

这是第一次,它只在总读取量为12时才释放文件。但第13份文件一到,它就过去了。我希望它在等待下一次释放文件时以这种方式工作,当总计数为24时(我指的是接下来的12个文件)。如何将运行计数器重置回零?

我还没有尝试过此操作,但您可以尝试使用PutDistributedMapCache处理器为正在等待/通知中使用的信号标识符的缓存键设置空值

或者,您可以以某种方式为每批文件生成新的发布信号标识符,并在Notify and Wait处理器中使用表达式语言来引用动态值,而不是硬编码标识符

值或属性表达式语言语句的结果, 将根据流文件对其进行评估,以确定 信号计数器增量。指定计数器应增加多少。 例如,如果在上游流量处处理多个信号事件 以面向批处理的方式,可以通知处理的事件数 立即使用此属性。零(0)有一个特殊的含义,它清除 目标计数返回到0,这在与Wait一起使用时特别有用 可释放流文件计数=零(0)模式,以提供 “打开-关闭闸门”类型的流量控制。一(1)个可以打开一个 对应的等待处理器,零(0)可以将其取反,就像关闭一样 大门

(对
通知
处理器的
信号计数器增量
属性的描述。) 所以你们可以把计数器delta设为零,触发它,你们就得到了

另外,尝试使用
UpdateAttribute
并每隔12个flowfile更新一个计数器

UpdateAttribute
:有状态变量初始值=
1
存储状态=
本地存储状态
count=
${getStateValue(“count”):等于(13):如果其他('1',${getStateValue(“count”):加上(1)}

=>
RouteOnAttribute
: 验证=
${count:equals(13)}

匹配
=>使用Notify重置(如上所述)

不匹配
=>照常继续


不过,我必须警告您,它只能在一个节点上工作(因为
UpdateAttribute
的状态存储在节点本地)

我也遇到了同样的问题。解决方法是:在属性等待过程中使用

属性复制模式=替换(如果存在)

就我而言,只有在

如果存在,则更换=总计


每次我调用notify时,它都会停止。但我希望它在第12次notify后重置。@RakeshPrasad会将它添加到我的答案中