例如,如果我有一个指定为隔离的 GetFile 处理器,那么来自该处理器的流文件如何分布在集群节点上?
是否需要添加任何额外的工作/处理器?
在今天的 Apache NiFi 中,跨集群的负载平衡问题有两个主要答案。首先,您必须首先考虑数据如何到达集群。其次,一旦它在集群中,您是否需要重新平衡。
要将数据导入集群,选择本身可扩展的协议很重要。提供排队语义的协议对此有好处,而不提供排队语义的协议是有问题的。作为具有排队语义的示例,可以考虑 JMS 队列或 Kafka 或一些 HTTP API。这些都很棒,因为一个或多个客户端可以以队列方式从它们中拉出,从而分散负载。一个不提供这种行为的协议的例子是 GetFile 或 GetSFTP 等等。这些都是有问题的,因为客户端必须共享关于他们看到要提取哪些数据的状态。为了解决这些协议,我们已经转移到“ListSFTP”和“FetchSFTP”模型 其中 ListSFTP 发生在集群中的一个节点(主节点)上,然后它使用 NiFi 的站点到站点特性对集群的其余部分进行负载平衡,然后每个节点获得其工作份额并执行 FetchSFTP 以实际提取数据. 现在也为 HDFS 提供了相同的模式。
在描述该模式时,我还提到了站点到站点。这就是两个 nifi 集群可以共享数据的方式,这非常适合站点间和站点内的分发需求。它也适用于在同一集群内分散负载。为此,您只需将数据发送到同一个集群,然后 NiFi 会负责负载平衡和故障转移以及新节点和已删除节点的检测。
因此,已经有很多不错的选择。也就是说,我们可以做更多事情,并且在未来我们计划为您提供一种连接方式,表明它应该是自动负载平衡的,然后它将在幕后执行我所描述的操作。
谢谢乔
这是一个更新的答案,它与新版本的 NiFi 一起使用更简单。我在这里运行 Apache NiFi 1.8.0。
我在这里找到的方法是在主节点上使用处理器,该处理器将发出流文件以通过负载平衡连接使用。
例如,使用其中一个List*
处理器,在“调度”中将其“执行”设置为在主节点上运行。
这应该输入下一个处理器。选择连接并设置其“负载平衡策略”。
您可以在其设计文档中阅读有关该功能的更多信息。