我有一个集群化的nifi设置,并且我们在“主要”模式下运行了GetMongo处理器,因此不会获取重复的数据。这似乎工作正常。但是,一旦有了这些数据,我就希望链中的以下过程在集群上运行,就像对已获取的该数据执行的并行处理一样。不知何故,这没有发生。因此,下面的问题是假设GetMongo已获取30000条记录并且它们在队列中:
1)如何检查处理器是在单个节点上还是在所有节点上运行其进程。该配置已设置为所有节点,但是当处理器运行时,我看到它在右上角显示1。
2)如果已将一个处理器设置为仅在主节点上运行,那么流中的所有其他处理器是否也在主模式下运行?
示例:
在上面的屏幕截图中,我的getmongo在主节点上运行,如何确保执行脚本处理器在所有3个nifi节点上并行运行。到目前为止,如果我在executescript进程中查看视图状态历史记录,则只能看到数据流经主节点。
答案 0 :(得分:1)
是的,这是正确的。当您将源处理器标记为仅运行Primary Node
时,所有后续步骤将仅在该节点上单独发生,因为数据仅位于该节点(主节点)上,即使您将NiFi置于群集模式下也是如此。要使其按照您想要的方式工作,您可以采用以下两种方法之一:
方法1:RPG与站点到站点的组合
在这里,您的流程将如下所示:
GetMongo
仅在主节点上运行。success
关系连接到远程处理器组(RPG)。可以使用群集详细信息本身来配置此RPG,并将其配置为连接到您在步骤#1中添加的端口。有用链接:
这很麻烦,会使您的流程非常复杂,但这是直到NiFi 1.8为止必须要做的事情。使用NiFi 1.8,您可以使用以下方法。
方法2:负载平衡连接(Apache NiFi 1.8 +)
Apache NiFi于一周前发布了一个新版本-1.8。在此版本中,引入了一项新功能(很长一段时间,非常需要的功能)。称为负载平衡连接。
通过这种方法,您可以简单地忽略RPG /站点到站点的组合,而是执行以下操作:
GetMongo
)的输出与后续处理器连接。success
关系。configure
Settings
标签Load Balance Strategy
设置为所需的值,最好是Roudd robin
。有用链接: