Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Inngangur

Það fór svo að á núverandi vinnustað þurfti ég að kynnast þessari tækni. Ég ætla að byrja á smá bakgrunni. Á næsta fundi var teymi okkar sagt að við þyrftum að búa til samþættingu við þekkt kerfi. Með samþættingu var átt við að þetta vel þekkta kerfi myndi senda okkur beiðnir í gegnum HTTP til ákveðins endapunkts og við, einkennilega nóg, myndum senda til baka svör í formi SOAP skilaboða. Allt virðist einfalt og léttvægt. Af þessu leiðir að þú þarft...

Verkefni

Búðu til 3 þjónustur. Fyrsta þeirra er gagnagrunnsuppfærsluþjónustan. Þessi þjónusta, þegar ný gögn berast frá þriðja aðila kerfi, uppfærir gögnin í gagnagrunninum og býr til skrá á CSV sniði til að flytja þau yfir í næsta kerfi. Endapunktur seinni þjónustunnar er kallaður - FTP Transport Service, sem tekur á móti fluttu skránni, staðfestir hana og setur hana í skráargeymslu í gegnum FTP. Þriðja þjónustan, gagnaflutningsþjónusta neytenda, virkar ósamstillt við þær fyrstu tvær. Það fær beiðni frá utanaðkomandi kerfi þriðja aðila um að taka á móti skránni sem fjallað er um hér að ofan, tekur tilbúnu svarskrána, breytir henni (uppfærir auðkenni, lýsingu, linkToFile reiti) og sendir svarið í formi SOAP skilaboða. Það er að segja að heildarmyndin er eftirfarandi: fyrstu tvær þjónusturnar hefja störf sín fyrst þegar gögnin til uppfærslu eru komin. Þriðja þjónustan virkar stöðugt því það eru margir neytendur upplýsinga, um 1000 beiðnir um gögn á mínútu. Þjónusta er stöðugt í boði og tilvik þeirra eru staðsett í mismunandi umhverfi, svo sem prófun, kynningu, forframleiðslu og framleiðslu. Hér að neðan er skýringarmynd af því hvernig þessi þjónusta virkar. Leyfðu mér að skýra strax að sum smáatriði hafa verið einfölduð til að forðast óþarfa flókið.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Tæknileg dýpkun

Þegar við skipulögðum lausn á vandanum ákváðum við fyrst að búa til forrit í Java með því að nota Spring framework, Nginx balancer, Postgres gagnagrunn og aðra tæknilega og ekki svo tæknilega hluti. Þar sem tíminn til að þróa tæknilega lausn leyfði okkur að íhuga aðrar aðferðir til að leysa þetta vandamál, féll augnaráð okkar á Apache NIFI tæknina, sem er í tísku í ákveðnum hringjum. Ég segi strax að þessi tækni gerði okkur kleift að taka eftir þessum 3 þjónustum. Í þessari grein verður gerð grein fyrir þróun skráaflutningsþjónustu og gagnaflutningsþjónustu til neytenda, en ef greinin er gagnleg mun ég skrifa um þjónustuna við uppfærslu gagna í gagnagrunninum.

Hvað er þetta

NIFI er dreifður arkitektúr fyrir hraðvirka samhliða hleðslu og vinnslu gagna, mikinn fjölda viðbóta fyrir heimildir og umbreytingar, útgáfu stillinga og margt fleira. Góð bónus er að það er mjög auðvelt í notkun. Hægt er að tákna léttvæga ferla eins og getFile, sendHttpRequest og fleiri sem ferninga. Hver ferningur táknar ferli, samspil þess má sjá á myndinni hér að neðan. Ítarlegri skjöl hafa verið skrifuð um samskipti við uppsetningu ferla hér , fyrir þá sem tala rússnesku - hér. Skjölin lýsir fullkomlega hvernig á að taka upp og keyra NIFI, svo og hvernig á að búa til ferla, einnig þekkt sem ferninga
Hugmyndin um að skrifa grein fæddist eftir langa leit og skipulagningu upplýsinga sem berast í eitthvað meðvitað, sem og löngun til að gera lífið aðeins auðveldara fyrir framtíðarhönnuði.

Dæmi

Skoðað er dæmi um hvernig ferningar hafa samskipti sín á milli. Almenna kerfið er frekar einfalt: Við fáum HTTP beiðni (Í orði, með skrá í meginmáli beiðninnar. Til að sýna fram á getu NIFI, í þessu dæmi byrjar beiðnin ferlið við að taka á móti skrá frá staðbundinni skráageymslu ), þá sendum við til baka svar um að beiðnin hafi borist, samhliða því að fá skrá frá FH og síðan ferlið við að flytja hana um FTP til FH. Það er þess virði að skýra að ferlar hafa samskipti sín á milli í gegnum svokallaða flowFile. Þetta er grunneiningin í NIFI sem geymir eiginleika og efni. Innihald er gögnin sem eru táknuð með straumskránni. Það er í grófum dráttum, ef þú færð skrá frá einum reit og flytur hana yfir á annan, þá verður efnið þitt skrá.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Eins og þú sérð sýnir þessi mynd almennt ferli. HandleHttpRequest - tekur við beiðnum, ReplaceText - býr til svarhluta, HandleHttpResponse - sendir svar. FetchFile - tekur á móti skrá úr skráageymslu, flytur hana á ferninginn PutSftp - setur þessa skrá á FTP, á tilgreint heimilisfang. Nú meira um þetta ferli.

Í þessu tilfelli er beiðni upphaf alls. Við skulum skoða stillingarbreytur þess.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Allt hér er frekar léttvægt að undanskildum StandardHttpContextMap - þetta er eins konar þjónusta sem gerir þér kleift að senda og taka á móti beiðnum. Nánar og jafnvel með dæmum geturðu séð - hér

Næst skulum við líta á ReplaceText stillingarfæribreytur torgsins. Það er þess virði að borga eftirtekt til ReplacementValue - þetta er það sem verður skilað til notandans í formi svars. Í stillingum geturðu stillt skráningarstigið, þú getur séð annálana {þar sem þú pakkaðir niður nifi}/nifi-1.9.2/logs, það eru líka bilunar-/árangursbreytur - byggt á þessum breytum geturðu stjórnað ferlinu í heild sinni . Það er að segja, ef textavinnsla gengur vel, verður hringt í ferlið við að senda svar til notandans og í öðru tilviki skráum við einfaldlega misheppnaða ferlið.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Það er ekkert sérstaklega áhugavert í HandleHttpResponse eiginleikanum nema staðan þegar svar er búið til.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Við höfum flokkað beiðnina og svarið - við skulum halda áfram að taka á móti skránni og setja hana á FTP-þjóninn. FetchFile - tekur við skrá á slóðinni sem tilgreind er í stillingunum og sendir hana í næsta ferli.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Og svo PutSftp ferningurinn - setur skrána í skráageymsluna. Við getum séð stillingarbreyturnar hér að neðan.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Það er þess virði að borga eftirtekt til þess að hver ferningur er sérstakt ferli sem verður að hefja. Við skoðuðum einfaldasta dæmið sem krefst ekki flóknar sérsniðnar. Næst munum við skoða ferlið aðeins flóknara, þar sem við skrifum aðeins um grópana.

Flóknara dæmi

Gagnaflutningsþjónustan til neytenda reyndist aðeins flóknari vegna ferlisins við að breyta SOAP skilaboðunum. Almennt ferlið er sýnt á myndinni hér að neðan.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Hér er hugmyndin heldur ekkert sérlega flókin: við fengum beiðni frá neytandanum um að hann þyrfti gögn, sendum svar um að hann hefði fengið skilaboð, byrjuðum á því að fá svarskrána, breyttum henni síðan með ákveðinni rökfræði og síðan flutti skrána til neytenda í formi SOAP skilaboða á netþjóninn.

Ég held að það sé óþarfi að lýsa aftur þessum reitum sem við sáum hér að ofan - við skulum fara beint í nýja. Ef þú þarft að breyta einhverri skrá og venjulegir ReplaceText ferningar henta ekki, verður þú að skrifa þitt eigið handrit. Þetta er hægt að gera með því að nota ExecuteGroogyScript ferninginn. Stillingar þess eru kynntar hér að neðan.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Það eru tveir möguleikar til að hlaða handritinu inn á þennan reit. Hið fyrsta er með því að hlaða niður skrá með handriti. Annað er með því að setja handrit inn í scriptBody. Eftir því sem ég best veit styður executeScript ferningurinn nokkur tungumál - eitt þeirra er gróft. Ég mun valda Java forriturum vonbrigðum - þú getur ekki skrifað forskriftir í Java í slíkum reitum. Fyrir þá sem virkilega vilja það þarftu að búa til þitt eigið sérsniðna torg og bæta því við NIFI kerfið. Allri þessari aðgerð fylgir ansi langur dans við tambúrínu, sem við munum ekki fjalla um í þessari grein. Ég valdi gróft tungumál. Hér að neðan er prufuforskrift sem einfaldlega uppfærir auðkennið smám saman í SOAP skilaboðum. Það er mikilvægt að hafa í huga. Þú tekur skrána úr flowFile og uppfærir hana, ekki gleyma því að þú þarft að setja hana þar aftur, uppfærða. Það er líka rétt að taka fram að ekki eru öll bókasöfn með. Það getur gerst að þú þurfir enn að flytja inn eina af libs. Annar galli er að handritið í þessu veldi er frekar erfitt að kemba. Það er leið til að tengjast NIFI JVM og hefja kembiforritið. Persónulega setti ég af stað staðbundið forrit og líkti eftir því að fá skrá frá fundinum. Ég gerði líka villuleit á staðnum. Villur sem birtast við hleðslu á skriftu er frekar auðvelt að Google og eru skrifaðar af NIFI sjálfu í logginn.

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

Reyndar er þetta þar sem aðlögun torgsins endar. Næst er uppfærða skráin flutt á torgið sem sér um að senda skrána á netþjóninn. Hér að neðan eru stillingar fyrir þetta torg.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Við lýsum aðferðinni sem SOAP skilaboð verða send. Við skrifum hvar. Næst þarftu að gefa til kynna að þetta sé SÁPA.

Apache NIFI - Stutt yfirlit yfir eiginleika í reynd

Bættu við nokkrum eiginleikum eins og host og action (soapAction). Við vistum og athugum. Þú getur séð frekari upplýsingar um hvernig á að senda SOAP beiðnir hér

Við skoðuðum nokkra möguleika til að nota NIFI ferla. Hvernig hafa þau samskipti og hver er raunverulegur ávinningur þeirra? Dæmin sem litið er til eru prófunardæmin og eru aðeins frábrugðin því sem raunverulega gerist í bardaga. Ég vona að þessi grein verði svolítið gagnleg fyrir forritara. Takk fyrir athyglina. Ef þú hefur einhverjar spurningar skaltu skrifa. Ég skal reyna að svara.

Heimild: www.habr.com

Bæta við athugasemd