Як працює Apache Nifi - переглядайте ваш потік даних, не потонуйте в ньому

Вступ

Це шалений потік води. Так само, як ваша програма має справу з шаленим потоком даних. Маршрутизація даних з одного сховища на інший, застосування правил перевірки та вирішення питань управління даними, надійність в екосистемі великих даних важко отримати правильно, якщо ви робите це все самостійно.

Хороші новини, вам не потрібно будувати рішення для потоку даних з нуля - Apache NiFi повернувся!

Наприкінці цієї статті ви станете експертом NiFi - готовим побудувати конвеєр даних.

Що я висвітлю в цій статті:

  • Що таке Apache NiFi, у якій ситуації вам слід його використовувати, і які ключові поняття слід розуміти в NiFi.

Що я не буду охоплювати:

  • Встановлення, розгортання, моніторинг, безпека та адміністрування кластера NiFi.

Для вашої зручності ось зміст, не соромтеся йти прямо туди, де вас зацікавить. Якщо ви вперше у NiFi, радимо переглянути цю статтю в зазначеному порядку.

Зміст

  • I - Що таке Apache NiFi?

    - Визначення NiFi

    - Навіщо використовувати NiFi?

  • II - апач Ніфі під мікроскопом

    - FlowFile

    - Процесор

    - Група процесів

    - Зв'язок

    - Контролер потоку

  • Висновок та заклик до дії

Що таке Apache NiFi?

На веб-сайті проекту Apache Nifi ви можете знайти таке визначення:

Проста у використанні, потужна і надійна система для обробки та розподілу даних.

Давайте розберемо там ключові слова.

Визначення NiFi

Обробляти та розповсюджувати дані

Це суть Ніфі. Він переміщує дані по системах і надає вам інструменти для обробки цих даних.

Nifi може мати справу з різноманітними джерелами даних та форматом. Ви берете дані з одного джерела, перетворюєте їх і надсилаєте в іншу раковину даних.

Простий у використанні

Процесори - коробки - пов'язані з'єднувачами - стрілки створюють потік . N iFi пропонує досвід програмування на основі потоку.

Nifi дозволяє швидко зрозуміти набір операцій потоку даних, для реалізації яких потрібні сотні рядків вихідного коду.

Розглянемо трубопровід нижче:

Щоб перевести потік даних вище у NiFi, перейдіть до графічного інтерфейсу користувача NiFi, перетягніть три компоненти на полотно та

Це воно. Будівництво займає дві хвилини.

Тепер, якщо ви пишете код, щоб зробити те саме, для досягнення подібного результату, швидше за все, буде кілька сотень рядків.

Ви не фіксуєте суть конвеєра через код, як це робите з підходом на основі потоку. Nifi виразніше створює конвеєр даних; він призначений для цього .

Потужний

NiFi забезпечує безліч процесорівнестандартно (293 в Nifi 1.9.2). Ви на плечах велетня. Ці стандартні процесори розглядають переважну більшість випадків використання, з якими ви можете зіткнутися.

NiFi є дуже одночасним, проте його внутрішні елементи містять пов'язану з цим складність. Процесори пропонують вам абстракцію високого рівня, яка приховує невід'ємну складність паралельного програмування. Процесори працюють одночасно, і ви можете охоплювати кілька потоків процесора, щоб справлятися з навантаженням.

Паралельність - це обчислювальна скринька Пандори, яку ви не хочете відкривати. NiFi зручно захищає будівельника трубопроводів від складностей одночасності.

Надійний

Теорія, що підтримує NiFi, не нова; він має надійні теоретичні якорі. Це схоже на такі моделі, як SEDA.

Для системи потоків даних однією з основних тем, яку слід вирішити, є надійність. Ви хочете бути впевнені, що кудись надіслані дані ефективно приймаються.

NiFi досягає високого рівня надійності завдяки безлічі механізмів, які відстежують стан системи в будь-який момент часу. Ці механізми можна налаштувати, тому ви можете зробити відповідні компроміси між затримкою та пропускною здатністю, необхідними для ваших програм.

NiFi відстежує історію кожного фрагмента даних з його характеристиками походження та походження. Це дає змогу знати, яке перетворення відбувається з кожною інформацією.

Рішення для передачі даних, запропоноване Apache Nifi, виявляється чудовим інструментом для аудиту конвеєра даних. Характеристики лінії даних є важливими для зміцнення довіри до великих даних та систем ШІ в контексті, коли транснаціональні суб'єкти, такі як Європейський Союз, пропонують керівні принципи для підтримки точної обробки даних.

Навіщо використовувати Nifi?

По-перше, я хочу дати зрозуміти, що я не тут, щоб проповідувати NiFi. Моя мета - надати вам достатньо елементів, щоб ви могли прийняти обґрунтоване рішення щодо найкращого способу побудови конвеєру даних.

Корисно пам’ятати про чотири V великих даних при вимірюванні рішення.

  • Гучність - в якому масштабі ви працюєте? По порядку величини ви ближчі до кількох гігабайтів або сотень петабайтів?
  • Різноманітність - скільки у вас джерел даних? Ваші дані структуровані? Якщо так, чи часто схема змінюється?
  • Швидкість - Яка частота подій, які ви обробляєте? Це платежі за допомогою кредитних карток? Це щоденний звіт про ефективність, який надсилає пристрій IoT?
  • Правдивість - Чи можете ви довіряти даним? Як варіант, чи потрібно застосовувати кілька операцій очищення перед тим, як маніпулювати цим?

NiFi безперешкодно передає дані з декількох джерел даних і забезпечує механізми обробки різних схем даних. Таким чином, він сяє, коли в даних є велика різноманітність .

Nifi особливо цінний, якщо дані низької достовірності . Оскільки він надає кілька процесорів для очищення та форматування даних.

За допомогою опцій конфігурації Nifi може вирішити широкий спектр ситуацій гучності / швидкості.

Збільшується перелік програм для рішень з маршрутизації даних

Нові правила, зростання Інтернету речей та потік даних, які він генерує, підкреслюють актуальність таких інструментів, як Apache NiFi.

  • Мікропослуги - це модно. У цих слабо пов'язаних послугах дані є контрактом між службами. Nifi - це надійний спосіб маршрутизації даних між цими службами.
  • Інтернет речейприносить безліч даних до хмари. Поглинання та перевірка даних від краю до хмари створює багато нових проблем, з якими NiFi може ефективно вирішити (насамперед, через MiniFi, проект NiFi для крайових пристроїв)
  • Введені нові керівні принципи та правила для корекції економіки великих даних. У цьому контексті посилення моніторингу для підприємств життєво важливо мати чіткий огляд свого конвеєру даних. Наприклад, лінія даних NiFi може бути корисною на шляху до дотримання норм.

Усуньте розрив між експертами з великих даних та іншими

Як ви можете бачити з інтерфейсу користувача, потік даних, виражений у NiFi, чудово повідомляє про ваш конвеєр даних. Це може допомогти членам вашої організації стати більш обізнаними про те, що відбувається в конвеєрі даних.

  • Аналітик просить зрозуміти, чому ці дані надходять сюди саме таким чином? Сядьте разом і пройдіться по потоку. Через п’ять хвилин ви дасте комусь глибоке розуміння конвеєра Extract Transform і Load -ETL- .
  • Ви хочете отримати відгук від своїх однолітків щодо нового потоку обробки помилок, який ви створили? NiFi приймає дизайнерське рішення розглядати шляхи помилок так само ймовірно, як і допустимі результати. Очікуйте, що огляд потоку буде коротшим, ніж традиційний огляд коду.

Чи варто його використовувати? Так, ні, можливо?

NiFi брендів як простий у використанні. Тим не менше, це корпоративна платформа потоку даних. Він пропонує повний набір функцій, з яких вам може знадобитися лише зменшена підмножина. Додавання нового інструменту в стек не є доброякісним.

Якщо ви починаєте з нуля і керуєте кількома даними з надійних джерел даних, можливо, вам краще налаштувати конвеєр " Витяг перетворення та завантаження - ETL ". Можливо, все, що вам потрібно, - це збір даних із бази даних та деякі сценарії підготовки даних.

З іншого боку, якщо ви працюєте в середовищі з існуючими рішеннями для обробки великих даних (будь-то для зберігання, обробки чи обміну повідомленнями), NiFi добре інтегрується з ними і, швидше за все, швидко виграє. Ви можете використовувати готові роз'єми для інших рішень для великих даних.

Легко надихати новими рішеннями. Перелічіть свої вимоги та виберіть рішення, яке максимально просто відповідає вашим потребам .

Тепер, коли ми побачили дуже високу картину Apache NiFi, ми подивимось на її ключові концепції та розіб’ємо її внутрішні елементи.

Apache Nifi під мікроскопом

"NiFi - це коробки та програмування стрілок", можливо, це нормально, щоб повідомити про загальну картину. Однак, якщо вам доводиться працювати з NiFi, можливо, ви захочете трохи більше зрозуміти, як це працює.

У цій другій частині я пояснюю критичні концепції Apache NiFi схемами. Ця модель чорного ящика згодом не стане для вас чорним ящиком.

Розпакування Apache NiFi

Коли ви запускаєте NiFi, ви потрапляєте на веб-інтерфейс. Веб-інтерфейс - це проект, на якому ви розробляєте та контролюєте конвеєр даних.

У Nifi ви збираєте процесори, пов'язані між собою з'єднаннями . У зразку потоку даних, представленому раніше, є три процесори.

Користувальницький інтерфейс NiFi canvas - це структура, в якій розвивається конструктор конвеєрів.

Осмислення термінології Nifi

Щоб виразити свій потік даних у Nifi, спочатку потрібно оволодіти його мовою. Не хвилюйтеся, декількох термінів достатньо, щоб зрозуміти концепцію, яка стоїть за ним.

Чорні ящики називаються процесорами, і вони обмінюються фрагментами інформації з назвою FlowFiles через черги, які називаються з'єднаннями . Нарешті, контролер FlowFile відповідає за управління ресурсами між цими компонентами.

Давайте подивимося, як це працює під капотом.

FlowFile

У NiFi, файл FlowFile- це інформаційний пакет, що рухається через процесори конвеєра.

FlowFile складається з двох частин:

  • Атрибути , які є парами ключ / значення. Наприклад, ім'я файлу, шлях до нього та унікальний ідентифікатор є стандартними атрибутами.
  • Вміст , посилання на потік байтів складає вміст FlowFile.

FlowFile не містить самих даних. Це суттєво обмежило б пропускну здатність трубопроводу.

Натомість у FlowFile міститься вказівник, який посилається на дані, що зберігаються в якомусь місці локального сховища. Це місце називається Сховищем вмісту .

Для доступу до вмісту FlowFile вимагає отримання ресурсу із сховища вмісту. Пізніші відстежують точне зміщення диска з місця, де знаходиться вміст, і передає його назад до FlowFile.

Не всі процесори потребують доступу до вмісту FlowFile для виконання своїх операцій - наприклад, агрегування вмісту двох FlowFiles не вимагає завантаження їхнього вмісту в пам'ять.

Коли процесор змінює вміст FlowFile, попередні дані зберігаються. NiFi копіює на запис, він змінює вміст під час копіювання на нове місце. Вихідна інформація залишається недоторканою у сховищі вмісту.

Приклад

Розглянемо процесор, який стискає вміст FlowFile. Оригінальний вміст залишається у сховищі вмісту, а для стисненого вмісту створюється новий запис.

Репозиторій вмісту нарешті повертає посилання на стислий вміст. FlowFile оновлюється, щоб вказувати на стислі дані.

На малюнку нижче наведено приклад з процесором, який стискає вміст FlowFiles.

Надійність

NiFi заявляє про свою надійність, як це на практиці?Атрибути всіх поточних файлів, що використовуються в даний час, а також посилання на їх вміст зберігаються у сховищі FlowFile.

На кожному кроці конвеєра модифікація потокового файлу спочатку реєструється у сховищі FlowFile, у журналі попереднього запису, перед тим, як його виконати.

Для кожного поточного файлу FlowFile, що існує в системі, сховище FlowFile зберігає:

  • Атрибути FlowFile
  • Вказівник на вміст FlowFile, розташований у сховищі FlowFile
  • Стан FlowFile. Наприклад: до якої черги на даний момент належить файл потоку.

Сховище FlowFile надає нам найбільш поточний стан потоку; таким чином, це потужний інструмент для відновлення після відключення.

NiFi пропонує ще один інструмент для відстеження повної історії всіх FlowFiles у потоці: сховище походження.

Сховище походження

Кожного разу, коли FlowFile змінюється, NiFi робить знімок FlowFile та його контексту на цьому етапі. Назва цього знімка в NiFi - подія походження . Репозиторій Провенансу реєструє Події Провенансу.

Провенанс дозволяє нам простежити лінію даних і побудувати повний ланцюг зберігання для кожної інформації, обробленої в NiFi.

На додаток до пропонування повного ряду даних, сховище походження також пропонує відтворити дані з будь-якого моменту часу.

Зачекайте, яка різниця між сховищем FlowFile та сховищем походження?

Ідея сховища FlowFile та сховища походження дуже схожа, але вони не стосуються однієї проблеми.

  • Репозиторій FlowFile - це журнал, який містить лише останній стан поточних файлів, що використовуються в системі. Це остання картина потоку і дозволяє швидко відновитись після відключення.
  • З іншого боку, сховище провеніації є більш вичерпним, оскільки воно відстежує повний життєвий цикл кожного потокового файлу, який був у потоці.

Якщо у вас є лише остання картина системи із сховищем FlowFile, сховище Provenance надає вам колекцію фотографій - відео . Ви можете перемотати в будь-який момент минулого, дослідити дані, відтворити операції за певний час. Він забезпечує повну лінію даних.

Процесор FlowFile

Процесор являє собою чорний ящик , який виконує операцію. Процесори мають доступ до атрибутів та вмісту FlowFile для виконання всіх видів дій. Вони дають змогу виконувати багато операцій із входом даних, стандартні завдання перетворення / перевірки даних та збереження цих даних у різні раковини даних.

NiFi постачається з багатьма процесорами при його встановленні. Якщо ви не знайдете ідеального для вашого випадку використання, все одно можна створити власний процесор. Написання власних процесорів виходить за рамки цього допису в блозі.

Процесори - це абстракції високого рівня, які виконують одне завдання. Ця абстракція дуже зручна, оскільки захищає конструктора конвеєрів від властивих труднощів одночасного програмування та реалізації механізмів обробки помилок.

Процесори виставляють інтерфейс з декількома налаштуваннями конфігурації для точної настройки їх поведінки.

Властивості цих процесорів є останньою ланкою між NiFi та діловою реальністю ваших вимог до програми.

Диявол полягає в деталях, і будівельники трубопроводів проводять більшу частину свого часу, допрацьовуючи ці властивості відповідно до очікуваної поведінки.

Масштабування

Для кожного процесора можна вказати кількість одночасних завдань, які потрібно виконувати одночасно. Подібно до цього, контролер потоку виділяє більше ресурсів для цього процесора, збільшуючи його пропускну здатність. Процесори діляться нитками. Якщо один процесор вимагає більше потоків, інші процесори мають менше потоків для виконання. Детальна інформація про те, як контролер потоку розподіляє потоки, доступна тут.

Горизонтальне масштабування. Інший спосіб масштабування - збільшити кількість вузлів у вашому кластері NiFi. Кластеризаційні сервери дозволяють збільшити ваші можливості обробки за допомогою товарного обладнання.

Група процесів

Зараз це просто, коли ми побачили, що таке процесори.

Сукупність процесорів, об'єднаних разом із їхніми з'єднаннями, можуть утворювати групу процесів. Ви додаєте вхідний та вихідний порти, щоб він міг приймати та надсилати дані.

Групи процесорів - це простий спосіб створити нові процесори на основі існуючих.

Зв'язки

З’єднання - це черги між процесорами. Ці черги дозволяють процесорам взаємодіяти з різною швидкістю. З'єднання можуть мати різну пропускну здатність, оскільки існують різні розміри водопровідних труб.

Оскільки процесори споживають і виробляють дані з різною швидкістю, залежно від операцій, які вони виконують, підключення виконують роль буферів FlowFiles.

Існує обмеження кількості даних, які можуть бути у з’єднанні. Подібним чином, коли ваша водопровідна труба заповнена, ви більше не можете додавати воду, або вона переповнюється.

У NiFi ви можете встановити обмеження на кількість файлів FlowFi та розмір їх агрегованого вмісту, що проходить через з'єднання.

Що відбувається, коли ви надсилаєте більше даних, ніж з’єднання може обробити?

Якщо кількість FlowFiles або кількість даних перевищує визначений поріг, застосовується зворотний тиск . Контролер потоку не планує повторного запуску попереднього процесора, поки в черзі не залишиться місця.

Скажімо, у вас обмеження 10 000 FlowFiles між двома процесорами. У якийсь момент з'єднання містить 7 000 елементів. Це нормально, оскільки обмеження становить 10 000. P1 все ще може надсилати дані через підключення до P2 .

Тепер припустимо, що один процесор надсилає до підключення 4000 нових FlowFiles.

7 0000 + 4000 = 11 000 → Ми перевищуємо поріг підключення 10 000 FlowFiles.

Межі є м’якими межами, тобто вони можуть бути перевищені. Однак, як тільки вони з’являться , попередній процесор P1 не планується, поки роз’єм не повернеться нижче порогового значення - 10 000 FlowFiles.

Цей спрощений приклад дає загальну картину того, як працює протитиск.

Ви хочете встановити порогові значення підключення, що відповідають обсягу та швидкості обробки даних. Майте на увазі чотири проти .

Ідея перевищення ліміту може здатися дивним. Коли кількість FlowFiles або пов’язаних даних перевищує порогове значення, спрацьовує механізм обміну.

Для іншого прикладу зворотного тиску цей поштовий потік може допомогти.

Розміщення пріоритетів FlowFiles

Роз'єми в NiFi дуже конфігуруються. Ви можете вибрати, як ви пріоритезуєте FlowFiles у черзі, щоб вирішити, який із них обробити далі.

Серед доступних можливостей є, наприклад, порядок First In First Out - FIFO. Однак ви навіть можете використовувати атрибут за вашим вибором із FlowFile, щоб визначити пріоритет вхідних пакетів.

Контролер потоку

Контролер потоку - це клей, який об’єднує все. Він виділяє та управляє потоками для процесорів. Це те, що виконує потік даних.

Крім того, контролер потоку дозволяє додавати служби контролера.

Ці служби полегшують управління спільними ресурсами, такими як підключення до бази даних або облікові дані постачальника хмарних послуг. Послуги контролера - це демони. Вони працюють у фоновому режимі та надають конфігурацію, ресурси та параметри для виконання процесорами.

Наприклад, ви можете використовувати службу постачальника облікових даних AWS, щоб ваші служби могли взаємодіяти з сегментами S3, не турбуючись про облікові дані на рівні процесора.

Як і у процесорів, безліч послуг контролерів доступні нестандартно.

Ви можете ознайомитися з цією статтею, щоб дізнатись більше про послуги контролера.

Висновок та заклик до дії

У ході цієї статті ми обговорили NiFi, рішення для корпоративного потоку даних. Тепер ви добре розумієте, що робить NiFi і як можна використовувати функції маршрутизації даних для своїх додатків.

Якщо ви читаєте це, вітаю! Тепер ви знаєте про NiFi більше, ніж 99,99% населення світу.

Практика робить досконалим. Ви опановуєте всі концепції, необхідні для початку побудови власного трубопроводу. Зробити це просто; змусити це працювати спочатку.

Ось список захоплюючих ресурсів, які я зібрав поверх свого досвіду роботи, щоб написати цю статтю.

Ресурси?

Більша картина

Оскільки проектування конвеєру даних у складній екосистемі вимагає знань у багатьох сферах, я настійно рекомендую книгу Проектування інтенсивних застосувань данихвід Мартіна Клеппмана. Він охоплює основи.

  • Шпаргалка з усіма посиланнями, цитованими в книзі Мартіна, доступна в його репозиторії Github.

Ця шпаргалка - чудове місце для початку, якщо ви вже знаєте, яку тему хочете поглиблено вивчити, і хочете знайти якісні матеріали.

Альтернативи Apache Nifi

Існують інші рішення щодо потоку даних.

Відкрите джерело:

  • Streamsets схожий на NiFi; хороше порівняння доступне на цьому блозі

Більшість існуючих хмарних провайдерів пропонують рішення щодо потоку даних. Ці рішення легко інтегруються з іншими продуктами, якими ви користуєтеся від цього хмарного провайдера. У той же час це міцно пов’язує вас з певним продавцем.

  • Azure Data Factory, рішення Microsoft
  • IBM має свій InfoSphere DataStage
  • Amazon пропонує інструмент під назвою Data Pipeline
  • Google пропонує свій потік даних
  • Хмара Alibaba представляє послугу DataWorks із подібними функціями

Пов'язані з NiFi ресурси

  • Офіційна документація Nifi і особливо глибокий розділ Nifi - це золоті копальні.
  • Реєстрація в списку розсилки користувачів Nifi також є чудовим способом отримати інформацію - наприклад, ця розмова пояснює зворотний тиск.
  • Hortonworks, постачальник рішень для обробки великих даних, має веб-сайт спільноти, повний залучених ресурсів та рекомендацій для Apache Nifi.

    - Ця стаття детально розповідає про роз’єми, використання купи та зворотний тиск.

    - Цей розділ використовує найкращі методи визначення розмірів під час розгортання кластера NiFi.

  • Блог NiFi дає багато знань про способи використання NiFi, а також поради щодо побудови конвеєрів.
  • Пояснено шаблон перевірки претензій
  • Теорія, що лежить в основі Apache Nifi, не нова, Седа, на яку посилається Nici Doc, надзвичайно актуальна

    - Метт Уелш. Берклі. SEDA: Архітектура добре кондиціонованих, масштабованих Інтернет-послуг [онлайн]. Отримано: 21 квітня 2019 р. З //www.mdw.la/papers/seda-sosp01.pdf