Apache nifi 使用NiFi流文件作为事件通知程序

Apache nifi 使用NiFi流文件作为事件通知程序,apache-nifi,Apache Nifi,NiFi新手 我想知道是否有办法在NiFi中发送带有流文件属性的空流文件?我想用它作为一个触发器来指示某种类型的事件已经开始 在NiFi中,我是否有其他方式表示一组事件已经开始和结束?例如,如果我有三个处理器读取数据,我想知道第一个处理器即将被触发,最后一个处理器已经完成。我有什么理由这样做吗?如果处理器继续运行,我希望能够一次性将从处理器1读取的数据分组到处理器3。更清楚地说明这一点 Begin Processor1 Processor2 Processor3 End Begin Proces

NiFi新手

我想知道是否有办法在NiFi中发送带有流文件属性的空流文件?我想用它作为一个触发器来指示某种类型的事件已经开始

在NiFi中,我是否有其他方式表示一组事件已经开始和结束?例如,如果我有三个处理器读取数据,我想知道第一个处理器即将被触发,最后一个处理器已经完成。我有什么理由这样做吗?如果处理器继续运行,我希望能够一次性将从处理器1读取的数据分组到处理器3。更清楚地说明这一点

Begin
Processor1
Processor2
Processor3
End
Begin
Processor1
Processor2
Processor3
End
...
任何帮助都将不胜感激,
提前谢谢

我将把这个答案分成几个部分,因为这里有很多内容

我想知道是否有一种方法可以发送一个空的流文件 NiFi中流文件的属性?我想用这个作为触发器 指示某一类型的事件已开始

处理器允许您按照常规运行计划或使用CRON计划发送空(或填充的)流文件。您可以将其与处理器结合起来,向流文件添加任意静态或动态属性

在NiFi中,我是否有其他方式表示一组事件 你已经开始和结束了吗?例如,如果我有三个处理器 读取数据,我想知道第一个处理器是 即将触发,并且最后一个处理器已完成。是 我还有什么理由这样做吗

这接近于批处理,apachenifi并不是专门为其设计或优化的。确定源处理器“即将被触发”非常困难。如果处理器是在定时器/CRON的基础上触发的,那么您可以知道该定时,但是如果您的意思是“
GetFile
即将成功检索文件”,那么这是不容易做到的。您可以使用自己的自定义处理器扩展处理器,并覆盖
onTrigger()
方法,以便在中存储一些值,以便其他处理器可以读取。或者,我想您可以将逻辑封装在处理器中并编写自定义通知代码。我不确定这里的目标是谁——谁会得到状态变化的通知?它是另一个处理器、人工观察者还是外部服务

如果处理器继续运行,我希望能够分组 一次从处理器1读取到处理器3的数据。使 这更清楚

Begin
Processor1
Processor2
Processor3
End
Begin
Processor1
Processor2
Processor3
End
...
开始处理器1处理器2处理器3结束开始处理器1处理器2
处理器3结束…

然而,我相信,使用新的和处理器,您所要求的是可能的。川村幸二写了一篇很好的文章描述了它们的用途

我认为,在这种情况下,您需要特殊的内容或属性,以便能够检测通过系统发送的批次,除非一次是单个数据单元。我将尝试在下面描述两个场景,但我没有太多的上下文

场景1(单个数据单元) 可以随意替换不同的源处理器,但为了简单起见,我使用的是
GetFile

假设您有一个充满文本文件的目录(由一些外部进程放置在那里)。每个文件都包含格式为“Firstname Lastname”的文本,并命名为
Lastname\u YYYY-MM-DD-HH-MM-ss.txt
,其中写入的时间戳填充文件名

GetFile -> ReplaceText -> PutFile
GetFile
处理器将把每个文件作为单独的流文件引入。从那里,
ReplaceText
可以做一些简单的事情,比如使用正则表达式来切换名称的顺序,
PutFile
将内容写回文件系统。当第一次触发
GetFile
时,它会将n个流文件分派到连接/队列,以
ReplaceText
。如果希望它以线性方式而不是并行方式等待并执行操作,可以将成功队列上的背压设置为
1
flowfile,以防止前面的处理器(
GetFile
)运行,直到队列再次为空

场景2(多个流文件必须组合在一起并一起操作) 在这里,您需要使用
MergeContent
将多个流文件收集到一个流文件中。您可以将bin阈值设置为n个流文件,并且
MergeContent
处理器仅在成功的流文件达到传入流文件的最小数量时才会发送成功的流文件。您还可以按属性分类,因此,如果您正在从异构输入源读取数据,您仍然可以基于公共特征关联关联的数据片段

使用
等待
通知
此外,您可以使用
Notify
处理器将触发流文件发送到相应的
Wait
处理器,以将“内容”流文件“释放”到所需的目标。同样,Koji在上面链接的文章用一个示例流程和一些屏幕截图详细解释了这一点


我希望这至少能给你一个方向。如果没有更多的上下文,我仍然感觉到您正在尝试解决一个非NiFi问题,或者可以调整您的数据流模型以更好地支持流思维。如果你有更多的信息,我很乐意扩展答案

非常感谢您抽出时间给我一个详细的答复-我无法告诉您我有多感激!你的答案很清楚,也很容易理解。我想我正在寻找的是等待和通知-我一定会探索这个选项更多,谢谢你指出这一点!