Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Aféierung

Et ass esou geschitt, datt ech op menger aktueller Aarbechtsplaz mat dëser Technologie kennenzeléieren. Ech fänke mat e bëssen Hannergrond un. Op der nächster Versammlung krut eis Team gesot datt mir Integratioun mat bekannt System. Mat Integratioun war et gemengt datt dëse bekannte System eis Ufroen iwwer HTTP op e spezifeschen Endpunkt schéckt, a mir, komesch genuch, Äntwerten a Form vun engem SOAP Message zréckschécken. Alles schéngt einfach an trivial. Aus dësem folgt datt Dir braucht ...

Objective

Schafen 3 Servicer. Déi éischt vun hinnen ass den Datebank Update Service. Dëse Service, wann nei Donnéeën vun engem Drëtte-Partei-System ukommen, aktualiséiert d'Daten an der Datebank a generéiert eng Datei am CSV-Format fir se op den nächste System ze transferéieren. Den Endpunkt vum zweete Service gëtt genannt - de FTP Transport Service, deen déi transferéiert Datei kritt, validéiert et a setzt se an eng Dateilagerung iwwer FTP. Den drëtte Service, de Konsumentdatentransferdéngscht, funktionnéiert asynchron mat deenen zwee éischten. Et kritt eng Ufro vun engem externen Drëtt-Partei-System fir de Fichier uewen diskutéiert ze kréien, hëlt déi fäerdeg Äntwertdatei, ännert se (aktualiséiert d'ID, Beschreiwung, LinkToFile Felder) a schéckt d'Äntwert a Form vun engem SOAP Message. Dat ass, d'Gesamtbild ass wéi follegt: déi éischt zwee Servicer fänken hir Aarbecht nëmmen un, wann d'Daten fir d'Aktualiséierung ukomm sinn. Den drëtte Service funktionnéiert stänneg well et vill Informatiounsverbraucher sinn, ongeféier 1000 Ufroen fir Daten pro Minutt. Servicer si stänneg verfügbar an hir Instanzen sinn a verschiddenen Ëmfeld lokaliséiert, sou wéi Test, Demo, Pre-Produktioun a Prod. Drënner ass en Diagramm wéi dës Servicer funktionnéieren. Loosst mech direkt klären datt e puer Detailer vereinfacht goufen fir onnéideg Komplexitéit ze vermeiden.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Technesch Deepening

Wann Dir eng Léisung fir de Problem plangt, hu mir fir d'éischt décidéiert fir Uwendungen am Java ze maachen mat dem Spring Framework, Nginx Balancer, Postgres Datebank an aner technesch an net sou technesch Saachen. Zënter der Zäit fir eng technesch Léisung z'entwéckelen erlaabt eis aner Approche fir dëse Problem ze léisen, eise Bléck op d'Apache NIFI Technologie gefall, déi a bestëmmte Kreesser moudesch ass. Ech wäert direkt soen datt dës Technologie eis erlaabt huet dës 3 Servicer ze bemierken. Dësen Artikel wäert d'Entwécklung vun engem Fichier Transport Service an engem Daten Transfermaart Service un de Konsument beschreiwen, mä wann den Artikel nëtzlech ass, wäert ech schreiwen iwwer de Service fir d'Aktualiséierung vun Daten an der Datebank.

Wat ass et?

NIFI ass eng verdeelt Architektur fir séier parallel Luede a Veraarbechtung vun Daten, eng grouss Zuel vu Plugins fir Quellen an Transformatiounen, Versioun vu Konfiguratiounen a vill méi. E flotte Bonus ass datt et ganz einfach ass ze benotzen. Trivial Prozesser wéi getFile, sendHttpRequest an anerer kënnen als Quadrate vertruede ginn. All Quadrat representéiert e Prozess, d'Interaktioun vun deem kann an der Figur hei ënnen gesi ginn. Méi detailléiert Dokumentatioun iwwer Prozess Setup Interaktiounen gouf geschriwwen hei , fir déi, déi russesch schwätzen - hei. D'Dokumentatioun beschreift perfekt wéi een NIFI auspackt an ausféiert, souwéi wéi Prozesser erstallt ginn, och bekannt als Quadraten
D'Iddi fir en Artikel ze schreiwen ass gebuer no enger laanger Sich an der Strukturéierung vun der kritt Informatioun an eppes bewosst, wéi och de Wonsch d'Liewen e bësse méi einfach fir zukünfteg Entwéckler ze maachen.

Beispill:

E Beispill vu wéi Quadrate matenee interagéieren gëtt berücksichtegt. Den allgemenge Schema ass ganz einfach: Mir kréien eng HTTP-Ufro (An der Theorie, mat engem Fichier am Kierper vun der Ufro. Fir d'Fähigkeiten vun NIFI ze demonstréieren, an dësem Beispill fänkt d'Ufro de Prozess un fir e Fichier vun der lokaler Dateilagerung ze kréien. ), da schécken mir eng Äntwert zréck, datt d'Ufro empfaangen ass, parallel de Prozess fir e Fichier vun FH ze kréien an dann de Prozess fir se iwwer FTP op FH ze réckelen. Et ass derwäert ze klären datt Prozesser matenee interagéieren duerch de sougenannte FlowFile. Dëst ass d'Basis Entitéit am NIFI déi Attributer an Inhalt späichert. Inhalt ass d'Donnéeën déi duerch d'Streamdatei vertruede sinn. Dat ass, ongeféier geschwat, wann Dir e Fichier vun engem Quadrat kritt an en op en aneren transferéiert, ass den Inhalt Äre Fichier.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Wéi Dir kënnt gesinn, weist dëst Bild den allgemenge Prozess. HandleHttpRequest - akzeptéiert Ufroen, ReplaceText - generéiert eng Äntwert Kierper, HandleHttpResponse - schéckt eng Äntwert. FetchFile - kritt e Fichier vun enger Dateilagerung, transferéiert se op de Quadrat PutSftp - setzt dës Datei op FTP, op der spezifizéierter Adress. Elo méi iwwer dëse Prozess.

An dësem Fall ass d'Ufro den Ufank vun allem. Loosst eis seng Konfiguratiounsparameter kucken.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Alles hei ass zimmlech trivial mat Ausnam vu StandardHttpContextMap - dëst ass eng Aart Service, déi Iech erlaabt Ufroen ze schécken an ze kréien. Méi detailléiert a souguer mat Beispiller, kënnt Dir gesinn - hei

Als nächst kucke mer d'ReplaceText Konfiguratiounsparameter vum Quadrat. Et ass derwäert oppassen op ReplacementValue - dat ass wat de Benotzer a Form vun enger Äntwert zréckginn. An Astellunge kënnt Dir den Niveau vum Logbuch upassen, Dir kënnt d'Logbicher gesinn {wou Dir nifi ausgepackt hutt}/nifi-1.9.2/Logbicher, et ginn och Feeler-/Erfollegparameter - baséiert op dëse Parameteren kënnt Dir de Prozess als Ganzt reguléieren . Dat ass, am Fall vun erfollegräichen Textveraarbechtung gëtt de Prozess fir eng Äntwert op de Benotzer ze schécken, an an engem anere Fall wäerte mir einfach den net erfollegräiche Prozess aloggen.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Et gëtt näischt besonnesch interessant an den HandleHttpResponse Eegeschaften ausser de Status wann eng Äntwert erfollegräich erstallt gëtt.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Mir hunn d'Ufro an d'Äntwert zortéiert - loosst eis weidergoen fir d'Datei ze kréien an se op de FTP-Server ze setzen. FetchFile - kritt e Fichier op de Wee, deen an den Astellunge spezifizéiert ass, a gitt se op den nächste Prozess.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

An dann de PutSftp Quadrat - setzt d'Datei an der Dateilagerung. Mir kënnen d'Konfiguratiounsparameter hei ënnen gesinn.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Et ass derwäert opmierksam ze maachen datt all Quadrat e separaten Prozess ass dee lancéiert muss ginn. Mir hunn dat einfachst Beispill gekuckt dat keng komplex Personnalisatioun erfuerdert. Als nächst wäerte mir de Prozess e bësse méi komplizéiert kucken, wou mir e bëssen op d'Rillen schreiwen.

Méi komplex Beispill

Den Datenübertragungsservice un de Konsument huet sech e bësse méi komplizéiert erausgestallt wéinst dem Prozess vun der Ännerung vun der SOAP Message. Den allgemenge Prozess gëtt an der Figur hei ënnen gewisen.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Hei ass d'Iddi och net besonnesch komplizéiert: mir kruten eng Demande vum Konsument datt hien Donnéeën brauch, eng Äntwert geschéckt datt hien e Message kritt huet, de Prozess vun der Empfang vun der Äntwertdatei ugefaang, duerno mat enger gewësser Logik geännert, an dann huet d'Datei un de Konsument a Form vun engem SOAP Message un de Server transferéiert.

Ech mengen, et ass net néideg fir dës Quadraten erëm ze beschreiwen, déi mir hei uewen gesinn hunn - loosst eis direkt op déi nei goen. Wann Dir eng Datei z'änneren musst an déi gewéinlech ReplaceText-Typ Plaatzen net gëeegent sinn, musst Dir Ären eegene Skript schreiwen. Dëst kann mam ExecuteGroogyScript Quadrat gemaach ginn. Seng Astellunge ginn ënnendrënner presentéiert.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Et ginn zwou Méiglechkeeten fir de Skript op dëse Quadrat ze lueden. Déi éischt ass andeems Dir eng Datei mat engem Skript erofluet. Déi zweet ass andeems Dir e Skript an scriptBody setzt. Sou wäit wéi ech weess, ënnerstëtzt den executeScript Square verschidde Sproochen - eng vun hinnen ass groovy. Ech wäert Java Entwéckler enttäuschen - Dir kënnt net Scripten an Java an esou Plazen schreiwen. Fir déi, déi wierklech wëllen, musst Dir Ären eegene personaliséierte Quadrat erstellen an et an den NIFI System addéieren. Dës ganz Operatioun gëtt begleet vun engem zimlech laangen Danz mat enger Tambourin, mat deem mir net an dësem Artikel beschäftegen. Ech hunn déi groovy Sprooch gewielt. Drënner ass en Testskript dat einfach d'ID inkrementell an engem SOAP Message aktualiséiert. Et ass wichteg ze notéieren. Dir huelt d'Datei aus flowFile an aktualiséiert se, vergiesst net datt Dir se dohinner setzt, aktualiséiert. Et ass och ze bemierken datt net all Bibliothéike mat abegraff sinn. Et ka geschéien datt Dir nach ëmmer eng vun de Libs importéiere musst. En aneren Nodeel ass datt d'Skript op dësem Quadrat zimlech schwéier ass ze debuggen. Et gëtt e Wee fir mam NIFI JVM ze verbannen an den Debuggingprozess unzefänken. Perséinlech hunn ech eng lokal Applikatioun lancéiert a simuléiert eng Datei aus der Sessioun ze kréien. Ech hunn och lokal Debugging gemaach. Feeler, déi beim Luede vun engem Skript optrieden, si ganz einfach fir Google a gi vum NIFI selwer an de Logbicher geschriwwen.

import org.apache.commons.io.IOUtils
import groovy.xml.XmlUtil
import java.nio.charset.*
import groovy.xml.StreamingMarkupBuilder

def flowFile = session.get()
if (!flowFile) return
try {
    flowFile = session.write(flowFile, { inputStream, outputStream ->
        String result = IOUtils.toString(inputStream, "UTF-8");
        def recordIn = new XmlSlurper().parseText(result)
        def element = recordIn.depthFirst().find {
            it.name() == 'id'
        }

        def newId = Integer.parseInt(element.toString()) + 1
        def recordOut = new XmlSlurper().parseText(result)
        recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId

        def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()
        outputStream.write(res.getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
     session.transfer(flowFile, REL_SUCCESS)
}
catch(Exception e) {
    log.error("Error during processing of validate.groovy", e)
    session.transfer(flowFile, REL_FAILURE)
}

Eigentlech ass dëst wou d'Personaliséierung vum Quadrat endet. Als nächst gëtt déi aktualiséiert Datei op de Quadrat transferéiert, deen verantwortlech ass fir d'Datei op de Server ze schécken. Drënner sinn d'Astellunge fir dëse Quadrat.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Mir beschreiwen d'Method duerch déi e SOAP Message iwwerdroe gëtt. Mir schreiwen wou. Als nächst musst Dir uginn datt dëst SOAP ass.

Apache NIFI - E kuerzen Iwwerbléck iwwer Features an der Praxis

Füügt verschidde Eegeschafte wéi Host an Action (SeefAction) derbäi. Mir späicheren a kontrolléieren. Dir kënnt méi Detailer gesinn wéi Dir SOAP Ufroe schéckt hei

Mir hunn e puer Optiounen gekuckt fir NIFI Prozesser ze benotzen. Wéi interagéiere se a wat ass hire wierkleche Virdeel? D'Beispiller considéréiert sinn Tester a si liicht anescht wéi dat wat tatsächlech am Kampf geschitt. Ech hoffen dësen Artikel wäert e bëssen nëtzlech fir Entwéckler sinn. Merci fir är Opmierksamkeet. Wann Dir Froen hutt, schreift. Ech probéieren ze äntweren.

Source: will.com

Setzt e Commentaire