Flowfiles 如何分布在集群节点上?

How do the Flowfiles get distributed across the cluster nodes?

例如,如果我有一个指定为隔离的 GetFile 处理器,那么来自该处理器的流文件如何分布在集群节点中?

是否需要添加任何额外的工作/处理器?

在今天的 Apache NiFi 中,跨集群的负载均衡问题有两个主要答案。首先,您必须首先考虑数据如何到达集群。其次,一旦它在集群中,你是否需要重新平衡。

为了将数据导入集群,select 本身具有可扩展性的协议很重要。提供排队语义的协议对此有好处,而不提供排队语义的协议是有问题的。作为队列语义的一个例子,可以考虑 JMS 队列或 Kafka 或一些 HTTP API。这些很棒,因为一个或多个客户端可以以队列方式从它们中拉出,从而分散负载。不提供此类行为的协议的一个示例是 GetFile 或 GetSFTP 等。这些都是有问题的,因为客户端必须共享关于他们看到要提取哪些数据的状态。为了解决这些协议,我们已经转移到 'ListSFTP' 和 'FetchSFTP' 的模型,其中 ListSFTP 出现在集群中的一个节点(主节点)上,然后它使用 NiFi 的 Site-to-Site 特性来负载平衡到集群的其余部分,然后每个节点获得其工作份额并执行 FetchSFTP 以实际提取数据。现在也为 HDFS 提供了相同的模式。

在描述该模式时,我还提到了 Site-to-Site。这就是两个 nifi 集群可以共享数据的方式,这非常适合 Inter-site 和 Instra-Site 分发需求。它也适用于在同一集群内分散负载。为此,您只需将数据发送到同一个集群,然后 NiFi 负责负载平衡和 fail-over 以及检测新节点和删除节点。

所以已经有很好的选择了。这就是说我们可以做得更多,将来我们计划为您提供一种方法,让您在连接上指示它应该 auto-load-balanced,然后它将在幕后执行我所描述的操作。

谢谢 乔

这是一个更新的答案,在新版本的 NiFi 上工作起来更简单。我在这里 运行ning Apache NiFi 1.8.0。

我在这里找到的方法是在主节点上使用处理器,它将发出流文件以通过负载平衡连接使用。

例如,使用 List* 处理器之一,在 "Scheduling" 中将主节点上的 "Execution" 设置为 运行。

这应该送入下一个处理器。 Select 连接并设置其 "Load Balance Strategy"。

您可以在 design document 中阅读有关此功能的更多信息。