我正在开发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。但是任何人都可以对此发表您的意见吗?什么是我的用例的最佳解决方案?
答案 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
处理器连接,一个面部校正与opencv
和ExecuteCommand
处理器一起使用,自动nifi的背压解决了许多我仅通过运行python脚本和命令本身就遇到了问题。