Как стать автором
Обновить

Комментарии 4

В NiFi есть практика разделять контент и конфигурацию? Т.е. выносить реквизиты тех же соединений с БД, смтп-сервера и тп в отдельный файл?

ЗЫ Видел ответ в 1 части, для уточнения: не рассматривали другие визуальные ETL-инструменты, так же сделанные на джаве, Talend или Pentaho DI?

В NiFi есть практика разделять контент и конфигурацию? Т.е. выносить реквизиты тех же соединений с БД, смтп-сервера и тп в отдельный файл?

Да. Соединение с БД выносится отдельным сервисом, создающим соединение. Что касается паролей - тут сложнее. Применяется Sensetive свойства, можно хранить непосредственно в процессе соединение, либо в параметрах (шифрованных). Вообще, в NIFI данные разделены на контент (записи, данные, которые надо обработать) и атрибуты (метаданные, имена топиков, идентификатор самого сообщения, количество записей в файле, идентификатор фрагмента и т.д.). Т.о. обработка разделяется на два типа - работает с контентом, и работа с атрибутами.

ЗЫ Видел ответ в 1 части, для уточнения: не рассматривали другие визуальные ETL-инструменты, так же сделанные на джаве, Talend или Pentaho DI?

В компании сразу нацелились на Apache Nifi. Но для себя я смотрел разные инструменты. Pentaho очень похож на NIFI, только в нем нет своего оркестратора.
Talend хорош, но не зашел. Хотя и не скрою, инструмент, в некоторых аспектах мощнее NIFI, особенно маппинг полей при трансформациях.

С NiFi  собираюсь только знакомиться, поэтому сорян за нубский вопрос. Разве не будет концептуально правильней для инсерт селекта использовать какой-то процессор, который выполняет именно явно указанный sql-statement типа insert into my_table select ..., а не подхватывает строки из потока, как PutDatabaseRecord (как я понял)? В Pentaho DI на больших порциях входных данных у нас были проблемы, переделали итого на выполнение sql.

ЗЫ Нет в заначке каких-то ссылок на обучающие материалы по NiFi? Что-то, что самому пригодилось.

Разве не будет концептуально правильней для инсерт селекта использовать какой-то процессор, который выполняет именно явно указанный sql-statement типа insert into my_table select ..., а не подхватывает строки из потока, как PutDatabaseRecord (как я понял)?

Я не понял вашей мысли.

Основная цель - не перекачать данные из одной таблицы в другую, а перекачать данные из одного источника (базы), в другую. При этом между ними нет связи, т.е. нельзя сослаться на них в одном запросе.

Смысл применения PutDatabaseRecord как раз и состоит в том, что этот процессор позволяет выполнить встану батчем, то есть за один проход вставить все то, что лежит в контенте. В зависимости от вашей целевой системы и настроек драйвера JDBC, вы можете или завесить свою систему, или же наоборот, оптимизировать вставку данных в таблицы. Что касается описанного в статье случае, то целевой был MsSql Server, и как показал профайлер, формировались запросы BULK INSERT, далее шли данные. Размер одного батча - 100 тыс строк, время вставки - менее 1 секунды (порядка 0,7-0,6с, в зависимости от нагрузки на сервер). В две разные таблицы можно вставлять параллельно.

В Pentaho DI на больших порциях входных данных у нас были проблемы, переделали итого на выполнение sql.

Если есть возможность применить PXF, Linked Server или иные технологию связности баз данных, то подобный запрос будет более выгоден по ресурсам. Однако для оркестрации такого подхода я бы применял Airflow или подобную им вещь.

ЗЫ Нет в заначке каких-то ссылок на обучающие материалы по NiFi? Что-то, что самому пригодилось.

Го в группу, поиск по ссылкам даст много чего интересного.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории