Sådan fungerer Apache Nifi - surf på dit dataforløb, druk ikke i det

Introduktion

Det er en skør strøm af vand. Ligesom din applikation beskæftiger sig med en skør strøm af data. Routing af data fra et lager til et andet, anvendelse af valideringsregler og adressering af spørgsmål om datastyring, pålidelighed i et Big Data-økosystem er svært at få ret, hvis du gør det alene.

Gode ​​nyheder, du behøver ikke opbygge din dataflowløsning fra bunden - Apache NiFi fik din ryg!

I slutningen af ​​denne artikel vil du være en NiFi-ekspert - klar til at bygge din datapipeline.

Hvad jeg vil dække i denne artikel:

  • Hvad Apache NiFi er, i hvilken situation du skal bruge det, og hvad er de vigtigste begreber at forstå i NiFi.

Hvad jeg ikke dækker:

  • Installation, implementering, overvågning, sikkerhed og administration af en NiFi-klynge.

For din bekvemmelighed er her indholdsfortegnelsen, du er velkommen til at gå lige, hvor din nysgerrighed fører dig. Hvis du er en NiFi-første-timer, anbefales det at gennemgå denne artikel i den angivne rækkefølge.

Indholdsfortegnelse

  • I - Hvad er Apache NiFi?

    - Definition af NiFi

    - Hvorfor bruge NiFi?

  • II - Apache Nifi under mikroskopet

    - FlowFile

    - Processor

    - Procesgruppe

    - Forbindelse

    - Strømningsregulator

  • Konklusion og opfordring til handling

Hvad er Apache NiFi?

På webstedet for Apache Nifi-projektet kan du finde følgende definition:

Et brugervenligt, kraftfuldt og pålideligt system til behandling og distribution af data.

Lad os analysere nøgleordene der.

Definition af NiFi

Behandle og distribuere data

Det er kernen i Nifi. Det flytter data omkring systemer og giver dig værktøjer til at behandle disse data.

Nifi kan håndtere en lang række datakilder og format. Du tager data ind fra en kilde, transformerer dem og skubber dem til en anden datavask.

Let at bruge

Processorer - boksene - forbundet med stik - pilene skaber et flow . N iFi tilbyder en flowbaseret programmeringsoplevelse.

Nifi gør det muligt hurtigt at forstå et sæt dataflytningsoperationer, der tager hundreder af linjer med kildekode at implementere.

Overvej rørledningen nedenfor:

For at oversætte datastrømmen ovenfor i NiFi går du til NiFi grafiske brugergrænseflade, trækker og slipper tre komponenter i lærredet og

Det er det. Det tager to minutter at bygge.

Nu, hvis du skriver kode for at gøre det samme, vil det sandsynligvis vare flere hundrede linjer for at opnå et lignende resultat.

Du fanger ikke essensen af ​​rørledningen gennem kode, som du gør med en flowbaseret tilgang. Nifi er mere udtryksfuldt til at oprette en datapipeline; det er designet til at gøre det .

Magtfulde

NiFi leverer mange processorerud af kassen (293 i Nifi 1.9.2). Du er på skuldrene til en kæmpe. Disse standardprocessorer håndterer langt de fleste brugssager, du kan støde på.

NiFi er meget samtidigt, men dets indvendige indkapsler den tilknyttede kompleksitet. Processorer tilbyder dig en abstraktion på højt niveau, der skjuler den iboende kompleksitet ved parallel programmering. Processorer kører samtidigt, og du kan spænde over flere tråde i en processor for at klare belastningen.

Concurrency er en Pandoras boks, som du ikke vil åbne. NiFi beskytter bekvemt rørledningsbyggeren mod samtidighedens kompleksitet.

Pålidelig

Teorien bag NiFi er ikke ny; det har solide teoretiske ankre. Det ligner modeller som SEDA.

For et dataforløbssystem er pålidelighed et af de vigtigste emner, der skal behandles. Du vil være sikker på, at data, der sendes et eller andet sted, effektivt modtages.

NiFi opnår et højt niveau af pålidelighed gennem flere mekanismer, der holder styr på systemets tilstand på ethvert tidspunkt. Disse mekanismer kan konfigureres, så du kan foretage de passende afvejninger mellem ventetid og gennemstrømning, der kræves af dine applikationer.

NiFi sporer historien for hvert stykke data med dets afstamnings- og herkomstfunktioner. Det gør det muligt at vide, hvilken transformation der sker på hvert stykke information.

Datalinjeløsningen foreslået af Apache Nifi viser sig at være et fremragende værktøj til revision af en datarørledning. Datalinjefunktioner er vigtige for at styrke tilliden til big data og AI-systemer i en sammenhæng, hvor transnationale aktører som EU foreslår retningslinjer til støtte for nøjagtig databehandling.

Hvorfor bruge Nifi?

For det første vil jeg gøre det klart, at jeg ikke er her for at evangelisere NiFi. Mit mål er at give dig nok elementer, så du kan træffe en informeret beslutning om den bedste måde at opbygge din datapipeline på.

Det er nyttigt at huske på de fire V'er med big data, når du dimensionerer din løsning.

  • Lydstyrke - I hvilken skala arbejder du? Er du tættere på et par GigaBytes eller hundreder af PetaBytes i størrelsesorden?
  • Variety - Hvor mange datakilder har du? Er dine data struktureret? Hvis ja, varierer skemaet ofte?
  • Hastighed - Hvad er hyppigheden af ​​de begivenheder, du behandler? Er det kreditkortbetalinger? Er det en daglig præstationsrapport sendt af en IoT-enhed?
  • Ægthed - Kan du stole på dataene? Alternativt skal du anvende flere rengøringsoperationer, før du manipulerer det?

NiFi indtager problemfrit data fra flere datakilder og giver mekanismer til at håndtere forskellige skemaer i dataene. Således skinner det, når der er en stor variation i dataene.

Nifi er især værdifuldt, hvis data har lav sandhed . Da det giver flere processorer til at rense og formatere dataene.

Med sine konfigurationsmuligheder kan Nifi adressere en bred vifte af situationer med volumen / hastighed.

En stigende liste over applikationer til datarutingløsninger

Nye regler, stigningen på tingenes internet og strømmen af ​​data, det genererer, understreger relevansen af ​​værktøjer som Apache NiFi.

  • Mikrotjenester er trendy. I disse løst koblede tjenester er dataene kontrakten mellem tjenesterne. Nifi er en robust måde at dirigere data mellem disse tjenester på.
  • Tingenes internetbringer et væld af data til skyen. Indtagelse og validering af data fra kant til sky udgør mange nye udfordringer, som NiFi effektivt kan tackle (primært gennem MiniFi, NiFi-projekt til kant-enheder)
  • Nye retningslinjer og regler er indført for at justere Big Data-økonomien. I denne sammenhæng med øget overvågning er det vigtigt for virksomheder at have et klart overblik over deres datapipeline. NiFi-datastamme kan for eksempel være nyttigt i en vej mod overholdelse af regler.

Brug broen mellem big data-eksperter og de andre

Som du kan se ved brugergrænsefladen, er et dataflyt udtrykt i NiFi fremragende til at kommunikere om din datapipeline. Det kan hjælpe medlemmer af din organisation med at blive mere vidende om, hvad der foregår i datapipelinen.

  • En analytiker beder om indsigt i, hvorfor disse data ankommer her på den måde? Sid sammen og gå gennem strømmen. På fem minutter giver du nogen en stærk forståelse af Extract Transform and Load -ETL- pipelinen.
  • Vil du have feedback fra dine jævnaldrende på et nyt fejlhåndteringsflow, du oprettede? NiFi gør det til en designbeslutning at betragte fejlstier som sandsynlige som gyldige resultater. Forvent, at gennemgang af flowet er kortere end en traditionel kodeanmeldelse.

Skal du bruge det? Ja, nej, måske?

NiFi mærker sig selv som let at bruge. Alligevel er det en virksomheds dataflytningsplatform. Det tilbyder et komplet sæt funktioner, hvorfra du muligvis kun har brug for et reduceret undersæt. Tilføjelse af et nyt værktøj til stakken er ikke godartet.

Hvis du starter fra bunden og administrerer et par data fra pålidelige datakilder, kan det være bedre for dig at konfigurere din Extract Transform and Load - ETL- pipeline. Måske er en ændring af datafangst fra en database og nogle scripts til dataforberedelse alt hvad du behøver.

På den anden side, hvis du arbejder i et miljø med eksisterende big data-løsninger i brug (det være sig til lagring, behandling eller messaging), integreres NiFi godt med dem og er mere sandsynligt, at det bliver en hurtig gevinst. Du kan udnytte out-of-the-box-stikkene til de andre Big Data-løsninger.

Det er let at blive hypet af nye løsninger. Angiv dine krav, og vælg den løsning, der svarer til dine behov så enkelt som muligt .

Nu hvor vi har set det meget høje billede af Apache NiFi, ser vi på dets nøglekoncepter og dissekerer dets interne.

Apache Nifi under mikroskopet

“NiFi er kasser og pilprogrammering” kan være ok for at kommunikere det store billede. Men hvis du skal operere med NiFi, vil du måske forstå lidt mere om, hvordan det fungerer.

I denne anden del forklarer jeg de kritiske begreber Apache NiFi med skemaer. Denne sorte boksmodel vil ikke være en sort kasse for dig bagefter.

Unboxing Apache NiFi

Når du starter NiFi, lander du på dets webgrænseflade. Web-UI er planen, som du designer og styrer din datapipeline på.

I Nifi samler du processorer, der er forbundet via forbindelser . I eksemplet på dataforløb, der blev introduceret tidligere, er der tre processorer.

Brugergrænsefladen til NiFi-lærred er den ramme, hvor rørledningsbyggeren udvikler sig.

Forstå Nifi-terminologi

For at udtrykke dit dataforløb i Nifi skal du først mestre dets sprog. Ingen bekymringer, et par vilkår er nok til at forstå konceptet bag det.

De sorte kasser kaldes processorer, og de udveksler klumper af oplysninger ved navn FlowFiles gennem køer, der hedder forbindelser . Endelig er FlowFile Controller ansvarlig for at administrere ressourcerne mellem disse komponenter.

Lad os se på, hvordan dette fungerer under emhætten.

FlowFile

I NiFi, FlowFileer informationspakken, der bevæger sig gennem rørledningens processorer.

En FlowFile findes i to dele:

  • Attributter , som er nøgle / værdipar. For eksempel er filnavnet, filstien og en unik identifikator standardattributter.
  • Indhold , en reference til strømmen af ​​bytes, sammensætter FlowFile-indholdet.

FlowFile indeholder ikke selve dataene. Dette ville alvorligt begrænse gennemstrømningen af ​​rørledningen.

I stedet holder en FlowFile en markør, der refererer til data, der er gemt et eller andet sted i det lokale lager. Dette sted kaldes Content Repository .

For at få adgang til indholdet hævder FlowFile ressourcen fra Content Repository. De senere holder spor af den nøjagtige disk offset fra hvor indholdet er og streamer det tilbage til FlowFile.

Ikke alle processorer har brug for adgang til indholdet af FlowFile for at udføre deres operationer - for eksempel kræver det ikke at indlæse deres indhold i hukommelsen at samle indholdet af to FlowFiles.

Når en processor ændrer indholdet af en FlowFile, gemmes de tidligere data. NiFi kopierer-på-skriv, det ændrer indholdet, mens det kopieres til et nyt sted. De oprindelige oplysninger efterlades intakte i Content Repository.

Eksempel

Overvej en processor, der komprimerer indholdet af en FlowFile. Det originale indhold forbliver i indholdsopbevaringsområdet, og der oprettes en ny post til det komprimerede indhold.

Content Repository returnerer endelig referencen til det komprimerede indhold. FlowFile opdateres til at pege på de komprimerede data.

Tegningen nedenfor opsummerer eksemplet med en processor, der komprimerer indholdet af FlowFiles.

Pålidelighed

NiFi hævder at være pålidelig, hvordan er det i praksis?Attributterne for alle de FlowFiles, der aktuelt er i brug, såvel som henvisningen til deres indhold er gemt i FlowFile Repository.

Ved hvert trin i rørledningen registreres en ændring af en Flowfile først i FlowFile Repository i en log-før-log før den udføres.

For hver FlowFile, der i øjeblikket findes i systemet, gemmer FlowFile-arkivet:

  • FlowFile-attributterne
  • En markør til indholdet af FlowFile i FlowFile-arkivet
  • FlowFile-tilstanden. For eksempel: til hvilken kø Flowfilen hører på dette øjeblik.

FlowFile-arkivet giver os den mest aktuelle tilstand af strømmen; Derfor er det et kraftfuldt værktøj til at komme sig efter en udfald.

NiFi giver et andet værktøj til at spore den fulde historie for alle FlowFiles i strømmen: Proveniens Repository.

Proveniens Repository

Hver gang en FlowFile ændres, tager NiFi et øjebliksbillede af FlowFile og dens kontekst på dette tidspunkt. Navnet på dette øjebliksbillede i NiFi er en proveniensbegivenhed . Proveniensregistret registrerer proveniensbegivenheder.

Herkomst gør det muligt for os at spore dataene tilbage og opbygge den fulde forvaringskæde for hvert stykke information, der behandles i NiFi.

Ud over at tilbyde den fuldstændige slægt af dataene tilbyder Proveniens Repository også at afspille dataene fra ethvert tidspunkt.

Vent, hvad er forskellen mellem FlowFile Repository og Provenance Repository?

Ideen bag FlowFile Repository og Provenance Repository er ret ens, men de adresserer ikke det samme problem.

  • FlowFile-arkivet er en log, der kun indeholder den nyeste status for FlowFiles, der er i brug, i systemet. Det er det seneste billede af strømmen og gør det muligt hurtigt at komme sig efter en afbrydelse.
  • Proveniens Repository er på den anden side mere udtømmende, da det sporer den komplette livscyklus for hver FlowFile, der har været i strømmen.

Hvis du kun har det nyeste billede af systemet med FlowFile-arkivet, giver Proveniens Repository dig en samling fotos - en video . Du kan spole tilbage til ethvert tidspunkt i fortiden, undersøge dataene, afspille operationer fra et givet tidspunkt. Det giver en komplet afstamning af dataene.

FlowFile-processor

En processor er en sort boks, der udfører en operation. Processorer har adgang til attributterne og indholdet af FlowFile til at udføre alle slags handlinger. De giver dig mulighed for at udføre mange operationer i dataindtrængning, standard datatransformations- / valideringsopgaver og gemme disse data i forskellige datasinker.

NiFi leveres med mange processorer, når du installerer det. Hvis du ikke finder den perfekte til din brugssag, er det stadig muligt at bygge din egen processor. Skrivning af brugerdefinerede processorer er uden for dette blogindlæg.

Processorer er abstraktioner på højt niveau, der udfører en opgave. Denne abstraktion er meget praktisk, fordi den beskytter rørledningsbyggeren mod de iboende vanskeligheder ved samtidig programmering og implementeringen af ​​fejlhåndteringsmekanismer.

Processorer udsætter en grænseflade med flere konfigurationsindstillinger for at finjustere deres adfærd.

Disse processors egenskaber er det sidste link mellem NiFi og den forretningsmæssige virkelighed i dine applikationskrav.

Djævelen er i detaljerne, og rørledningsbyggere bruger det meste af deres tid på at finjustere disse egenskaber, så de passer til den forventede adfærd.

Skalering

For hver processor kan du angive antallet af samtidige opgaver, du vil køre samtidigt. På denne måde tildeler Flow Controller flere ressourcer til denne processor, hvilket øger dens kapacitet. Processorer deler tråde. Hvis en processor anmoder om flere tråde, har andre processorer færre tråde til rådighed til at udføre. Detaljer om, hvordan Flow Controller tildeler tråde, er tilgængelige her.

Vandret skalering. En anden måde at skalere på er at øge antallet af noder i din NiFi-klynge. Clustering-servere gør det muligt at øge din behandlingsfunktion ved hjælp af råvarehardware.

Procesgruppe

Denne er ligetil nu, da vi har set, hvad processorer er.

En flok processorer sammensat med deres forbindelser kan danne en procesgruppe. Du tilføjer en inputport og en outputport, så den kan modtage og sende data.

Processorgrupper er en nem måde at oprette nye processorer baseret på eksisterende.

Forbindelser

Forbindelser er køerne mellem processorer. Disse køer giver processorer mulighed for at interagere med forskellige hastigheder. Forbindelser kan have forskellige kapaciteter, ligesom der findes forskellige størrelser på vandrør.

Fordi processorer forbruger og producerer data i forskellige hastigheder afhængigt af de operationer, de udfører, fungerer forbindelser som buffere af FlowFiles.

Der er en grænse for, hvor mange data der kan være i forbindelsen. Tilsvarende, når dit vandrør er fyldt, kan du ikke tilføje vand længere, eller det løber over.

I NiFi kan du indstille grænser for antallet af FlowFiles og størrelsen på deres samlede indhold, der går gennem forbindelserne.

Hvad sker der, når du sender flere data, end forbindelsen kan håndtere?

Hvis antallet af FlowFiles eller datamængden går over den definerede tærskel, anvendes modtryk . Flow Controller planlægger ikke den tidligere processor til at køre igen, før der er plads i køen.

Lad os sige, at du har en grænse på 10.000 FlowFiles mellem to processorer. På et eller andet tidspunkt har forbindelsen 7.000 elementer i sig. Det er ok, da grænsen er 10 000. P1 kan stadig sende data gennem forbindelsen til P2 .

Lad os sige, at processor 1 sender 4000 nye FlowFiles til forbindelsen.

7 0000 + 4000 = 11 000 → Vi går over forbindelsestærsklen på 10.000 FlowFiles.

Grænserne er bløde grænser, hvilket betyder at de kan overskrides. Når først den er, den forrige processor, planlægges ikke P1 , før stikket går tilbage under tærskelværdien - 10.000 FlowFiles.

Dette forenklede eksempel giver det store billede af, hvordan modtryk fungerer.

Du vil indstille forbindelsestærskler, der passer til volumen og hastighed på de data, der skal håndteres. Husk de fire Vs .

Ideen om at overskride en grænse kan lyde underlig. Når antallet af FlowFiles eller de tilknyttede data går ud over tærsklen, udløses en swap-mekanisme.

For et andet eksempel på modtryk kan denne mailtråd hjælpe.

Prioritering af FlowFiles

Stikkene i NiFi er meget konfigurerbare. Du kan vælge, hvordan du prioriterer FlowFiles i køen for at bestemme, hvilken der skal behandles næste.

Blandt den tilgængelige mulighed er der for eksempel ordren First In First Out - FIFO. Men kan du endda bruge en egenskab ved dit valg fra FlowFile at prioritere indkommende pakker.

Flow Controller

Flow Controller er limen, der bringer alt sammen. Det tildeler og administrerer tråde til processorer. Det er det, der udfører dataflowet.

Flow Controller gør det også muligt at tilføje Controller Services.

Disse tjenester letter administrationen af ​​delte ressourcer som databaseforbindelser eller cloud-udbyders legitimationsoplysninger. Controller-tjenester er dæmoner. De kører i baggrunden og giver konfiguration, ressourcer og parametre, som processorer kan udføre.

For eksempel kan du bruge en AWS-legitimationsudbydertjeneste for at gøre det muligt for dine tjenester at interagere med S3-skovle uden at skulle bekymre dig om legitimationsoplysningerne på processorniveau.

Ligesom med processorer er en lang række controller-tjenester tilgængelige uden for boksen.

Du kan tjekke denne artikel for mere indhold om controllertjenesterne.

Konklusion og opfordring til handling

I løbet af denne artikel diskuterede vi NiFi, en dataløsning til virksomheder. Du har nu en stærk forståelse af, hvad NiFi gør, og hvordan du kan udnytte dets datarutefunktioner til dine applikationer.

Hvis du læser dette, tillykke! Du ved nu mere om NiFi end 99,99% af verdens befolkning.

Øvelse gør mester. Du behersker alle de krævede koncepter for at begynde at bygge din egen pipeline. Gør det simpelt; få det til at fungere først.

Her er en liste over spændende ressourcer, jeg har samlet ud over min erhvervserfaring til at skrive denne artikel.

Ressourcer?

Det større billede

Fordi design af datarørledning i et komplekst økosystem kræver færdigheder inden for flere områder, anbefaler jeg stærkt bogen Designing Data-Intensive Applicationsfra Martin Kleppmann. Det dækker det grundlæggende.

  • Et snydeark med alle referencer, der er citeret i Martins bog, er tilgængeligt på hans Github-repo.

Dette snydeark er et godt sted at starte, hvis du allerede ved, hvilken type emne du gerne vil studere dybtgående, og du vil finde kvalitetsmaterialer.

Alternativer til Apache Nifi

Der findes andre dataflowløsninger.

Åben kilde:

  • Streamsets svarer til NiFi; en god sammenligning er tilgængelig på denne blog

De fleste af de eksisterende cloududbydere tilbyder dataflowløsninger. Disse løsninger integreres let med andre produkter, du bruger fra denne cloududbyder. På samme tid binder det dig solidt til en bestemt leverandør.

  • Azure Data Factory, en Microsoft-løsning
  • IBM har sin InfoSphere DataStage
  • Amazon foreslår et værktøj ved navn Data Pipeline
  • Google tilbyder sit dataforløb
  • Alibaba sky introducerer en service DataWorks med lignende funktioner

NiFi-relaterede ressourcer

  • Den officielle Nifi-dokumentation og især Nifi-sektionen er guldminer.
  • Tilmelding til Nifi-brugeres postliste er også en god måde at blive informeret på - for eksempel forklarer denne samtale modtryk.
  • Hortonworks, en udbyder af big data-løsninger, har et community-websted fuldt af engagerende ressourcer og vejledning til Apache Nifi.

    - Denne artikel går i dybden om stik, brug af dynger og modtryk.

    - Denne deler de bedste fremgangsmåder ved dimensionering, når du implementerer en NiFi-klynge.

  • NiFi-bloggen distillerer mange indsigter om NiFi-brugsmønstre samt tips til, hvordan man bygger rørledninger.
  • Kravsmønster forklaret
  • Teorien bag Apache Nifi er ikke ny, Seda der henvises til i Nifi Doc er yderst relevant

    - Matt walisisk. Berkeley. SEDA: En arkitektur for veludstyrede, skalerbare internettjenester [online]. Hentet: 21. april 2019, fra //www.mdw.la/papers/seda-sosp01.pdf