Как работи Apache Nifi - сърфирайте във вашия поток от данни, не се давете в него

Въведение

Това е луд поток от вода. Точно както вашето приложение се занимава с луд поток от данни. Пренасочването на данни от едно хранилище към друго, прилагане на правила за валидиране и разглеждане на въпроси за управлението на данните, надеждността в екосистемата за големи данни е трудно да се получи правилно, ако го направите сами.

Добра новина, не е нужно да изграждате своето решение за потока на данни от нулата - Apache NiFi ви върна!

В края на тази статия ще бъдете експерт по NiFi - готов да изгради вашия конвейер за данни.

Какво ще разгледам в тази статия:

  • Какво представлява Apache NiFi, в коя ситуация трябва да го използвате и кои са ключовите понятия, които трябва да разберете в NiFi.

Какво няма да покрия:

  • Инсталиране, внедряване, наблюдение, сигурност и администриране на NiFi клъстер.

За ваше улеснение тук е съдържанието, не се колебайте да отидете направо там, където любопитството ви отвежда. Ако сте първокласен NiFi, препоръчваме ви да прегледате тази статия в посочения ред.

Съдържание

  • I - Какво е Apache NiFi?

    - Определяне на NiFi

    - Защо да използвам NiFi?

  • II - Apache Nifi под микроскопа

    - 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, се оказва отличен инструмент за одит на конвейер за данни. Характеристиките на линията на данните са от съществено значение за укрепване на доверието в системите за големи данни и AI в контекст, в който транснационални участници като Европейския съюз предлагат насоки в подкрепа на точната обработка на данните.

Защо да използвам Nifi?

Първо, искам да кажа ясно, че не съм тук, за да евангелизирам NiFi. Целта ми е да ви дам достатъчно елементи, за да можете да вземете информирано решение за най-добрия начин за изграждане на вашия конвейер за данни.

Полезно е да имате предвид четирите V на големи данни, когато оразмерявате решението си.

  • Обем - в какъв мащаб оперирате? По реда на величината по-близо ли сте до няколко GigaBytes или стотици PetaBytes?
  • Разнообразие - колко източници на данни имате? Структурирани ли са вашите данни? Ако да, дали схемата често се различава?
  • Скорост - Каква е честотата на събитията, които обработвате? Плащания с кредитни карти ли? Дали това е ежедневен отчет за ефективността, изпращан от IoT устройство?
  • Достоверност - Можете ли да се доверите на данните? Като алтернатива, трябва ли да приложите множество операции за почистване, преди да го манипулирате?

NiFi безпроблемно поглъща данни от множество източници на данни и осигурява механизми за обработка на различни схеми в данните. По този начин тя свети, когато има голямо разнообразие в данните.

Nifi е особено ценен, ако данните са с ниска достоверност . Тъй като осигурява множество процесори за почистване и форматиране на данните.

Със своите опции за конфигуриране Nifi може да се справи с широк спектър от ситуации за обем / скорост.

Все по-голям списък от приложения за решения за маршрутизиране на данни

Новите разпоредби, възходът на Интернет на нещата и потокът от данни, които той генерира, подчертават значимостта на инструменти като Apache NiFi.

  • Микроуслугите са модерни. В тези свободно свързани услуги данните са договорът между услугите. Nifi е надежден начин за маршрутизиране на данни между тези услуги.
  • Интернет на нещатаноси множество данни в облака. Поглъщането и валидирането на данни от ръба до облака създава много нови предизвикателства, с които NiFi може ефективно да се справи (предимно чрез MiniFi, проект NiFi за крайни устройства)
  • Въвеждат се нови насоки и разпоредби за пренастройка на икономиката на големите данни. В този контекст на увеличаващия се мониторинг е жизненоважно за предприятията да имат ясен преглед на своите тръбопроводи за данни. Линията на данни на NiFi, например, може да бъде полезна по пътя към спазване на разпоредбите.

Преодолейте разликата между експертите за големи данни и останалите

Както можете да видите от потребителския интерфейс, потокът данни, изразен в NiFi, е отличен за комуникация за вашия конвейер за данни. Това може да помогне на членовете на вашата организация да станат по-информирани за това, което се случва в конвейера за данни.

  • Анализатор иска прозрения защо тези данни пристигат тук по този начин? Седнете заедно и преминете през потока. След пет минути давате на някого ясно разбиране за тръбопровода Extract Transform и Load -ETL- .
  • Искате обратна връзка от вашите връстници за нов поток за обработка на грешки, който сте създали? NiFi взема решение за проектиране да разглежда пътищата на грешките толкова вероятни, колкото и валидни резултати. Очаквайте прегледа на потока да бъде по-кратък от традиционния преглед на кода.

Трябва ли да го използвате? Да, не, може би?

NiFi се маркира като лесен за използване. И все пак това е корпоративна платформа за поток на данни. Той предлага пълен набор от функции, от които може да се нуждаете само от намалено подмножество. Добавянето на нов инструмент към стека не е доброкачествено.

Ако започвате от нулата и управлявате няколко данни от надеждни източници на данни, може би ще е по-добре да настроите своя тръбопровод Extract Transform and Load - ETL . Може би промяната на данни от база данни и някои скриптове за подготовка на данни са всичко, от което се нуждаете.

От друга страна, ако работите в среда с използвани съществуващи решения за големи данни (било то за съхранение, обработка или съобщения), NiFi се интегрира добре с тях и е по-вероятно да бъде бърза печалба. Можете да използвате готовите съединители за тези други решения за големи данни.

Лесно е да бъдете хипнотизирани от нови решения. Избройте вашите изисквания и изберете решението, което отговаря на вашите нужди възможно най-просто .

Сега, когато видяхме много високата картина на Apache NiFi, разглеждаме ключовите му концепции и анализираме вътрешните му елементи.

Apache Nifi под микроскопа

„NiFi е кутии и програмиране със стрелки“ може да е добре, за да се съобщи голямата картина. Ако обаче трябва да работите с NiFi, може да искате да разберете малко повече за това как работи.

В тази втора част обяснявам критичните концепции на Apache NiFi със схеми. Този модел черна кутия няма да бъде черна кутия за вас след това.

Разархивиране на Apache NiFi

Когато стартирате NiFi, кацате на уеб интерфейса му. Уеб потребителският интерфейс е планът, върху който проектирате и контролирате вашия конвейер за данни.

В Nifi сглобявате процесори, свързани заедно чрез връзки . В примерния поток от данни, въведен по-рано, има три процесора.

Потребителският интерфейс на платформата NiFi е рамката, в която се развива конструкторът на тръбопроводи.

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

За да изразите потока си от данни в Nifi, първо трябва да овладеете неговия език. Без притеснение, няколко термина са достатъчни, за да разберете концепцията зад него.

Черните кутии се наричат процесори и те обменят парчета информация с име FlowFiles чрез опашки, които са именувани връзки . И накрая, контролерът FlowFile е отговорен за управлението на ресурсите между тези компоненти.

Нека да разгледаме как работи това под капака.

FlowFile

В NiFi, FlowFileе информационният пакет, движещ се през процесорите на тръбопровода.

FlowFile се предлага в две части:

  • Атрибути , които са двойки ключ / стойност. Например името на файла, пътят до файла и уникалният идентификатор са стандартни атрибути.
  • Съдържание , препратка към потока байтове съставя съдържанието FlowFile.

FlowFile не съдържа самите данни. Това би ограничило сериозно пропускателната способност на тръбопровода.

Вместо това FlowFile съдържа указател, който препраща към данни, съхранявани на някакво място в локалното хранилище. Това място се нарича Хранилище за съдържание .

За достъп до съдържанието FlowFile заявява ресурса от хранилището на съдържание. По-късно записва точните отмествания на диска от мястото, където е съдържанието, и го предава обратно към FlowFile.

Не всички процесори трябва да имат достъп до съдържанието на FlowFile, за да извършват своите операции - например, агрегирането на съдържанието на два FlowFiles не изисква зареждането на съдържанието им в паметта.

Когато процесор модифицира съдържанието на FlowFile, се запазват предишните данни. NiFi копира при запис, той модифицира съдържанието, докато го копира на ново място. Оригиналната информация е непокътната в хранилището за съдържание.

Пример

Помислете за процесор, който компресира съдържанието на FlowFile. Оригиналното съдържание остава в хранилището за съдържание и се създава нов запис за компресираното съдържание.

Хранилището за съдържание накрая връща препратката към компресираното съдържание. FlowFile се актуализира, за да сочи към компресираните данни.

Чертежът по-долу обобщава примера с процесор, който компресира съдържанието на FlowFiles.

Надеждност

NiFi твърди, че е надеждна, как е на практика?Атрибутите на всички използвани в момента FlowFiles, както и препратката към тяхното съдържание, се съхраняват в хранилището на FlowFile.

На всяка стъпка от конвейера, модификация на Flowfile първо се записва в хранилището на FlowFile, в дневник за предварително запис, преди да се извърши.

За всеки FlowFile, който в момента съществува в системата, хранилището на FlowFile съхранява:

  • Атрибутите FlowFile
  • Указател към съдържанието на FlowFile, намиращо се в хранилището на FlowFile
  • Състоянието на FlowFile. Например: към коя опашка принадлежи Flowfile в този момент.

Хранилището FlowFile ни дава най-актуалното състояние на потока; по този начин това е мощен инструмент за възстановяване след прекъсване.

NiFi предоставя още един инструмент за проследяване на пълната история на всички FlowFiles в потока: хранилището на Provenance.

Хранилище за произход

Всеки път, когато FlowFile се модифицира, NiFi прави моментна снимка на FlowFile и неговия контекст в този момент. Името на тази снимка в NiFi е събитие за произход . Хранилището на Провенанса записва Събития от Провенанс.

Провенансът ни позволява да проследим родословната линия на данните и да изградим пълната верига на попечителство за всяка информация, обработена в NiFi.

Освен че предлага пълната линия на данните, хранилището на Provenance също предлага да преиграе данните от всеки момент във времето.

Изчакайте, каква е разликата между хранилището на FlowFile и хранилището на Provenance?

Идеята зад хранилището FlowFile и хранилището Provenance е доста сходна, но те не разглеждат един и същ проблем.

  • Хранилището на FlowFile е дневник, който съдържа само най-новото състояние на използваните FlowFiles в системата. Това е най-новата картина на потока и дава възможност за бързо възстановяване от прекъсване.
  • Хранилището на Провенанс, от друга страна, е по-изчерпателно, тъй като проследява пълния жизнен цикъл на всеки FlowFile, който е бил в потока.

Ако имате само най-новата снимка на системата с хранилището FlowFile, хранилището Provenance ви дава колекция от снимки - видео . Можете да се върнете към всеки момент в миналото, да изследвате данните, да възпроизвеждате операции от даден момент. Той осигурява пълна линия на данните.

Процесор на FlowFile

А процесора е черна кутия, която извършва работа. Процесорите имат достъп до атрибутите и съдържанието на FlowFile, за да извършват всякакъв вид действия. Те ви позволяват да извършвате много операции при навлизане на данни, стандартни задачи за трансформация / валидиране на данни и запазване на тези данни в различни мивки за данни.

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

Процесорите са абстракции на високо ниво, които изпълняват една задача. Тази абстракция е много удобна, защото предпазва конструктора на тръбопроводи от присъщите трудности на едновременното програмиране и прилагането на механизми за обработка на грешки.

Процесорите излагат интерфейс с множество конфигурационни настройки, за да прецизират поведението си.

Свойствата на тези процесори са последната връзка между NiFi и бизнес реалността на вашите изисквания за приложение.

Дяволът е в детайлите и строителите на тръбопроводи прекарват по-голямата част от времето, като прецизират тези свойства, за да отговарят на очакваното поведение.

Мащабиране

За всеки процесор можете да посочите броя на едновременните задачи, които искате да изпълнявате едновременно. По този начин Flow Controller разпределя повече ресурси за този процесор, увеличавайки неговата производителност. Процесорите споделят нишки. Ако един процесор поиска повече нишки, други процесори разполагат с по-малко нишки за изпълнение. Подробности за това как Flow Controller разпределя нишките са достъпни тук.

Хоризонтално мащабиране. Друг начин за мащабиране е да увеличите броя на възлите във вашия NiFi клъстер. Клъстериращите сървъри правят възможно увеличаването на възможностите ви за обработка с помощта на стоков хардуер.

Процесна група

Това е ясно сега, когато видяхме какво представляват процесорите.

Куп процесори, събрани заедно с техните връзки, могат да образуват група процеси. Добавяте входен и изходен порт, за да може да получава и изпраща данни.

Групите процесори са лесен начин за създаване на нови процесори, базирани на съществуващи.

Връзки

Връзките са опашките между процесорите. Тези опашки позволяват на процесорите да си взаимодействат с различни скорости. Връзките могат да имат различен капацитет, тъй като съществуват различни размери на водопроводните тръби.

Тъй като процесорите консумират и произвеждат данни с различни скорости в зависимост от операциите, които извършват, връзките действат като буфери на FlowFiles.

Има ограничение за това колко данни могат да бъдат във връзката. По същия начин, когато вашата водопроводна тръба е пълна, вече не можете да добавяте вода или тя прелива.

В NiFi можете да зададете ограничения за броя на FlowFiles и размера на тяхното обобщено съдържание, преминаващо през връзките.

Какво се случва, когато изпратите повече данни, отколкото връзката може да обработи?

Ако броят на FlowFiles или количеството данни надхвърли определения праг, се прилага обратно налягане . Контролерът на потока няма да насрочи повторното стартиране на предишния процесор, докато няма място в опашката.

Да приемем, че имате ограничение от 10 000 FlowFiles между два процесора. В един момент връзката съдържа 7 000 елемента в себе си. Всичко е наред, тъй като ограничението е 10 000. P1 все още може да изпраща данни през връзката към P2 .

Сега да кажем, че един процесор изпраща 4 000 нови FlowFiles към връзката.

7 0000 + 4 000 = 11 000 → Отиваме над прага на свързване от 10 000 FlowFiles.

Ограниченията са меки граници, което означава, че могат да бъдат надвишени. Щом обаче са, предишният процесор, P1 няма да бъде насрочен, докато съединителят се върне под праговата си стойност - 10 000 FlowFiles.

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

Искате да настроите прагове на връзката, подходящи за обема и скоростта на обработваните данни. Имайте предвид Четири Vs .

Идеята за превишаване на лимит може да звучи странно. Когато броят на 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, не е нова

    - Мат Уелш. Бъркли. SEDA: Архитектура за добре кондиционирани, мащабируеми интернет услуги [онлайн]. Получено: 21 април 2019 г. от //www.mdw.la/papers/seda-sosp01.pdf