APACHE NIFI与APACHE AIRFLOW与APACHE FALCON之间的比较?在下面的情况下哪个最适合?

10
我正在使用Java开发一个解决方案,通过REST API与属于不同供应商的一组设备进行通信。因此,对于每个供应商,我都需要在我的解决方案中执行一系列过程。然而,这些过程将根据每个供应商的不同而改变。以下是需要执行的高级过程。
- 从文件夹中检索XML文件 - 处理XML文件 - 执行一些图像处理 - 在预定时间安排和执行作业 - 将数据存储在MySQL数据库中,并对外部API执行一些REST调用
因此,对于某个供应商可能具有上述所有过程。但对于另一个供应商,可能没有某些过程(例如:图像处理)。从所选解决方案中应该能够获得以下内容。
- 我应该能够为新供应商创建自定义工作流程 - 需要识别工作流程中发生的任何故障,并执行重试机制。 - 应该能够并行执行某些功能(例如:图像处理) - 可扩展的 - 开源的
因此,我被告知要研究像Nifi/Airflow/Falcon这样的工作流管理器。我对它们进行了一些研究,但无法确定最合适的解决方案。

注意:没有使用Hadoop或任何其他集群的要求,数据流频率也不是很高

目前,我正在考虑使用Nifi。对于我的用例来说,什么是最佳解决方案?


太过宽泛了。但我会使用Nifi,因为我熟悉它。 - daggett
1
NiFi是一个很好的选择,它符合所有要求。 - Up_One
2个回答

15

Apache NiFi并不像Apache Airflow或Apache Oozie这样的工作流管理器。它是一个数据流工具,用于路由和转换数据。它不用于调度任务,而是允许您从多个位置收集数据,定义离散步骤来处理该数据,并将该数据路由到不同的目的地。

Apache Falcon也是不同的,它允许您更轻松地定义和管理HDFS数据集。它实际上是在HDFS群集中进行数据管理。

根据您的描述,NiFi将是您需求的有用补充。它可以收集您的XML文件,在某种程度上对其进行处理,将数据存储在MySQL中,并执行REST调用。它还可以轻松配置新供应商,并能够很好地容忍故障。它可以并行执行大多数功能,并可扩展为具有多个主机机器的聚合NiFi。它的设计考虑了性能和可靠性。

我不确定其执行图像处理的能力。有一些处理器(提取图像元数据,调整图像大小),但否则您需要使用Java开发新处理器 - 这相对容易。或者,如果图像处理使用Python或其他脚本语言,则可以使用其中一个ExecuteScript处理器。

不建议使用NiFi进行“调度作业”。

完整披露:我是Apache NiFi的贡献者。


请问为什么不建议使用NiFi来安排作业? - diyath.nelaka
1
我应该澄清一下 - 我不认为 NiFi 内部的数据流通常是旨在进行调度的。换句话说,NiFi 是为实时数据提供设计的。通过 API 触发/调度 NiFi 中的数据流(将 NiFi 视为批处理数据处理器)需要使用外部工具,这不是一个预期的用例。使用 NiFi 调度外部作业是完全可能的,但我怀疑仅使用 NiFi 处理器来执行、检查成功并处理错误以完全管理外部系统可能并不容易。我敢打赌有更好的工具可以做到这一点。 - returntosender404
感谢 @returntosender404 的详细解释。我也有同样类型的需求,正在使用 NIFI。 - NS Saravanan

5

我正在使用nifi处理与OP相似的用例。关于调度,我很喜欢nifi与Kafka的协作方式,我有一些脚本按照crontab频率运行,将消息添加到Kafka主题中,该主题被nifi监听,然后开始进行加载、转换、提取、索引、存储等编排操作。此外,您始终可以处理HttpRequest,因此您可以创建“Webhook接收器”,以便从外部HTTP POST触发流程。对于简单的部署(这些可在单台计算机上轻松安装),cronjob非常适合。对于图像处理,我有一个OCR图像阅读器与python连接,并使用ExecuteScript处理器和一个人脸识别模型,使用opencvExecuteCommand处理器,自动的nifi背压已解决了许多仅运行python脚本和命令本身就能解决的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接