Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Pîrozbahiyê

Wusa çêbû ku li cîhê xebata min a niha ez neçar bûm ku bi vê teknolojiyê re nas bikim. Ez ê bi paşnavek piçûk dest pê bikim. Di civîna pêş de, ji tîmê me re hate gotin ku pêdivî ye ku em pê re entegrasyonê çêbikin sîstema naskirî. Ji hêla entegrasyonê ve tê vê wateyê ku ev pergala naskirî dê bi riya HTTP-ê ji me re daxwazan bişîne xalek dawînek taybetî, û em, ecêb e, dê bersivên di forma peyamek SOAP-ê de bişînin. Her tişt hêsan û sivik xuya dike. Ji vê yekê derdikeve ku hûn hewce ne ...

Armanc

3 karûbaran biafirînin. Yekem ji wan Karûbarê Nûvekirina Database ye. Ev karûbar, dema ku daneyên nû ji pergalek sêyemîn tê, daneyên di databasê de nûve dike û pelek di forma CSV de çêdike da ku wê veguhezîne pergala din. Xala dawî ya karûbarê duyemîn jê re tê gotin - Karûbarê Veguhastina FTP, ku pelê veguhestî distîne, wê piştrast dike û bi navgîniya FTP ve di hilanîna pelê de dihêle. Karûbarê sêyemîn, karûbarê veguheztina daneya xerîdar, bi du yên yekem re asynchronous dixebite. Ew daxwazek ji pergalek derveyî ya sêyemîn werdigire ku pelê ku li jor hatî nîqaş kirin werbigire, pela bersivê ya amade digire, wê diguhezîne (nasname, danasîn, zeviyên linkToFile nûve dike) û bersivê di forma peyamek SOAP de dişîne. Ango, wêneya giştî wiha ye: du karûbarên yekem tenê gava ku daneyên nûvekirinê gihîştin dest bi xebata xwe dikin. Karûbarê sêyem bi domdarî dixebite ji ber ku gelek xerîdarên agahdarî hene, bi qasî 1000 daxwazên daneyê di hûrdemê de. Karûbar bi domdarî peyda dibin û mînakên wan di hawîrdorên cihêreng de, wekî ceribandin, demo, pêş-hilberîn û prod. Li jêr diagramek e ku ev karûbar çawa dixebitin. Bila ez tavilê zelal bikim ku hin hûrgulî hatine hêsan kirin da ku ji tevliheviya nehewce dûr nekevin.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Kûrbûna Teknîkî

Dema ku çareseriyek ji pirsgirêkê re plan kirin, me pêşî biryar da ku em di Java-yê de bi karanîna çarçoveya Spring, balansa Nginx, databasa Postgres û tiştên din ên teknîkî û ne ewqas teknîkî serlêdanan bikin. Ji ber ku dema pêşxistina çareseriyek teknîkî rê da me ku em nêzîkatiyên din ji bo çareserkirina vê pirsgirêkê bifikirin, çavê me ket teknolojiya Apache NIFI, ku di hin derdoran de moda ye. Ez ê tavilê bibêjim ku vê teknolojiyê rê da me ku em van 3 karûbaran haydar bikin. Ev gotar dê pêşkeftina karûbarek veguheztina pelan û karûbarek veguheztina daneyê ji xerîdar re diyar bike, lê heke gotar bikêr be, ez ê li ser karûbarê nûvekirina daneya di databasê de binivîsim.

Çi ye?

NIFI mîmariyek belavkirî ye ji bo barkirin û pêvajoyek bilez a paralel, hejmareke mezin pêvekan ji bo çavkanî û veguherînan, guhertoya veavakirinê û hêj bêtir. Bonusek xweş ev e ku karanîna wê pir hêsan e. Pêvajoyên piçûk ên wekî getFile, sendHttpRequest û yên din dikarin wekî çargoşe bêne temsîl kirin. Her çargoşe pêvajoyek temsîl dike, ku pêwendiya wê di wêneya jêrîn de tê dîtin. Belgeyên berfirehtir li ser danûstendinên sazkirina pêvajoyê hatine nivîsandin vir , ji bo kesên ku rûsî diaxivin - vir. Belge bi rengek bêkêmasî diyar dike ka meriv çawa NIFI-yê pakkirin û meşandin, û her weha meriv çawa pêvajoyên diafirîne, ku wekî çargoşe jî tê zanîn.
Fikra nivîsandina gotarekê piştî lêgerînek dirêj û birêkûpêkkirina agahdariya ku hatî wergirtin di tiştek hişmend de çêbû, û her weha xwestek ku jiyanê ji pêşdebirên pêşerojê re hinekî hêsantir bike..

Nimûne:

Mînakek çawa çargoşe bi hevûdu re têkiliyek tê hesibandin. Plana gelemperî pir hêsan e: Em daxwazek HTTP distînin (Di teoriyê de, bi pelek di laşê daxwazê ​​de. Ji bo nîşandana kapasîteyên NIFI, di vê nimûneyê de daxwaz dest bi pêvajoya wergirtina pelê ji hilanîna pelê herêmî dike. ), Dûv re em bersivek ku daxwaz hatî wergirtin paşde dişînin, di heman demê de pêvajoya wergirtina pelek ji FH û dûv re jî pêvajoya veguhastina wê bi FTP-ê berbi FH-ê. Hêjayî ronîkirinê ye ku pêvajo bi navê flowFile bi hevûdu re têkilî daynin. Ev saziya bingehîn di NIFI de ye ku taybetmendî û naverokê hilîne. Naverok daneyên ku ji hêla pelê vekêşanê ve têne destnîşan kirin e. Ango, bi giranî, heke hûn pelek ji çargoşeyekê wergirin û veguhezînin yekî din, dê naverok bibe pelê we.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Wekî ku hûn dikarin bibînin, ev wêne pêvajoya gelemperî nîşan dide. HandleHttpRequest - daxwazan qebûl dike, ReplaceText - laşek bersivê çêdike, HandleHttpResponse - bersivek dişîne. FetchFile - pelek ji depoya pelê distîne, vediguhezîne çargoşeya PutSftp - vê pelê li ser navnîşana diyarkirî li ser FTP-ê datîne. Niha bêtir li ser vê pêvajoyê.

Di vê rewşê de, daxwaz destpêka her tiştî ye. Ka em li parametreyên veavakirina wê binêrin.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Her tişt li vir ji bilî StandardHttpContextMap pir piçûk e - ev celebek karûbar e ku dihêle hûn daxwazan bişînin û bistînin. Bi hûrgulî û hetta bi mînakan, hûn dikarin bibînin - vir

Dûv re, em li pîvanên veavakirina ReplaceText yên çargoşeyê binêrin. Hêja ye ku bala xwe bidin ReplacementValue - ev e ya ku dê di forma bersivê de ji bikarhênerê re were vegerandin. Di mîhengan de hûn dikarin asta têketinê rast bikin, hûn dikarin têketinên {ku we nifi vekir}/nifi-1.9.2/logs bibînin, pîvanên têkçûn/serkeftinê jî hene - li ser bingeha van parameteran hûn dikarin pêvajoyê bi tevahî rêve bibin. . Ango, di bûyera pêvajoyek serketî ya nivîsê de, dê pêvajoya şandina bersivê ji bikarhêner re were gotin, û di rewşek din de em ê bi tenê pêvajoya neserkeftî têkevim.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Di taybetmendiyên HandleHttpResponse de ji bilî statûya ku bersivek bi serfirazî tê afirandin tiştek bi taybetî balkêş tune.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Me daxwaz û bersiv ji hev veqetand - em biçin wergirtina pelê û danîna wê li ser servera FTP. FetchFile - pelek li ser riya ku di mîhengan de hatî destnîşan kirin distîne û wê derbasî pêvajoya din dike.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Û dûv re meydana PutSftp - pelê di hilanîna pelê de cîh dike. Em dikarin pîvanên veavakirinê li jêr bibînin.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Hêjayî balkişandinê ye ku her çargoşe pêvajoyek cihê ye ku divê were destpêkirin. Me li mînaka herî hêsan nihêrî ku hewcedariya xwerûkirina tevlihev nake. Dûv re, em ê li pêvajoyê hinekî tevlihevtir binihêrin, ku em ê hinekî li ser xêzan binivîsin.

Mînaka tevlihevtir

Karûbarê veguhastina daneyê ji xerîdar re ji ber pêvajoya guheztina peyama SOAP-ê hinekî tevlihevtir derket. Pêvajoya gelemperî di wêneya jêrîn de tê nîşandan.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Li vir fikir jî bi taybetî ne tevlihev e: me daxwazek ji xerîdar wergirt ku ew hewceyê daneyê ye, bersivek şand ku wî peyamek wergirtiye, dest bi pêvajoya wergirtina pelê bersivê kir, dûv re wê bi mantiqek diyarkirî veguherand, û dûv re pelê di forma peyamek SOAP-ê de ji serverê re ji xerîdar re veguhezand.

Ez difikirim ku ne hewce ye ku em ji nû ve wan çarçikên ku me li jor dîtine rave bikin - em rasterast biçin yên nû. Heke hûn hewce ne ku pelek biguhezînin û çarçikên tîpa ReplaceText ya asayî ne guncaw in, hûn neçar in ku skrîpta xwe binivîsin. Ev dikare bi karanîna qada ExecuteGroogyScript were kirin. Mîhengên wê li jêr têne pêşkêş kirin.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Ji bo barkirina senaryoyê li vê çargoşeyê du vebijark hene. Ya yekem bi daxistina pelek bi skrîptê ye. Ya duyemîn bi xistina skrîptekê di scriptBody de ye. Bi qasî ku ez dizanim, qada executeScript gelek zimanan piştgirî dike - yek ji wan groovy e. Ez ê pêşdebirên java şaş bikim - hûn nekarin di çarçikên weha de nivîsarên java binivîsin. Ji bo kesên ku bi rastî dixwazin, hûn hewce ne ku çargoşeya xweya xwerû biafirînin û wê li pergala NIFI zêde bikin. Tevahiya vê operasyonê bi danseke pir dirêj a bi tembûrê re, ku em ê di vê gotarê de pê re mijûl nebin, tê hev. Min zimanê zirav hilbijart. Li jêr skrîptek ceribandinê heye ku bi tenê bi zêdeyî id-ê di peyamek SOAP de nûve dike. Girîng e ku were zanîn. Hûn pelê ji flowFile digirin û nûve dikin, ji bîr nekin ku hûn hewce ne ku wê li wir vegerînin, nûve bikin. Her weha hêjayî gotinê ye ku hemî pirtûkxane tê de ne. Dibe ku diqewime ku hûn hîn jî neçar in ku yek ji lib-an derxînin. Kêmasiyek din jî ev e ku skrîpta li vê çargoşe jihevdexistinê pir dijwar e. Rêyek heye ku meriv bi NIFI JVM-ê ve girêbide û pêvajoya debuggkirinê dest pê bike. Bi kesane, min serîlêdanek herêmî da destpêkirin û wergirtina pelek ji rûniştinê simule kir. Min jî debugging herêmî kir. Çewtiyên ku di dema barkirina skrîptekê de xuya dibin ji Google re pir hêsan in û ji hêla NIFI bixwe ve di têketinê de têne nivîsandin.

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

Bi rastî, li vir xweşkirina çargoşe bi dawî dibe. Dûv re, pelê nûvekirî tê veguheztin meydanê, ku berpirsiyarê şandina pelê ji serverê re ye. Li jêr mîhengên vê meydanê hene.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Em rêbaza ku dê peyamek SOAP-ê were veguheztin diyar dikin. Em li ku dinivîsin. Piştre hûn hewce ne ku destnîşan bikin ku ev SOAP e.

Apache NIFI - Kurtîyek Derfetên Di Praktîkê de

Gelek taybetmendiyên wekî mêvandar û çalakiyê (soapAction) zêde bikin. Em xilas dikin û kontrol dikin. Hûn dikarin bêtir agahdarî li ser ka meriv çawa daxwazên SOAP-ê bişîne bibînin vir

Me ji bo karanîna pêvajoyên NIFI li gelek vebijarkan nihêrî. Têkiliya wan çawa ye û berjewendiya wan ya rastîn çi ye? Mînakên ku têne hesibandin ceribandinên ceribandinê ne û ji tiştê ku di rastiyê de di şer de diqewime hinekî cûda ne. Ez hêvî dikim ku ev gotar dê ji bo pêşdebiran hinekî kêrhatî be. Spas ji bo baldariya we. Ger pirsên we hebin, binivîsin. Ez ê hewl bidim ku bersivê bidim.

Source: www.habr.com

Add a comment