Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Utangulizi

Ilifanyika kwamba katika eneo langu la kazi la sasa ilibidi nifahamiane na teknolojia hii. Nitaanza na historia kidogo. Katika mkutano uliofuata, timu yetu iliambiwa kwamba tunahitaji kuunda ushirikiano na mfumo unaojulikana. Kwa kuunganishwa ilimaanisha kuwa mfumo huu unaojulikana utatutumia maombi kupitia HTTP hadi mwisho maalum, na sisi, isiyo ya kawaida, tungetuma majibu kwa njia ya ujumbe wa SOAP. Kila kitu kinaonekana rahisi na kisicho na maana. Kutoka kwa hii inafuata kwamba unahitaji ...

Kazi

Unda huduma 3. Ya kwanza yao ni Huduma ya Usasishaji wa Hifadhidata. Huduma hii, wakati data mpya inapowasili kutoka kwa mfumo wa watu wengine, husasisha data katika hifadhidata na hutengeneza faili katika umbizo la CSV ili kuihamisha kwenye mfumo unaofuata. Mwisho wa huduma ya pili inaitwa - Huduma ya Usafiri wa FTP, ambayo inapokea faili iliyohamishwa, inaidhinisha, na kuiweka kwenye hifadhi ya faili kupitia FTP. Huduma ya tatu, huduma ya kuhamisha data ya watumiaji, inafanya kazi kwa usawa na mbili za kwanza. Inapokea ombi kutoka kwa mfumo wa nje wa mtu wa tatu ili kupokea faili iliyojadiliwa hapo juu, inachukua faili ya majibu tayari, kuibadilisha (husasisha kitambulisho, maelezo, sehemu za kiungoToFile) na kutuma jibu kwa njia ya ujumbe wa SOAP. Hiyo ni, picha ya jumla ni kama ifuatavyo: huduma mbili za kwanza huanza kazi yao tu wakati data ya uppdatering imefika. Huduma ya tatu inafanya kazi mara kwa mara kwa sababu kuna watumiaji wengi wa habari, kuhusu maombi 1000 ya data kwa dakika. Huduma zinapatikana kila mara na matukio yao yanapatikana katika mazingira tofauti, kama vile majaribio, onyesho, utayarishaji wa awali na uzalishaji. Chini ni mchoro wa jinsi huduma hizi zinavyofanya kazi. Acha nifafanue mara moja kwamba maelezo kadhaa yamerahisishwa ili kuepusha ugumu usio wa lazima.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Kukuza Kiufundi

Wakati wa kupanga suluhisho la tatizo, kwanza tuliamua kutuma maombi katika Java kwa kutumia mfumo wa Spring, Nginx balancer, Postgres database na mambo mengine ya kiufundi na si ya kiufundi. Tangu wakati wa kuendeleza ufumbuzi wa kiufundi ulituruhusu kuzingatia mbinu nyingine za kutatua tatizo hili, macho yetu yalianguka kwenye teknolojia ya Apache NIFI, ambayo ni ya mtindo katika miduara fulani. Nitasema mara moja kwamba teknolojia hii ilituruhusu kutambua huduma hizi 3. Nakala hii itaelezea maendeleo ya huduma ya usafirishaji wa faili na huduma ya uhamishaji data kwa watumiaji, lakini ikiwa nakala hiyo ni muhimu, nitaandika juu ya huduma ya kusasisha data kwenye hifadhidata.

Nini hii

NIFI ni usanifu uliosambazwa kwa upakiaji wa haraka sambamba na usindikaji wa data, idadi kubwa ya programu-jalizi za vyanzo na mabadiliko, matoleo ya usanidi na mengi zaidi. Bonasi nzuri ni kwamba ni rahisi sana kutumia. Michakato ndogo kama vile getFile, sendHttpRequest na zingine zinaweza kuwakilishwa kama miraba. Kila mraba inawakilisha mchakato, mwingiliano ambao unaweza kuonekana kwenye takwimu hapa chini. Nyaraka za kina zaidi juu ya mwingiliano wa usanidi wa mchakato zimeandikwa hapa , kwa wale wanaozungumza Kirusi - hapa. Nyaraka zinaelezea kikamilifu jinsi ya kufungua na kuendesha NIFI, na pia jinsi ya kuunda michakato, inayojulikana pia kama mraba.
Wazo la kuandika nakala lilizaliwa baada ya utaftaji wa muda mrefu na kupanga habari iliyopokelewa kuwa kitu cha kufahamu, na vile vile hamu ya kurahisisha maisha kwa watengenezaji wa siku zijazo.

Mfano

Mfano wa jinsi miraba inavyoingiliana inazingatiwa. Mpango wa jumla ni rahisi sana: Tunapokea ombi la HTTP (Kwa nadharia, na faili katika mwili wa ombi. Ili kuonyesha uwezo wa NIFI, katika mfano huu ombi huanza mchakato wa kupokea faili kutoka kwa hifadhi ya faili ya ndani. ), kisha tunatuma jibu ambalo ombi limepokelewa, sambamba na mchakato wa kupokea faili kutoka kwa FH na kisha mchakato wa kuihamisha kupitia FTP hadi FH. Inafaa kufafanua kuwa michakato huingiliana kupitia kinachojulikana kama flowFile. Hiki ndicho huluki msingi katika NIFI ambayo huhifadhi sifa na maudhui. Maudhui ni data ambayo inawakilishwa na faili ya mtiririko. Hiyo ni, kwa kusema, ikiwa unapokea faili kutoka kwa mraba mmoja na kuihamisha hadi nyingine, maudhui yatakuwa faili yako.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Kama unaweza kuona, picha hii inaonyesha mchakato wa jumla. HandleHttpRequest - inakubali maombi, ReplaceText - inazalisha mwili wa majibu, HandleHttpResponse - hutuma jibu. FetchFile - inapokea faili kutoka kwa hifadhi ya faili, kuihamisha kwenye mraba PutSftp - inaweka faili hii kwenye FTP, kwenye anwani maalum. Sasa zaidi kuhusu mchakato huu.

Katika kesi hii, ombi ni mwanzo wa kila kitu. Wacha tuangalie vigezo vyake vya usanidi.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Kila kitu hapa ni kidogo kabisa isipokuwa StandardHttpContextMap - hii ni aina ya huduma inayokuruhusu kutuma na kupokea maombi. Kwa undani zaidi na hata kwa mifano, unaweza kuona - hapa

Ifuatayo, hebu tuangalie vigezo vya usanidi wa ReplaceText ya mraba. Inafaa kulipa kipaumbele kwa ReplacementValue - hii ndio itarejeshwa kwa mtumiaji kwa njia ya jibu. Katika mipangilio unaweza kurekebisha kiwango cha ukataji miti, unaweza kuona kumbukumbu {ambapo ulifungua nifi}/nifi-1.9.2/logs, pia kuna vigezo vya kushindwa/kufanikiwa - kwa kuzingatia vigezo hivi unaweza kudhibiti mchakato kwa ujumla. . Hiyo ni, katika kesi ya usindikaji wa maandishi yenye mafanikio, mchakato wa kutuma jibu kwa mtumiaji utaitwa, na katika hali nyingine tutaingia tu mchakato usiofanikiwa.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Hakuna kitu cha kufurahisha sana katika sifa za HandleHttpResponse isipokuwa hali wakati jibu limeundwa kwa mafanikio.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Tumepanga ombi na jibu - wacha tuendelee kupokea faili na kuiweka kwenye seva ya FTP. FetchFile - inapokea faili kwenye njia iliyoainishwa kwenye mipangilio na kuipitisha kwa mchakato unaofuata.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Na kisha mraba wa PutSftp - huweka faili kwenye hifadhi ya faili. Tunaweza kuona vigezo vya usanidi hapa chini.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Inafaa kuzingatia ukweli kwamba kila mraba ni mchakato tofauti ambao lazima uzinduliwe. Tuliangalia mfano rahisi zaidi ambao hauitaji ubinafsishaji wowote mgumu. Ifuatayo, tutaangalia mchakato huo ngumu zaidi, ambapo tutaandika kidogo kwenye grooves.

Mfano ngumu zaidi

Huduma ya kuhamisha data kwa mtumiaji iligeuka kuwa ngumu zaidi kutokana na mchakato wa kurekebisha ujumbe wa SOAP. Mchakato wa jumla unaonyeshwa kwenye takwimu hapa chini.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Hapa wazo pia sio ngumu sana: tulipokea ombi kutoka kwa mtumiaji kwamba anahitaji data, akatuma jibu kwamba amepokea ujumbe, akaanza mchakato wa kupokea faili ya majibu, kisha akaihariri kwa mantiki fulani, na kisha. ilihamisha faili kwa mtumiaji katika mfumo wa ujumbe wa SOAP kwa seva.

Nadhani hakuna haja ya kuelezea tena miraba ambayo tuliona hapo juu - wacha tuelekee moja kwa moja kwenye mpya. Ikiwa unahitaji kuhariri faili yoyote na miraba ya kawaida ya aina ya ReplaceText haifai, itabidi uandike hati yako mwenyewe. Hii inaweza kufanywa kwa kutumia mraba wa ExecuteGroogyScript. Mipangilio yake imewasilishwa hapa chini.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Kuna chaguo mbili za kupakia hati kwenye mraba huu. Ya kwanza ni kupakua faili iliyo na hati. Ya pili ni kwa kuingiza hati kwenye scriptBody. Kwa kadiri ninavyojua, mraba wa executeScript inasaidia lugha kadhaa - moja yao ni groovy. Nitawakatisha tamaa watengenezaji wa java - huwezi kuandika hati katika java kwenye miraba kama hii. Kwa wale ambao wanataka kweli, unahitaji kuunda mraba wako maalum na uiongeze kwenye mfumo wa NIFI. Operesheni hii yote inaambatana na densi ndefu na tambourini, ambayo hatutashughulika nayo katika nakala hii. Nilichagua lugha ya kijasusi. Ifuatayo ni hati ya majaribio ambayo husasisha kitambulisho kwa kasi katika ujumbe wa SOAP. Ni muhimu kuzingatia. Unachukua faili kutoka flowFile na kuisasisha, usisahau kwamba unahitaji kuiweka nyuma, iliyosasishwa. Inafaa pia kuzingatia kuwa sio maktaba zote zimejumuishwa. Inaweza kutokea kwamba bado unapaswa kuagiza moja ya libs. Kando nyingine ni kwamba hati katika mraba huu ni ngumu sana kurekebisha. Kuna njia ya kuunganishwa na NIFI JVM na kuanza mchakato wa kurekebisha. Binafsi, nilizindua programu ya ndani na kuiga kupokea faili kutoka kwa kikao. Pia nilifanya utatuzi wa ndani. Hitilafu zinazoonekana wakati wa kupakia hati ni rahisi sana kwa Google na zimeandikwa na NIFI yenyewe kwenye logi.

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

Kwa kweli, hapa ndipo ubinafsishaji wa mraba unaisha. Ifuatayo, faili iliyosasishwa huhamishiwa kwenye mraba, ambayo inawajibika kwa kutuma faili kwa seva. Ifuatayo ni mipangilio ya mraba huu.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Tunaelezea njia ambayo ujumbe wa SOAP utatumwa. Tunaandika wapi. Ifuatayo unahitaji kuonyesha kuwa hii ni SABUNI.

Apache NIFI - Muhtasari mfupi wa Fursa katika Mazoezi

Ongeza sifa kadhaa kama vile mwenyeji na kitendo (soapAction). Tunahifadhi na kuangalia. Unaweza kuona maelezo zaidi kuhusu jinsi ya kutuma maombi ya SOAP hapa

Tuliangalia chaguzi kadhaa za kutumia michakato ya NIFI. Je, wanaingiliana vipi na faida yao halisi ni nini? Mifano inayozingatiwa ni ya majaribio na ni tofauti kidogo na kile kinachotokea katika mapigano. Natumaini makala hii itakuwa muhimu kidogo kwa watengenezaji. Asante kwa umakini wako. Ikiwa una maswali yoyote, andika. Nitajaribu kujibu.

Chanzo: mapenzi.com

Kuongeza maoni