现代Apache NiFi负载平衡
前几天通过java架构技术交流沙龙会,我们讨论了在Apache NiFi(版本1.8.0 ^)中执行负载平衡的新方法,这些方法现在使远程进程组已过时。尤其是通过优锐课get了很多知识点,分享给大家参考学习。
在当今的Apache NiFi中,存在一种新的和改进的方法来平衡集群中节点之间的数据负载。随着NiFi 1.8.0的推出,在任何连接中的每个处理器之间都增加了连接负载平衡。现在,你有一个易于设置的选项,可以在节点之间自动进行负载平衡。
使用远程进程组在Apache NiFi节点之间分配负载的传统日子已经过去。为了获得大的灵活性,性能和便利性,请确保升级现有流以使用内置的“连接负载平衡”。
如果你运行的是Apache NiFI或Cloudera Flow Management(CFM)的较新版本,则可以采用更好的方法在处理器和服务器之间分配处理。该版本适用于Apache NiFi 1.8.0和更高版本,包括新版本1.10.0。
注意:不再需要远程进程组来实现负载平衡!请使用实际的负载平衡连接!远程进程组仅应用于分发到其他集群。
Apache NiFi中的负载平衡
Apache NiFi负载平衡
自2018年以来,这是一个了不起的功能:https://http://blogs.apache.org/nifi/entry/load-balancing-across-the-cluster。
配置连接
我们为负载平衡提供了一些选项,包括“ Round Robin”,在出现故障情况时,它允许将数据重新平衡到另一个节点。 根据流文件的大小,这可以每秒重新平衡数千个流文件或更多。 这样做是为了使节点有机会重新连接并继续处理。
循环式负载均衡
数据分配策略
另一个选项是“按属性分区”和“单节点”,这将使数据排队,直到该单个节点或分区节点返回为止。 你不能为可移植性目的选择集群中的哪个节点执行该处理。
我们需要具有动态性和弹性,因此只需要一个节点即可。 这允许将“类似数据”发送到群集中对于某些用例可能必需的同一节点。
对于表加载用例中的合并,使用自定义属性名称进行此路由对于合并很有效。 我们也可以选择完全不进行负载平衡。
Apache NiFi的弹性扩展
NiFi新增了一项重要的新功能,该功能允许停用节点并将其与群集断开连接,并卸载所有数据。 这对于Kubernetes和动态缩放对于弹性很重要。
对于一天或一年中不同的工作负载(例如每小时一次负载或每周的工作),弹性伸缩非常重要-扩展以满足SLA和截止日期,但在可能的情况下进行缩减以节省云支出! 现在,NiFi不仅解决了数据问题,而且还为你节省了资金。
Apache NiFi节点关联性
远程进程组不支持节点关联。 节点相似性在我们的按属性划分策略中受支持,并且有很多用途。
远程过程组
为了替代以前的大用例,我们使用了远程过程组。 对于个连接,我们有一个更好的解决方案,例如在一个节点上运行的ListSFTP,然后这些连接可以是“ Round Robin”。
重要用例
Apache NiFi的此负载平衡功能显示了在边缘或其他数据中心分发大型数据集或非结构化数据捕获,拆分和传输,然后对节点使用属性亲和力以特定顺序重构数据的强大功能。
因此,发生的情况是有时你会从一个系统(如关系数据库转储)中的一个大TB文件中导出大量数据。我们需要一个NiFi节点来加载此文件,然后将其拆分为多个块,进行传输,然后将其发送到节点进行处理。有时,对记录进行排序将要求你使用一个属性将一个节点上的相关块(例如同一张表)保持在一起。
我们还看到了一个大型zip文件,其中包含许多类型的文件。通常,会有数百个多种类型的文件,我们可能希望基于文件名root路由到同一节点。这样,一个NiFi节点将处理所有相同的文件类型或表。
对于任何NiFi用户而言,这都是实现起来并不容易的事情,并且很容易,它可以检查并查看ETL过程中正在发生的事情。
文章写道这里,如有不足之处欢迎补充评论。
感兴趣的知友们可以关注我或者我的专栏,每天持续更新技术干货、职场趣事、海量面试资料等等
我这里有一份从css到架构学习的思维导图,分享给大家参考学习。
相关文章