Головне, що слід розуміти, це те, що NiFi створено для того, щоб справді добре виконувати одну справді важливу справу, а саме «Керування потоком даних». Його дизайн базується на концепції програмування на основі потоку, про яку ви можете прочитати та використати для свого проекту https://en.wikipedia.org/wiki/Flow-based_programming
Вже існує багато систем, які стрімлять дані, наприклад датчики, IOT тощо. Є багато систем, які зосереджені на обробці даних, наприклад Apache Storm, Spark, Flink та інші. І, нарешті, є багато систем, які зберігають дані, наприклад HDFS, реляційні бази даних тощо. NiFi зосереджується виключно на з’єднанні цих систем і забезпеченні користувацького досвіду та основних функцій, необхідних для цього.
Деякі з цих ключових функцій і варіанти архітектури, зроблені, щоб зробити це ефективним:
1) Інтерактивне командування та управління
Робота людини, яка намагається підключити системи, полягає в тому, щоб мати можливість швидко й ефективно взаємодіяти з постійними потоками даних, які вони бачать. Інтерфейс користувача NiFi дозволяє робити саме це, коли дані надходять, ви можете додавати функції для роботи з ними, створювати копії даних, щоб спробувати нові підходи, коригувати поточні параметри, переглядати нещодавню та історичну статистику, корисну вбудовану документацію тощо. Для порівняння майже всі інші системи мають модель, орієнтовану на проектування та розгортання, тобто ви вносите серію змін, а потім їх розгортаєте. Ця модель чудова і може бути інтуїтивно зрозумілою, але для роботи з керування потоком даних це означає, що ви не отримуєте інтерактивні зміни за допомогою зворотного зв’язку про зміни, що так важливо для швидкого створення нових потоків або для безпечного й ефективного виправлення чи покращення обробки існуючих потоків даних.
2) Походження даних
Дуже унікальною можливістю NiFi є його здатність генерувати детальні та потужні відстеження для того, звідки надходять ваші дані, що з ними зроблено, куди вони надсилаються та коли це робиться в потоці. Це важливо для ефективного керування потоком даних з кількох причин, але для тих, хто перебуває на ранніх фазах дослідження та працює над проектом, найважливіше, що це дає, — це чудова гнучкість налагодження. Ви можете налаштувати свої потоки й дозволити всьому працювати, а потім використовувати походження, щоб фактично довести, що він зробив саме те, що ви хотіли. Якщо щось сталося не так, як ви очікували, ви можете виправити потік і відтворити об’єкт, а потім повторити. Це дуже корисно.
3) Спеціально створені сховища даних
Готовий досвід NiFi пропонує дуже потужну продуктивність навіть на дуже скромному апаратному забезпеченні чи віртуальних середовищах. Це пов’язано з архітектурою файлу потоку та сховища вмісту, який дає нам високу продуктивність, але транзакційну семантику, яку ми хочемо, коли дані проходять через потік. Репозиторій flowfile — це проста реалізація журналу запису, а репозиторій вмісту забезпечує незмінне сховище вмісту з версіями. Це, у свою чергу, означає, що ми можемо «скопіювати» дані, лише додавши новий покажчик (фактично не копіюючи байти), або ми можемо перетворити дані, просто зчитавши з оригіналу та записавши нову версію. Знову, це дуже ефективно. Поєднайте це з елементами походження, про які я згадав, і це просто надасть справді потужну платформу. Інша дуже важлива річ, яку тут слід розуміти, полягає в тому, що ви не завжди можете диктувати такі речі, як розмір залучених даних. NiFi API було створено з урахуванням цього факту, тому наш API дозволяє процесорам отримувати, перетворювати та надсилати дані без необхідності завантажувати всі об’єкти в пам’ять. Ці репозиторії також означають, що в більшості потоків більшість процесорів взагалі не торкаються вмісту. Однак ви можете легко побачити в інтерфейсі користувача NiFi, скільки байтів фактично зчитується або записується, тому ви знову отримуєте дійсно корисну інформацію для встановлення та спостереження за своїми потоками. Ця конструкція також означає, що NiFi може підтримувати зворотнє навантаження і скидання навантаження природним шляхом, і це дійсно критичні функції для системи керування потоком даних.
Раніше люди з компанії Streamsets згадували, що NiFi орієнтований на файли. Я не зовсім впевнений, яка різниця між файлом, записом, кортежем, об’єктом або повідомленням у загальних термінах, але насправді, коли дані знаходяться в потоці, це «річ, якою потрібно керувати та доставлено'. Це те, що робить NiFi. Чи є у вас багато справді високошвидкісних маленьких речей, чи є у вас великі речі, і чи приходять вони з живого аудіопотоку з Інтернету, чи вони походять із файлу, що знаходиться на вашому жорсткому диску, не має значення. Щойно він потрапив у потік, настав час керувати ним і доставляти його. Це те, що робить NiFi. Компанія Streamsets також зазначила, що NiFi є безсхемним. Цілком точно, що NiFi не примусово перетворює дані з того, чим вони були спочатку, у якийсь спеціальний формат NiFi, і нам не потрібно повторно конвертувати їх назад у якийсь формат для подальшої доставки. Було б дуже прикро, якби ми це зробили, тому що це означає, що навіть найтривіальніші випадки матимуть проблемні наслідки для продуктивності.
Mykhailo Makhno