阿帕奇·尼菲vs阿帕奇·艾弗洛vs阿帕奇·猎鹰?在以下情况下哪个最合适?

时间:2018-11-12 06:31:51

标签: etl apache-nifi airflow apache-falcon

我正在开发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。但是任何人都可以对此发表您的意见吗?什么是我的用例的最佳解决方案?

2 个答案:

答案 0 :(得分:5)

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

Apache Falcon再次与众不同,它使您可以更轻松地定义和管理HDFS数据集。它是HDFS群集中的有效数据管理。

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

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

不建议使用NiFi进行“计划作业”。

完全公开:我是Apache NiFi的贡献者。

答案 1 :(得分:1)

我正在将nifi与OP的类似用例结合使用。关于调度,我喜欢nifi与Kafka的工作方式,我安排了一些脚本以crontab频率运行,只是将消息添加到Kafka主题中,nifi会监听该主题,然后开始进行编排以进行加载,转换,获取,索引,存储等),您始终可以处理HttpRequest,因此可以制作某种“ webhook接收器”,以便再次从外部HTTP POST触发进程以进行简单部署(这些即插即用,在单机上播放)cronjob可以完成任务。对于图像处理,我有一个OCR图像读取器,该读取器的python与ExecuteScript处理器连接,一个面部校正与opencvExecuteCommand处理器一起使用,自动nifi的背压解决了许多我仅通过运行python脚本和命令本身就遇到了问题。