Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Pasiuna

Nahitabo nga sa akong trabahoan karon kinahanglan nako nga masinati kini nga teknolohiya. Magsugod ko sa gamay nga background. Sa sunod nga miting, gisultihan ang among team nga kinahanglan namon nga maghimo panagsama nailhan nga sistema. Pinaagi sa integrasyon gipasabot nga kining iladong sistema magpadala kanamo og mga hangyo pinaagi sa HTTP ngadto sa usa ka piho nga endpoint, ug kami, sa katingad-an, magpadala og balik nga mga tubag sa porma sa SOAP nga mensahe. Ang tanan morag yano ug walay hinungdan. Gikan niini nagsunod nga kinahanglan nimo ...

Tumong

Paghimo og 3 ka serbisyo. Ang una niini mao ang Database Update Service. Kini nga serbisyo, kung ang bag-ong datos moabut gikan sa usa ka ikatulo nga partido nga sistema, mag-update sa datos sa database ug maghimo usa ka file sa format nga CSV aron mabalhin kini sa sunod nga sistema. Ang katapusan nga punto sa ikaduha nga serbisyo gitawag - ang FTP Transport Service, nga nakadawat sa gibalhin nga file, nagpamatuod niini, ug gibutang kini sa pagtipig sa file pinaagi sa FTP. Ang ikatulo nga serbisyo, ang serbisyo sa pagbalhin sa data sa konsumedor, nagtrabaho nga dungan sa una nga duha. Nakadawat kini og hangyo gikan sa usa ka third-party nga eksternal nga sistema sa pagdawat sa file nga gihisgutan sa ibabaw, pagkuha sa andam nga tubag nga file, pag-usab niini (pag-update sa id, paghulagway, linkToFile fields) ug ipadala ang tubag sa porma sa SOAP nga mensahe. Kana mao, ang kinatibuk-ang hulagway mao ang mosunod: ang unang duha ka mga serbisyo nagsugod sa ilang trabaho lamang sa diha nga ang data alang sa pag-update miabut. Ang ikatulo nga serbisyo nagtrabaho kanunay tungod kay adunay daghang mga konsumedor sa kasayuran, mga 1000 nga hangyo alang sa datos matag minuto. Ang mga serbisyo anaa kanunay ug ang ilang mga instance nahimutang sa lain-laing mga palibot, sama sa pagsulay, demo, pre-production ug prod. Sa ubos usa ka diagram kung giunsa kini nga mga serbisyo molihok. Klarohon dayon nako nga ang pipila ka mga detalye gipasimple aron malikayan ang wala kinahanglana nga pagkakomplikado.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Teknikal nga Pagpalawom

Kung nagplano sa usa ka solusyon sa problema, una kami nakahukom sa paghimo og mga aplikasyon sa Java gamit ang Spring framework, Nginx balancer, Postgres database ug uban pang teknikal ug dili kaayo teknikal nga mga butang. Tungod kay ang panahon sa paghimo sa usa ka teknikal nga solusyon nagtugot kanamo sa paghunahuna sa ubang mga pamaagi sa pagsulbad niini nga problema, ang among pagtan-aw nahulog sa Apache NIFI nga teknolohiya, nga uso sa pipila ka mga lingin. Isulti ko dayon nga kini nga teknolohiya nagtugot kanamo nga makamatikod niining 3 nga mga serbisyo. Kini nga artikulo maghulagway sa pag-uswag sa usa ka serbisyo sa transportasyon sa file ug usa ka serbisyo sa pagbalhin sa data ngadto sa konsumidor, apan kung ang artikulo mapuslanon, akong isulat ang mahitungod sa serbisyo alang sa pag-update sa datos sa database.

Unsa kini?

Ang NIFI usa ka gipang-apod-apod nga arkitektura para sa paspas nga parallel nga pagkarga ug pagproseso sa mga datos, daghang gidaghanon sa mga plugins alang sa mga gigikanan ug pagbag-o, pag-bersyon sa mga pag-configure ug daghan pa. Ang usa ka nindot nga bonus mao nga kini sayon ​​​​kaayo nga gamiton. Ang mga trivial nga proseso sama sa getFile, sendHttpRequest ug uban pa mahimong irepresentar isip mga kwadro. Ang matag square nagrepresentar sa usa ka proseso, ang interaksyon niini makita sa numero sa ubos. Ang mas detalyado nga dokumentasyon sa mga interaksyon sa pag-setup sa proseso gisulat dinhi , alang niadtong nagsulti og Russian - dinhi. Ang dokumentasyon hingpit nga naghulagway kung giunsa ang pag-unpack ug pagpadagan sa NIFI, ingon man kung giunsa paghimo ang mga proseso, nailhan usab nga mga kwadro.
Ang ideya sa pagsulat sa usa ka artikulo natawo human sa usa ka taas nga pagpangita ug structuring sa impormasyon nga nadawat ngadto sa usa ka butang nga mahunahunaon, ingon man usab sa tinguha sa paghimo sa kinabuhi sa usa ka gamay nga mas sayon ​​alang sa umaabot nga developers.

Pananglitan:

Usa ka pananglitan kung giunsa ang mga kwadro nakig-uban sa usag usa gikonsiderar. Ang kinatibuk-ang laraw yano ra: Nakadawat kami usa ka hangyo sa HTTP (Sa teorya, nga adunay usa ka file sa lawas sa hangyo. Aron ipakita ang mga kapabilidad sa NIFI, sa kini nga pananglitan ang hangyo nagsugod sa proseso sa pagdawat usa ka file gikan sa lokal nga pagtipig sa file. ), unya ipadala namo pagbalik ang tubag nga nadawat na ang hangyo, susama sa proseso sa pagdawat og file gikan sa FH ug dayon ang proseso sa pagbalhin niini pinaagi sa FTP ngadto sa FH. Angayan nga ipatin-aw nga ang mga proseso nakig-uban sa usag usa pinaagi sa gitawag nga flowFile. Kini ang sukaranan nga entidad sa NIFI nga nagtipig sa mga hiyas ug sulud. Ang sulud mao ang datos nga girepresentahan sa stream file. Sa ato pa, sa halos pagsulti, kung makadawat ka usa ka file gikan sa usa ka square ug ibalhin kini sa lain, ang sulud mao ang imong file.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Sama sa imong makita, kini nga litrato nagpakita sa kinatibuk-ang proseso. HandleHttpRequest - modawat sa mga hangyo, ReplaceText - makamugna og tubag nga lawas, HandleHttpResponse - nagpadala og tubag. FetchFile - makadawat ug file gikan sa file storage, ibalhin kini ngadto sa square PutSftp - ibutang kini nga file sa FTP, sa espesipikong adres. Karon dugang mahitungod niini nga proseso.

Niini nga kaso, ang hangyo mao ang sinugdanan sa tanan. Atong tan-awon ang mga parameter sa pag-configure niini.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Ang tanan dinhi gamay ra gawas sa StandardHttpContextMap - kini usa ka klase nga serbisyo nga gitugotan ka nga magpadala ug makadawat mga hangyo. Sa dugang nga detalye ug bisan sa mga pananglitan, imong makita - dinhi

Sunod, atong tan-awon ang ReplaceText configuration parameters sa square. Angayan nga hatagan pagtagad ang ReplacementValue - kini ang ibalik sa tiggamit sa porma sa usa ka tubag. Sa mga setting mahimo nimong i-adjust ang lebel sa pag-log, makita nimo ang mga log {diin imong gi-unpack ang nifi}/nifi-1.9.2/logs, adunay usab mga kapakyasan / kalampusan nga mga parameter - base sa kini nga mga parameter mahimo nimong i-regulate ang proseso sa kinatibuk-an . Kana mao, sa kaso sa malampuson nga pagproseso sa teksto, ang proseso sa pagpadala sa usa ka tubag ngadto sa user tawgon, ug sa laing kaso kita mag-log sa dili malampuson nga proseso.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Wala'y bisan unsa nga labi ka makapaikag sa mga kabtangan sa HandleHttpResponse gawas sa kahimtang kung ang usa ka tubag malampuson nga nahimo.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Gihan-ay na namo ang hangyo ug tubag - magpadayon kita sa pagdawat sa file ug ibutang kini sa FTP server. FetchFile - makadawat ug file sa dalan nga gitakda sa mga setting ug ipasa kini sa sunod nga proseso.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Ug dayon ang PutSftp square - nagbutang sa file sa pagtipig sa file. Atong makita ang mga parameter sa pag-configure sa ubos.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Angayan nga hatagan pagtagad ang kamatuoran nga ang matag kuwadrado usa ka lahi nga proseso nga kinahanglan ilunsad. Gitan-aw namon ang pinakasimple nga pananglitan nga wala magkinahanglan og bisan unsang komplikado nga pag-customize. Sunod, atong tan-awon ang proseso nga mas komplikado, diin kita mosulat og gamay sa mga grooves.

Mas komplikado nga pananglitan

Ang serbisyo sa pagbalhin sa data ngadto sa konsumidor nahimong mas komplikado tungod sa proseso sa pag-usab sa SOAP nga mensahe. Ang kinatibuk-ang proseso gipakita sa hulagway sa ubos.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Dinhi ang ideya dili usab labi ka komplikado: nakadawat kami usa ka hangyo gikan sa konsumedor nga kinahanglan niya ang datos, nagpadala usa ka tubag nga nakadawat siya usa ka mensahe, gisugdan ang proseso sa pagdawat sa file nga tubag, dayon gi-edit kini sa usa ka piho nga lohika, ug dayon gibalhin ang file ngadto sa konsyumer sa porma sa SOAP nga mensahe sa server.

Sa akong hunahuna dili na kinahanglan nga ihulagway pag-usab ang mga kwadro nga among nakita sa taas - diretso ta sa mga bag-o. Kung kinahanglan nimo nga usbon ang bisan unsang file ug ang ordinaryo nga ReplaceText type nga mga kwadro dili angay, kinahanglan nimo nga isulat ang imong kaugalingon nga script. Mahimo kini gamit ang ExecuteGroogyScript square. Ang mga setting niini gipresentar sa ubos.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Adunay duha ka kapilian alang sa pagkarga sa script sa kini nga square. Ang una mao ang pag-download sa usa ka file nga adunay script. Ang ikaduha mao ang pagsal-ot og script sa scriptBody. Sa akong nahibal-an, ang executeScript square nagsuporta sa daghang mga pinulongan - usa niini ang groovy. Mapakyas ko sa mga developer sa java - dili ka makasulat sa mga script sa java sa ingon nga mga kwadro. Alang sa mga gusto gyud, kinahanglan nimo nga maghimo sa imong kaugalingon nga naandan nga square ug idugang kini sa sistema sa NIFI. Kini nga tibuuk nga operasyon giubanan sa usa ka taas nga sayaw nga adunay tamburin, nga dili naton hisgutan sa kini nga artikulo. Gipili nako ang groovy nga pinulongan. Sa ubos mao ang usa ka pagsulay nga script nga hinay-hinay nga nag-update sa id sa usa ka SOAP nga mensahe. Importante nga timan-an. Gikuha nimo ang file gikan sa flowFile ug gi-update kini, ayaw kalimti nga kinahanglan nimo kini ibalik didto, gi-update. Angay usab nga hinumdoman nga dili tanan nga mga librarya gilakip. Mahimong mahitabo nga kinahanglan pa nimo nga i-import ang usa sa mga libs. Ang laing kakulian mao nga ang script sa kini nga square lisud nga i-debug. Adunay usa ka paagi sa pagkonektar sa NIFI JVM ug pagsugod sa proseso sa pag-debug. Sa personal, gilusad nako ang usa ka lokal nga aplikasyon ug gi-simulate ang pagdawat sa usa ka file gikan sa sesyon. Nag-debug usab ako sa lokal. Ang mga sayup nga makita sa pag-load sa usa ka script dali ra sa Google ug gisulat mismo sa NIFI sa log.

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

Sa tinuud, dinhi natapos ang pag-customize sa square. Sunod, ang gi-update nga file gibalhin sa square, nga responsable sa pagpadala sa file sa server. Sa ubos mao ang mga setting alang niini nga square.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Among gihulagway ang pamaagi diin ang SOAP nga mensahe ipadala. Gisulat namo kung asa. Sunod kinahanglan nimo nga ipakita nga kini ang SOAP.

Apache NIFI - Usa ka Mubo nga Overview sa mga Feature sa Practice

Pagdugang daghang mga kabtangan sama sa host ug aksyon (soapAction). Among gitipigan ug gisusi. Makita nimo ang dugang nga mga detalye kung giunsa pagpadala ang mga hangyo sa SOAP dinhi

Gitan-aw namon ang daghang mga kapilian sa paggamit sa mga proseso sa NIFI. Sa unsang paagi sila makig-uban ug unsa ang ilang tinuod nga kaayohan? Ang mga pananglitan nga gikonsiderar mao ang mga pagsulay ug gamay nga lahi sa kung unsa ang tinuod nga mahitabo sa panagsangka. Nanghinaut ko nga kini nga artikulo mahimong gamay nga mapuslanon alang sa mga developer. Salamat sa imong pagtagad. Kon duna kay pangutana, pagsulat. Try nako tubagon.

Source: www.habr.com

Idugang sa usa ka comment