APACHE NIFI против APACHE AIRFLOW против APACHE FALCON? Что лучше всего подходит в приведенном ниже сценарии?
Я разрабатываю решение на Java, которое взаимодействует с набором устройств через API REST, принадлежащее различным поставщикам. Таким образом, для каждого поставщика есть набор процессов, которые я должен выполнить внутри своего решения. Тем не менее, эти процессы будут изменены в зависимости от каждого поставщика. Ниже приведены процессы высокого уровня, которые необходимо выполнить.
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 ответа
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 прибивает задачу. Для обработки изображений у меня есть устройство для чтения изображений OCR с python, подключенным к ExecuteScript
процессор и один лицевой счет с opencv
с ExecuteCommand
процессор, обратное давление автоматического nifi решило многие проблемы, которые я запускал, запустив только скрипт python и команду.