【问题标题】:How to limit Nifi processor to run on a single node in cluster?如何限制 Nifi 处理器在集群中的单个节点上运行?
【发布时间】:2018-06-19 18:03:11
【问题描述】:

我们正在使用 NiFi 构建数据工作流,并希望最终(自定义)处理器(运行重复数据删除逻辑)仅运行一个 NiFi 集群节点(而不是在所有节点上运行)。我看到 NiFi 1.7.0(尚未发布)有一个 PrimaryNodeOnly 注释来强制执行单节点执行行为。有没有办法或解决方法在 NiFi 1.6.0 中强制执行此类行为?

注意:除了 @PrimaryNodeOnly,如果 NiFi 提供一种仅在单个节点上运行处理器的方法会更好(即,像 @SingleNodeOnly 这样的一些注释)。这样执行节点不一定是主节点,因此将减少主节点上的负载。这只是对未来的要求,并不是解决上述问题所必需的。

【问题讨论】:

  • 您是想同时只运行一个处理器实例而不需要将其分配给特定节点,还是希望它每次都在同一个节点上运行?跨度>
  • 我们希望同时在处理器的一个实例上运行,而无需将其分配给特定节点。不,我们不想总是在同一个节点上运行它。
  • 在这种情况下,将处理器设置为在Primary Node 上运行就足够了。顺便说一句,PrimaryNodeOnly 注释适用于编写处理器以将处理器的执行策略限制为Primary 的开发人员。数据流设计人员/开发人员无法通过 UI 或 API 将策略更改为 All Nodes
  • @janeshs 在这种情况下,在处理器配置的调度选项卡中,如果您保持默认调度策略(计时器驱动)并将“并发任务”设置为 1,您将拥有只有一个处理器实例以盎司运行。
  • @RadhwaneChebaane - Matt Clarke 在https://community.hortonworks.com/questions/52112/nifi-load-distribution-in-getfile-processor.html中提到的“每个节点的并发任务配置”

标签: apache-nifi


【解决方案1】:

在 NiFi 1.6.0 中它是可能的,看起来像这样:

【讨论】:

    【解决方案2】:

    在以前的版本中没有特定的解决方法来强制执行它,数据流设计器需要将预期的处理器标记为仅在主节点上运行。您可以编写一个脚本来查询 NiFi API 以获取某些类型或名称的处理器,然后检查/将策略设置为仅主节点。

    【讨论】:

    • 感谢mattyb的回答。通过数据流设计器将预期处理器标记为仅在 NiFI 1.6.0 的主节点上运行的常用方法是什么?这是通过定义具有输入/输出端口的远程进程组并从父级或根级组连接到它们来完成的吗?关于您在回答中提到的脚本 - 该脚本是用于 1.6.0 还是 1.7.0 版本的 NiFi?
    • 脚本会调用 NiFi REST API 来配置处理器。查看 API 文档,了解如何为处理器设置执行策略。 1.6.0 和 1.7.0 IIRC 应该是一样的。
    • 要在 UI 中手动执行此操作,请右键单击处理器并在“调度”选项卡上,为左上角的执行策略选项选择“仅主节点”。请注意,只有源处理器(没有输入连接的)应该标记为 Primary Node Only
    • 感谢mattyb 的澄清。我们希望在工作流中运行最后一个处理器(重复数据删除)以在单个节点上运行。鉴于这不是源处理器,是否有另一种方法可以将节点数限制为一个?
    • 为什么重复数据删除必须在单个节点上运行?例如,如果您使用 DetectDuplicate 并且所有节点都使用相同的 DistributedMapCacheServer,那么它应该具有相同的效果。对于您的自定义处理器,您可能希望使用类似的东西,或者如果您知道很少有重复,您可以在处理器中使用 CLUSTER-scoped State Management 来存储值。我推荐前者而不是后者的解决方案,因为在处理器状态中存储许多(或大)值会降低 Zookeeper 和整个 NiFi 集群的性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多