我已经创建了3个进程组。我希望第二个流程组在第一个流程组完成后执行,第三个流程组在第二个流程组完成后执行。有什么解决办法吗??
pw9qyyiw1#
apachenifi是围绕连续流假设设计的。使连续流适应作业调度可能既尴尬又困难,因为这取决于您为流程组何时“完成”提供定义。nifi本身没有进程组被完成的概念,只是停止或运行了。你可以做一些事情:将每个进程组的输出合并到一个流文件中,该流文件将传递给下一个进程组(例如,使用mergecontent)。根据同步流的时间,使用cron调度在每个组的入口调度处理器。构建一个自定义处理器(或executescript),用于轮询上一个进程组的已完成条件。所有这些都归结为同一个问题-你怎么知道前一组是“完成”?
sy5wg1nm2#
最佳实践是将“wait”和“notify”处理器配对在一起,这样在其他流发送notify事件之前,具有严格等待条件的任何流都不会被释放。在您的示例中,“进程组1”将负责发送notify消息,“进程组2和3”将分别具有相应的等待处理器,这些处理器基本上是循环的,直到第一个进程组发送其已完成的通知为止。
pgky5nke3#
每个流程组都有一个与其他流程组连接的关系。尝试将关系从第一个流程组拖到第二个流程组,并从第二个流程组拖到第三个流程组。它要求您在第一个进程组中创建输出端口以连接第二个处理器的输入端口。如果您不想在第二个进程组中使用第一个进程组的输出,那么只需在第二个进程组中使用“putfile”处理器将其写入某个目录,并为我们的第二个进程组创建一个独立的流。试试这个,我会让你知道,如果我能找到另一种方法做它。
3条答案
按热度按时间pw9qyyiw1#
apachenifi是围绕连续流假设设计的。使连续流适应作业调度可能既尴尬又困难,因为这取决于您为流程组何时“完成”提供定义。nifi本身没有进程组被完成的概念,只是停止或运行了。你可以做一些事情:
将每个进程组的输出合并到一个流文件中,该流文件将传递给下一个进程组(例如,使用mergecontent)。
根据同步流的时间,使用cron调度在每个组的入口调度处理器。
构建一个自定义处理器(或executescript),用于轮询上一个进程组的已完成条件。
所有这些都归结为同一个问题-你怎么知道前一组是“完成”?
sy5wg1nm2#
最佳实践是将“wait”和“notify”处理器配对在一起,这样在其他流发送notify事件之前,具有严格等待条件的任何流都不会被释放。
在您的示例中,“进程组1”将负责发送notify消息,“进程组2和3”将分别具有相应的等待处理器,这些处理器基本上是循环的,直到第一个进程组发送其已完成的通知为止。
pgky5nke3#
每个流程组都有一个与其他流程组连接的关系。
尝试将关系从第一个流程组拖到第二个流程组,并从第二个流程组拖到第三个流程组。
它要求您在第一个进程组中创建输出端口以连接第二个处理器的输入端口。如果您不想在第二个进程组中使用第一个进程组的输出,那么只需在第二个进程组中使用“putfile”处理器将其写入某个目录,并为我们的第二个进程组创建一个独立的流。
试试这个,我会让你知道,如果我能找到另一种方法做它。