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

Apache nifi 在nifi集群中分发从GetMongo读取的数据,apache-nifi,Apache Nifi,我有一个集群nifi设置,我们运行的GetMongo处理器的主模式为on,这样就不会获取重复的数据。这似乎很有效。然而,一旦我有了这些数据,我希望链中的以下进程在集群上运行,就像在并行处理中对已经获取的数据进行处理一样。不知何故,这并没有发生。所以我的问题是,假设GetMongo获取了30000条记录,并且它们在队列中: 1) 如何检查处理器是在单个节点上还是在所有节点上运行其进程。配置已设置为所有节点,但当处理器运行时,我看到它在右上角显示1 2) 如果一个处理器被设置为仅在主节点上运行,那么

我有一个集群nifi设置,我们运行的GetMongo处理器的主模式为on,这样就不会获取重复的数据。这似乎很有效。然而,一旦我有了这些数据,我希望链中的以下进程在集群上运行,就像在并行处理中对已经获取的数据进行处理一样。不知何故,这并没有发生。所以我的问题是,假设GetMongo获取了30000条记录,并且它们在队列中:

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

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

例如:


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

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

方法#1:RPG和站点到站点的组合

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

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

有用的链接:

这很麻烦,会使您的流程非常复杂,但在NiFi 1.8之前,必须这样做。对于NiFi 1.8,您可以使用以下方法

方法#2:负载平衡连接(Apache NiFi 1.8+)

ApacheNIFI在一周前发布了一个新版本-1.8。在这个版本中,引入了一个新的特性(很长一段时间,非常需要)。它被称为负载平衡连接

在这种方法中,您可以简单地忽略RPG/站点到站点的组合,而是执行以下操作:

  • 将源处理器的输出(在本例中为
    GetMongo
    )与后续处理器连接
  • 右键单击源处理器的
    success
    关系
  • 单击
    configure
  • 转到
    设置
    选项卡
  • 负载平衡策略
    设置为所需的策略,在您的情况下最好是
    Roudd-robin

有用的链接: