Apache NIFI - Praktikan eginbideen ikuspegi laburra

Sarrera

Gertatu zen nire egungo lantokian teknologia hau ezagutu behar nuela. Aurrekari txiki batekin hasiko naiz. Hurrengo bileran, gure taldeari integrazioa sortu behar genuela esan zioten sistema ezaguna. Integrazioarekin esan nahi zen sistema ezagun honek eskaerak bidaliko zizkigula HTTP bidez amaiera-puntu zehatz batera, eta guk, bitxia bada ere, erantzunak SOAP mezu moduan bidaliko genituzke. Dena badirudi sinplea eta hutsala. Hortik ondorioztatzen da behar duzula...

Task

Sortu 3 zerbitzu. Horietako lehena Datu-basea Eguneratzeko Zerbitzua da. Zerbitzu honek, hirugarren sistema batetik datu berriak iristen direnean, datu-baseko datuak eguneratzen ditu eta CSV formatuan fitxategi bat sortzen du hurrengo sistemara transferitzeko. Bigarren zerbitzuaren amaiera-puntua deitzen da: FTP Garraio Zerbitzua, transferitutako fitxategia jaso, balioztatu eta FTP bidez fitxategien biltegian jartzen duena. Hirugarren zerbitzuak, kontsumitzaileen datuak transferitzeko zerbitzuak, lehen biekin modu asinkronoan funtzionatzen du. Hirugarrenen kanpoko sistema baten eskaera jasotzen du goian aipatutako fitxategia jasotzeko, prest erantzun fitxategia hartzen du, aldatzen du (id-a, deskribapena, linkToFile eremuak eguneratzen ditu) eta erantzuna SOAP mezu baten moduan bidaltzen du. Hau da, irudi orokorra honakoa da: lehen bi zerbitzuek eguneratzeko datuak iristen direnean hasten dira lanean soilik. Hirugarren zerbitzuak etengabe funtzionatzen du informazio kontsumitzaile asko daudelako, minutuko 1000 datu-eskaera inguru. Zerbitzuak etengabe daude eskuragarri eta haien instantziak ingurune ezberdinetan kokatzen dira, hala nola proba, demo, aurreprodukzioa eta produkzioa. Jarraian, zerbitzu hauek funtzionatzen duten eskema bat dago. Utzidazu berehala argitzen xehetasun batzuk sinplifikatu egin direla alferrikako konplexutasuna ekiditeko.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Sakontze Teknikoa

Arazoaren konponbidea planifikatzerakoan, lehenik eta behin Javan aplikazioak egitea erabaki genuen Spring frameworka, Nginx balancer, Postgres datu-basea eta beste gauza tekniko eta ez hain teknikoak erabiliz. Irtenbide tekniko bat garatzeko garaiak arazo hau konpontzeko beste ikuspegi batzuk kontuan hartzeko aukera eman zigunez, gure begirada Apache NIFI teknologian jarri zen, zenbait zirkulutan modan dagoena. Berehala esango dut teknologia honek 3 zerbitzu hauetaz ohartzeko aukera eman zigula. Artikulu honetan fitxategiak garraiatzeko zerbitzu baten garapena eta kontsumitzaileari datuak transferitzeko zerbitzu baten garapena deskribatuko da, baina artikulua erabilgarria bada, datu-basean datuak eguneratzeko zerbitzuari buruz idatziko dut.

Zer da?

NIFI datuen karga eta prozesamendu paralelo azkarra egiteko arkitektura banatua da, iturri eta eraldaketarako plugin kopuru handia, konfigurazioen bertsioa eta askoz gehiago. Bono polita da erabiltzeko oso erraza dela. Prozesu hutsalak, hala nola getFile, sendHttpRequest eta beste batzuk karratu gisa irudika daitezke. Karratu bakoitzak prozesu bat adierazten du, eta horren elkarrekintza beheko irudian ikus daiteke. Prozesuaren konfigurazio-interakzioei buruzko dokumentazio zehatzagoa idatzi da Hemen , errusieraz hitz egiten dutenentzat - Hemen. Dokumentazioak ezin hobeto deskribatzen du NIFI nola deskonprimitu eta exekutatu, baita prozesuak nola sortu ere, karratu gisa ezagutzen direnak.
Artikulu bat idazteko ideia luze bilatu eta jasotako informazioa zerbait kontziente batean egituratu ondoren jaio zen, baita etorkizuneko garatzaileei bizitza apur bat errazteko gogoa ere.

Adibidea

Laukiek elkarren artean nola elkarreragiten duten adibide bat hartzen da kontuan. Eskema orokorra nahiko sinplea da: HTTP eskaera bat jasotzen dugu (teorian, eskaeraren gorputzean fitxategi batekin. NIFIren gaitasunak erakusteko, adibide honetan eskaerak fitxategi bat tokiko biltegiratzetik fitxategi bat jasotzeko prozesua abiarazten du. ), ondoren eskaera jaso dela dioen erantzuna bidaltzen dugu, paraleloki FH-tik fitxategi bat jasotzeko prozesua eta ondoren FTP bidez FHra eramateko prozesua. Merezi du argitzea prozesuek elkarri eragiten diotela flowFile delakoaren bidez. Hau da NIFIn atributuak eta edukia gordetzen dituen oinarrizko entitatea. Edukia korronte fitxategiak adierazten duen datuak dira. Hau da, gutxi gorabehera, lauki batetik fitxategi bat jaso eta beste batera transferitzen baduzu, edukia zure fitxategia izango da.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Ikus dezakezunez, irudi honek prozesu orokorra erakusten du. HandleHttpRequest - eskaerak onartzen ditu, ReplaceText - erantzunaren gorputza sortzen du, HandleHttpResponse - erantzuna bidaltzen du. FetchFile - fitxategi bat biltegiratze batetik jasotzen du, PutSftp karratura transferitzen du - fitxategi hau FTP-n jartzen du, zehaztutako helbidean. Orain gehiago prozesu honi buruz.

Kasu honetan, eskaera guztiaren hasiera da. Ikus ditzagun bere konfigurazio-parametroak.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Hemen dena nahiko hutsala da StandardHttpContextMap izan ezik - eskaerak bidaltzeko eta jasotzeko aukera ematen duen zerbitzu moduko bat da. Xehetasun gehiagorekin eta adibideekin ere, ikus dezakezu - Hemen

Jarraian, ikus ditzagun ReplaceText karratuaren konfigurazio-parametroak. Merezi du arreta jartzea ReplacementValue - hau da erabiltzaileari erantzun moduan itzuliko zaiona. Ezarpenetan erregistro-maila doitu dezakezu, {non deskonprimitu duzun nifi}/nifi-1.9.2/logs erregistroak ikus ditzakezu, hutsegite/arrakasta parametroak ere badaude - parametro hauetan oinarrituta prozesua osorik erregulatu dezakezu. . Hau da, testu-prozesamendu arrakastatsua izanez gero, erabiltzaileari erantzuna bidaltzeko prozesua deituko da, eta beste kasu batean arrakastarik gabeko prozesua erregistratuko dugu.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

HandleHttpResponse propietateetan ez dago ezer interesgarririk erantzun bat behar bezala sortzen denean egoera izan ezik.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Eskaera eta erantzuna ordenatu ditugu; goazen fitxategia jaso eta FTP zerbitzarian jartzera. FetchFile - fitxategi bat jasotzen du ezarpenetan zehaztutako bidetik eta hurrengo prozesura pasatzen du.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Eta gero PutSftp karratuak - fitxategia fitxategien biltegian jartzen du. Behean konfigurazio-parametroak ikus ditzakegu.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Merezi du arreta jartzea plaza bakoitza abian jarri behar den prozesu bereizia dela. Pertsonalizazio konplexurik behar ez duen adibiderik errazena aztertu dugu. Jarraian, prozesua apur bat konplikatuagoa ikusiko dugu, non zirrikietan apur bat idatziko dugun.

Adibide konplexuagoa

Kontsumitzaileari datuak transferitzeko zerbitzua apur bat korapilatsuagoa izan zen SOAP mezua aldatzeko prozesuaren ondorioz. Prozesu orokorra beheko irudian ageri da.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Hemen ere ideia ez da bereziki korapilatsua: kontsumitzailearen eskaera bat jaso genuen datuak behar zituela, erantzun bat bidali genion mezu bat jaso zuela, erantzun-fitxategia jasotzeko prozesua hasi, gero logika jakin batekin editatu eta gero fitxategia kontsumitzaileari transferitu zion SOAP mezu baten moduan zerbitzariari.

Uste dut goian ikusi ditugun lauki horiek berriro deskribatu beharrik ez dagoela; goazen zuzenean berrietara. Fitxategiren bat editatu behar baduzu eta OrdezkatuText motako karratu arruntak ez badira egokiak, zure gidoia idatzi beharko duzu. Hau ExecuteGroogyScript karratua erabiliz egin daiteke. Bere ezarpenak behean aurkezten dira.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Bi aukera daude gidoia karratu honetan kargatzeko. Lehenengoa script batekin fitxategi bat deskargatzea da. Bigarrena scriptBody-n script bat sartuz da. Nik dakidala, executeScript karratuak hainbat hizkuntza onartzen ditu; horietako bat groovy da. Java garatzaileei hutsik egingo diet - ezin duzu java-n scriptik idatzi horrelako laukietan. Benetan nahi dutenentzat, zure karratu pertsonalizatua sortu eta NIFI sistemara gehitu behar duzu. Operazio hau guztia danbolinarekin dantza luze samar batez lagunduta dago, artikulu honetan landuko ez duguna. Hizkuntza txukuna aukeratu nuen. Jarraian, SOAP mezu batean IDa pixkanaka eguneratzen duen proba-script bat dago. Garrantzitsua da kontuan hartzea. FlowFile-tik fitxategia hartu eta eguneratzen duzu, ez ahaztu berriro jarri behar duzula, eguneratuta. Aipatzekoa da, halaber, liburutegi guztiak ez daudela sartzen. Gerta daiteke oraindik liburuetako bat inportatu behar izatea. Beste alde txar bat karratu honetako gidoia nahiko zaila dela arazketa da. NIFI JVMra konektatzeko eta arazketa-prozesua hasteko modu bat dago. Pertsonalki, tokiko aplikazio bat abiarazi nuen eta saioko fitxategi bat jasotzea simulatu nuen. Lokalean arazketa ere egin nuen. Script bat kargatzean agertzen diren akatsak nahiko errazak dira Googlerentzat eta NIFIk berak idazten ditu erregistroan.

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)
}

Egia esan, hor amaitzen da plazaren pertsonalizazioa. Ondoren, eguneratutako fitxategia karratura transferitzen da, fitxategia zerbitzarira bidaltzeaz arduratzen dena. Jarraian, karratu honen ezarpenak daude.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

SOAP mezu bat transmititzeko metodoa deskribatzen dugu. Non idazten dugu. Ondoren, hau SOAP dela adierazi behar duzu.

Apache NIFI - Praktikan eginbideen ikuspegi laburra

Gehitu hainbat propietate, hala nola ostalaria eta ekintza (soapAction). Gorde eta egiaztatzen dugu. SOAP eskaerak bidaltzeko xehetasun gehiago ikus ditzakezu Hemen

NIFI prozesuak erabiltzeko hainbat aukera aztertu ditugu. Nola elkarreragiten dute eta zein da haien benetako onura? Kontuan hartutako adibideak probakoak dira eta borrokan benetan gertatzen denaren apur bat desberdinak dira. Artikulu hau garatzaileentzako apur bat erabilgarria izatea espero dut. Eskerrik asko zure arretagatik. Galderarik baduzu, idatzi. Saiatuko naiz erantzuten.

Iturria: www.habr.com

Gehitu iruzkin berria