我正在用Java开发一个解决方案,该解决方案通过属于不同供应商的RESTAPI与一组设备通信。因此,对于每个供应商,我都必须在解决方案中执行一组流程。但是,这些流程将根据每个供应商的不同进行更改。以下是需要执行的高级流程。
- 从文件夹中检索XML文件
- 处理XML文件
- 执行一些图像处理
- 安排作业并在计划时间执行
- 将数据存储在MySQL数据库中,并对外部API执行一些REST调用
因此,对于一个供应商来说,可能拥有上述所有流程。但另一方面,可能没有一些过程(例如:图像处理(。从所选的解决方案中应该能够获得以下内容。
- 我应该能够为新供应商创建自定义工作流
- 需要识别工作流中发生的任何故障并执行重试机制
- 应该能够并行执行一些功能(例如:图像处理(
- 可扩展
- 开源
所以我被告知要研究像Nifi/Airflow/Falcon这样的工作流管理器。我对它们做了一些研究,但无法最终确定最合适的解决方案。
注意:不需要使用Hadoop或任何其他集群,数据流频率也没有那么高
目前,我正在考虑使用Nifi。对于我的用例,什么是最好的解决方案?
Apache NiFi不像Apache Airflow或Apache Oozie那样是一个工作流管理器。它是一个数据流工具,用于路由和转换数据。它不打算安排作业,而是允许您从多个位置收集数据,定义离散的步骤来处理数据,并将数据路由到不同的目的地。
Apache Falcon的另一个不同之处在于,它允许您更轻松地定义和管理HDFS数据集。它是HDFS集群中的有效数据管理。
根据您的描述,NiFi将是您需求的有用补充。它将能够收集您的XML文件,以某种方式对其进行处理,将数据存储在MySQL中,并执行REST调用。它还可以很容易地为新的供应商配置,并且可以很好地容忍故障。它并行执行大多数功能,并且可以扩展为具有多个主机的集群NiFi。它的设计考虑到了性能和可靠性。
我不确定的是执行图像处理的能力。有一些处理器(提取图像元数据、调整图像大小(,但除此之外,您需要用Java开发一个新的处理器,这相对容易。或者,如果图像处理使用Python或其他脚本语言,则可以使用其中一个ExecuteScript处理器。
不建议使用NiFi"安排作业"。
全面披露:我是Apache NiFi的贡献者。
我将nifi与OP的类似用例一起使用。关于调度,我喜欢nifi与Kafka的合作方式,我有一些脚本计划以crontab频率运行,只需将消息添加到Kafka主题中,nifi会监听哪个主题,然后启动加载、转换、获取、索引、存储等的编排,你总是可以处理HttpRequest
,这样你就可以制作一种"webhook接收器",以便从外部HTTP POST
触发一个进程,同样,对于简单的部署(这些部署是你在一台机器上即插即用的(,cronjob会锁定任务。在图像处理方面,我有一个带python的OCR图像读取器,连接了一个ExecuteScript
处理器,还有一个带opencv
和ExecuteCommand
处理器的人脸识别器,自动nifi的背压解决了我只运行python脚本和命令就运行的许多问题。