APACHE NIFI vs APACHE AIRFLOW vs APACHE FALCON?哪种情况最适合以下情况?

Sel*_*ara 6 etl apache-falcon airflow apache-nifi

我正在开发一个Java解决方案,它通过属于不同供应商的REST API与一组设备进行通信.因此,对于每个供应商,我必须在我的解决方案中执行一组流程.但是,这些过程将根据每个供应商进行更改.以下是需要执行的高级过程.

  • Retrieve an XML file from a folder
  • Process the XML file
  • Perform some image processing
  • Schedule a job and execute it on the scheduled time
  • Storing data on a MySQL DB and perform some REST calls to outside APIs

因此,对于一个供应商可能具有上述所有过程.但对于另一个,可能没有一些过程(例如:图像处理).以下事情应该能够从所选择的解决方案中获得.

  • I should be able to create custom workflows for new vendors
  • Need to identify any failures that have been occurred within the workflow and perform retry mechanisms.
  • Should be able to execute some functions parallelly (Eg: Image processing)
  • Scalable
  • Opensource

因此我被告知要研究像Nifi/Airflow/Falcon这样的工作流程管理器.我对它们进行了一些研究,但无法确定最合适的解决方案.

注意:不需要使用Hadoop或任何其他群集,并且数据流频率不高

目前,我正在考虑使用Nifi.但有人可以就此发表意见吗?什么是我的用例的最佳解决方案?

小智 6

Apache NiFi不是Apache Airflow或Apache Oozie的工作流管理器.它是一种数据流工具 - 它可以路由和转换数据.它不打算安排作业,而是让你收集来自多个位置的数据,定义不连续的步骤来处理数据和路由数据到不同的目的地.

Apache Falcon的不同之处在于它允许您更轻松地定义和管理HDFS数据集.它是HDFS集群内的有效数据管理.

根据您的描述,NiFi可以满足您的要求.它将能够收集您的XML文件,以某种方式处理它,将数据存储在MySQL中,并执行REST调用.它也可以很容易地为新供应商配置,并且可以很好地容忍故障.它可以并行执行大多数功能,并可以扩展为具有多台主机的集群NiFi.它的设计考虑了性能和可靠性.

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

不建议使用NiFi"安排工作".

完全披露:我是Apache NiFi的贡献者.


pan*_*ore 5

我正在将 nifi 与 OP 的类似用例一起使用。关于调度,我喜欢nifi与Kafka的配合方式,我有一些脚本计划以crontab频率运行,只需将消息添加到Kafka主题中,nifi监听哪个主题,然后启动编排以进行加载,转换,获取,索引、存储等,而且,您始终可以处理HttpRequest这样您可以制作某种“webhook 接收器”,以便HTTP POST再次从外部触发进程,以进行简单的部署(这些您可以在单台机器中即插即用)任务。对于图像处理,我有一个 OCR 图像阅读器,带有与ExecuteScript处理器连接的 python 和一个opencvExecuteCommand处理器连接的面部识别器,自动 nifi 的背压已经解决了我仅运行 python 脚本和命令本身所遇到的许多问题。