在nifi群集中分发从GetMongo读取的数据

时间:2018-11-07 05:29:46

标签: apache-nifi

我有一个集群化的nifi设置,并且我们在“主要”模式下运行了GetMongo处理器,因此不会获取重复的数据。这似乎工作正常。但是,一旦有了这些数据,我就希望链中的以下过程在集群上运行,就像对已获取的该数据执行的并行处理一样。不知何故,这没有发生。因此,下面的问题是假设GetMongo已获取30000条记录并且它们在队列中:

1)如何检查处理器是在单个节点上还是在所有节点上运行其进程。该配置已设置为所有节点,但是当处理器运行时,我看到它在右上角显示1。

2)如果已将一个处理器设置为仅在主节点上运行,那么流中的所有其他处理器是否也在主模式下运行?

示例:

enter image description here

在上面的屏幕截图中,我的getmongo在主节点上运行,如何确保执行脚本处理器在所有3个nifi节点上并行运行。到目前为止,如果我在executescript进程中查看视图状态历史记录,则只能看到数据流经主节点。

1 个答案:

答案 0 :(得分:1)

是的,这是正确的。当您将源处理器标记为仅运行Primary Node时,所有后续步骤将仅在该节点上单独发生,因为数据仅位于该节点(主节点)上,即使您将NiFi置于群集模式下也是如此。要使其按照您想要的方式工作,您可以采用以下两种方法之一:

方法1:RPG与站点到站点的组合

在这里,您的流程将如下所示:

  • 在Root组(NiFi画布的最顶层)上创建一个输入端口
  • 使GetMongo仅在主节点上运行。
  • 将处理器的success关系连接到远程处理器组(RPG)。可以使用群集详细信息本身来配置此RPG,并将其配置为连接到您在步骤#1中添加的端口。
  • 从输入端口将其连接到您的处理逻辑。

enter image description here

enter image description here

有用链接:

这很麻烦,会使您的流程非常复杂,但这是直到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

enter image description here

enter image description here

有用链接: