Een introductie in Apache NiFi

/ Blog / Een introductie in Apache NiFi
Een introductie in Apache NiFi


Marcel-Jan Krijgsman

Voor een aantal Open Circle collega’s is Apache NiFi niet meer volledig nieuw maar omdat het een relatief nieuw product betreft dat nog in ontwikkeling is leek het me goed om er vanaf de basis in te duiken. Daarnaast komt NiFi steeds vaker naar voren bij opdrachtgevers. In deze blog neem ik je mee in mijn eerste ervaringen met Apache NiFi.

Er zijn erg veel data gerelateerde Apache producten beschikbaar en het is lastig om ze allemaal te volgen. Er zijn verschillende producten voor data “streaming” of “flowing”: Kafka, Storm, Flink en NiFi. Natuurlijk hebben al deze producten een documentatie maar voor een buitenstaander klinken de beschrijvingen als “enterprise schaalbare streaming oplossingen”, iets wat velen weinig zal zeggen.

DataWorks Summit München

Bij de DataWorks Summit in München afgelopen maand volgde ik een crash course in Apache NiFi en ik was behoorlijk onder de indruk. Vanuit mezelf ben ik meer van de command line maar deze grafische interface ziet er erg gelikt uit en het is fantastisch wat je allemaal kan doen om uit te vinden waar je data naartoe gaat met NiFi. Omdat ik zo onder de indruk was zal ik binnenkort ook een interne workshop geven voor mijn collega’s hier bij Open Circle Solutions.

Apache NiFi

Met NiFi kun je programmeren waar je data vandaan komt, wat ermee gebeurt en waar deze naartoe gezonden wordt. Bijvoorbeeld; er komt wat data binnen in JSON formaat vanaf IoT apparaten, mobiele apps sturen een XML, er zijn server logs en daarnaast importeer je Twitter data. Dit zijn dan je “data producenten” en je wil dat deze data naar verschillende “data consumenten”, zoals databases, Hadoop clusters en applicaties stroomt. Met NiFi kun je beschrijven waar data vandaan komt, geconverteerd wordt, gesplit wordt en hoe dit naar de consument gezonden wordt. Dit wordt de “data routing” genoemd.

Hieronder zie je hoe dit eruit ziet. Dit werkt met drag and drop processors om data te ontvangen, converteren en verzenden.

nifi_interface0

Er zijn vele soorten processors. Je kunt bestanden ontvangen, lezen van Twitter of Kafka, SQL op een database draaien, (un)compressen van bestanden, data verzenden via SFTP of bestanden verwijderen in Hadoop. Er zijn zelfs zoveel processors dat er een zoekveld is om deze snel te vinden. Hieronder zocht ik op “DB”.

nifi_interface2

Hieronder zie je een resultaat van een demo die ik gedaan heb. De grotere witte rechthoeken in de afbeelding zijn processors. De kleinere rechthoeken die met lijnen verbonden zijn in de processors beschrijven de connectie. Linksboven start mijn flow met een processor type genaamd “GetFile”, deze gebruik ik om een zip bestand te lezen. Dit maakt een connectie met een UnpackContent processor om de XML bestanden in deze zip bestanden uit te pakken.

nifi_interface1

Om ervoor te zorgen dat ik de rest van mijn systeem niet overbelast heb ik een ControlRate processor toegevoegd die de hoeveelheid bestanden of bytes dat verzonden wordt beperkt. Van daaruit lezen de blauwe onderdelen de XML en verkrijgen ze de attributen die ik wil en verzenden deze naar andere processors.

Een van de sterkste punten van NiFi is de debug informatie. Stel dat bepaalde data wel doorkomt maar niet correct verwerkt wordt, je kunt een processor dan inspecteren en “Data Provenance” kiezen.

nifi_interface3

Hier zie je al de recente “flow files” die doorkomen. Je hebt hier een zoekoptie om voor specifieke data te zoeken.

nifi_interface4

Stel dat ik bijvoorbeeld wil weten hoe deze data doorgekomen is. Met de pijltjes rechts in beeld kun je zien waar de data naartoe gegaan is. Dit heet de “data lineage”.

nifi_interface6

Hier kun je nog meer data verkrijgen over hoeveel tijd het gekost heeft of… welke attributen de data had.

Hier zag ik de URL die door een eerdere processor gevormd is en kon ik dus proberen of er iets mis mee was. Het bleek dat Google had gemeld dat ik mijn dagelijkse quotum voor de Google Places API bereikt had. Hierdoor werkte de rest van mijn flow niet correct.

nifi_interface7

Voor goede beveiliging is weten waar je data is het belangrijkste. Met NiFi kun je dit vrij goed inrichten, het is tenslotte door de NSA ontwikkeld! Ik heb nog geen ervaring met de performance of splitsing van taken wat betreft NiFi maar daar kom ik in een latere blogpost op terug.

Wil je zelf NiFi ook eens uitproberen? Dat kan! Bijvoorbeeld met de Hortonworks Data Platform sandbox (beschikbaar als VirtualBox, VMWare of Docker image) en de Apache NiFi crash course. Zelf ben ik een tiental uren bezig geweest met het volgen van de tutorials 0,1,2 en 3 maar met mijn nieuwe blog waarin ik je door deze tutorials leid lukt het je hopelijk in ongeveer 4uur!

×