10

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

4

2 回答 2

15

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

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

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

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

不推荐使用 NiFi 的“调度作业”。

全面披露:我是 Apache NiFi 贡献者。

于 2018-11-13T15:30:37.830 回答
5

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

于 2018-11-14T07:41:05.343 回答