Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Ievads

SagadÄ«jās tā, ka manā paÅ”reizējā darba vietā nācās iepazÄ«ties ar Å”o tehnoloÄ£iju. SākÅ”u ar nelielu priekÅ”vēsturi. Nākamajā sanāksmē mÅ«su komandai teica, ka mums ir jāizveido integrācija ar zināma sistēma. Ar integrāciju tika domāts, ka Ŕī labi zināmā sistēma mums nosÅ«tÄ«s pieprasÄ«jumus, izmantojot HTTP uz noteiktu galapunktu, un mēs, dÄ«vainā kārtā, nosÅ«tām atbildes SOAP ziņojuma veidā. Viss Ŕķiet vienkārÅ”s un triviāls. No tā izriet, ka jums ir nepiecieÅ”ams...

Uzdevums

Izveidojiet 3 pakalpojumus. Pirmais no tiem ir datu bāzes atjaunināŔanas pakalpojums. Å is pakalpojums, kad no treŔās puses sistēmas pienāk jauni dati, atjaunina datus datu bāzē un Ä£enerē failu CSV formātā, lai tos pārsÅ«tÄ«tu uz nākamo sistēmu. Otrā pakalpojuma galapunkts tiek saukts par FTP transporta pakalpojumu, kas saņem pārsÅ«tÄ«to failu, apstiprina to un ievieto failu krātuvē, izmantojot FTP. TreÅ”ais pakalpojums, patērētāju datu pārsÅ«tÄ«Å”anas pakalpojums, darbojas asinhroni ar pirmajiem diviem. Tā saņem pieprasÄ«jumu no treŔās puses ārējās sistēmas saņemt iepriekÅ” apspriesto failu, paņem gatavās atbildes failu, modificē to (atjaunina id, aprakstu, linkToFile laukus) un nosÅ«ta atbildi SOAP ziņojuma veidā. Proti, kopaina ir Ŕāda: pirmie divi pakalpojumi sāk darbu tikai tad, kad ir saņemti atjaunināŔanas dati. TreÅ”ais dienests strādā pastāvÄ«gi, jo ir daudz informācijas patērētāju, aptuveni 1000 datu pieprasÄ«jumu minÅ«tē. Pakalpojumi ir pieejami pastāvÄ«gi, un to gadÄ«jumi atrodas dažādās vidēs, piemēram, testÄ“Å”anas, demonstrācijas, pirmsražoÅ”anas un prod. Zemāk ir diagramma, kā Å”ie pakalpojumi darbojas. Ä»aujiet man uzreiz paskaidrot, ka dažas detaļas ir vienkārÅ”otas, lai izvairÄ«tos no nevajadzÄ«gas sarežģītÄ«bas.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Tehniskā padziļināŔana

Plānojot problēmas risinājumu, vispirms nolēmām aplikācijas taisÄ«t Java, izmantojot Spring framework, Nginx balancer, Postgres datubāzi un citas tehniskas un ne tik tehniskas lietas. Tā kā tehniskā risinājuma izstrādes laiks ļāva mums apsvērt citas pieejas Ŕīs problēmas risināŔanai, mÅ«su skatiens krita uz Apache NIFI tehnoloÄ£iju, kas ir modē noteiktās aprindās. Uzreiz teikÅ”u, ka Ŕī tehnoloÄ£ija ļāva mums pamanÄ«t Å”os 3 pakalpojumus. Å ajā rakstā tiks aprakstÄ«ta failu transportÄ“Å”anas pakalpojuma un datu pārsÅ«tÄ«Å”anas pakalpojuma izstrāde patērētājam, bet, ja raksts bÅ«s noderÄ«gs, rakstÄ«Å”u par datu atjaunināŔanas pakalpojumu datu bāzē.

Kas ir Ŕis

NIFI ir izkliedēta arhitektÅ«ra ātrai paralēlai datu ielādei un apstrādei, liels skaits spraudņu avotiem un transformācijām, konfigurāciju versijas veidoÅ”ana un daudz kas cits. Jauks bonuss ir tas, ka to ir ļoti viegli lietot. Triviālus procesus, piemēram, getFile, sendHttpRequest un citus, var attēlot kā kvadrātus. Katrs kvadrāts apzÄ«mē procesu, kura mijiedarbÄ«bu var redzēt zemāk esoÅ”ajā attēlā. Ir uzrakstÄ«ta detalizētāka dokumentācija par procesa iestatÄ«Å”anas mijiedarbÄ«bu Å”eit , tiem, kas runā krieviski - Å”eit. Dokumentācijā ir lieliski aprakstÄ«ts, kā izpakot un palaist NIFI, kā arÄ« izveidot procesus, kas pazÄ«stami arÄ« kā kvadrāti.
Ideja rakstÄ«t rakstu radās pēc ilgiem meklējumiem un saņemtās informācijas strukturÄ“Å”anas apzinātā veidā, kā arÄ« vēlme nedaudz atvieglot dzÄ«vi topoÅ”ajiem izstrādātājiem..

Piemērs

Tiek aplÅ«kots piemērs tam, kā kvadrāti mijiedarbojas viens ar otru. Vispārējā shēma ir pavisam vienkārÅ”a: Mēs saņemam HTTP pieprasÄ«jumu (Teorētiski ar failu pieprasÄ«juma pamattekstā. Lai demonstrētu NIFI iespējas, Å”ajā piemērā pieprasÄ«jums sāk faila saņemÅ”anas procesu no lokālās failu krātuves ), tad mēs nosÅ«tām atpakaļ atbildi, ka pieprasÄ«jums ir saņemts, paralēli notiek faila saņemÅ”ana no FH un pēc tam tā pārvietoÅ”ana caur FTP uz FH. Ir vērts precizēt, ka procesi mijiedarbojas viens ar otru, izmantojot tā saukto flowFile. Å Ä« ir NIFI pamata entÄ«tija, kas glabā atribÅ«tus un saturu. Saturs ir dati, kas tiek attēloti straumes failā. Tas ir, rupji runājot, ja saņemat failu no viena kvadrāta un pārsÅ«tāt to uz citu, saturs bÅ«s jÅ«su fails.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Kā redzat, Å”is attēls parāda vispārējo procesu. HandleHttpRequest ā€” pieņem pieprasÄ«jumus, ReplaceText ā€” Ä£enerē atbildes pamattekstu, HandleHttpResponse ā€” nosÅ«ta atbildi. FetchFile - saņem failu no failu krātuves, pārsÅ«ta to uz kvadrātu PutSftp - ievieto Å”o failu FTP, norādÄ«tajā adresē. Tagad vairāk par Å”o procesu.

Šajā gadījumā pieprasījums ir visa sākums. Apskatīsim tā konfigurācijas parametrus.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Å eit viss ir diezgan triviāls, izņemot StandardHttpContextMap - tas ir sava veida pakalpojums, kas ļauj nosÅ«tÄ«t un saņemt pieprasÄ«jumus. SÄ«kāk un pat ar piemēriem jÅ«s varat redzēt - Å”eit

Tālāk apskatÄ«sim kvadrāta ReplaceText konfigurācijas parametrus. Ir vērts pievērst uzmanÄ«bu ReplacementValue - tas ir tas, kas tiks atgriezts lietotājam atbildes veidā. IestatÄ«jumos var regulēt reÄ£istrÄ“Å”anas lÄ«meni, var redzēt žurnālus {kur izpakojāt nifi}/nifi-1.9.2/logs, ir arÄ« neveiksmes/veiksmes parametri - pamatojoties uz Å”iem parametriem, varat regulēt procesu kopumā . Tas ir, veiksmÄ«gas teksta apstrādes gadÄ«jumā tiks izsaukts atbildes nosÅ«tÄ«Å”anas process lietotājam, un citā gadÄ«jumā mēs vienkārÅ”i reÄ£istrēsim neveiksmÄ«go procesu.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

HandleHttpResponse rekvizÄ«tos nav nekā Ä«paÅ”i interesanta, izņemot statusu, kad atbilde ir veiksmÄ«gi izveidota.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Esam nokārtojuÅ”i pieprasÄ«jumu un atbildi ā€“ pāriesim pie faila saņemÅ”anas un ievietoÅ”anas FTP serverÄ«. FetchFile - saņem failu iestatÄ«jumos norādÄ«tajā ceļā un nodod to nākamajam procesam.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Un tad PutSftp kvadrāts - ievieto failu failu krātuvē. Tālāk mēs varam redzēt konfigurācijas parametrus.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Ir vērts pievērst uzmanÄ«bu tam, ka katrs laukums ir atseviŔķs process, kas jāsāk. Mēs apskatÄ«jām vienkārŔāko piemēru, kam nav nepiecieÅ”ama sarežģīta pielāgoÅ”ana. Tālāk mēs aplÅ«kosim procesu nedaudz sarežģītāk, kur mēs nedaudz uzrakstÄ«sim uz rievām.

Sarežģītāks piemērs

Datu pārsÅ«tÄ«Å”anas pakalpojums patērētājam izrādÄ«jās nedaudz sarežģītāks SOAP ziņojuma modificÄ“Å”anas procesa dēļ. Vispārējais process ir parādÄ«ts zemāk esoÅ”ajā attēlā.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Å eit arÄ« ideja nav Ä«paÅ”i sarežģīta: saņēmām pieprasÄ«jumu no patērētāja, ka viņam nepiecieÅ”ami dati, nosÅ«tÄ«jām atbildi, ka ir saņēmis ziņu, sākām atbildes faila saņemÅ”anas procesu, pēc tam ar noteiktu loÄ£iku to rediģējām un tad pārsÅ«tÄ«ja failu patērētājam SOAP ziņojuma veidā uz serveri.

Es domāju, ka nav nepiecieÅ”ams vēlreiz aprakstÄ«t tos kvadrātus, kurus redzējām iepriekÅ” - pāriesim tieÅ”i uz jaunajiem. Ja jums ir nepiecieÅ”ams rediģēt kādu failu un parastie ReplaceText tipa kvadrāti nav piemēroti, jums bÅ«s jāraksta savs skripts. To var izdarÄ«t, izmantojot ExecuteGroogyScript kvadrātu. Tās iestatÄ«jumi ir parādÄ«ti zemāk.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Ir divas iespējas skripta ielādei Å”ajā laukumā. Pirmais ir, lejupielādējot failu ar skriptu. Otrais ir skripta ievietoÅ”ana scriptBody. Cik es zinu, executeScript kvadrāts atbalsta vairākas valodas - viena no tām ir groovy. PievilÅ”u java izstrādātājus - tādos kvadrātos nevar rakstÄ«t skriptus java. Tiem, kas patieŔām vēlas, jums ir jāizveido savs pielāgotais laukums un jāpievieno tas NIFI sistēmai. Visu Å”o operāciju pavada diezgan ilga deja ar tamburÄ«nu, par ko Å”ajā rakstā mēs nerunāsim. Es izvēlējos groovy valodu. Zemāk ir testa skripts, kas vienkārÅ”i pakāpeniski atjaunina ID SOAP ziņojumā. Ir svarÄ«gi atzÄ«mēt. JÅ«s paņemat failu no flowFile un atjauniniet to, neaizmirstiet, ka tas ir jāievieto tur atpakaļ, atjaunināts. Ir arÄ« vērts atzÄ«mēt, ka ne visas bibliotēkas ir iekļautas. Var gadÄ«ties, ka tomēr ir jāimportē kāds no libiem. Vēl viens mÄ«nuss ir tas, ka skriptu Å”ajā laukumā ir diezgan grÅ«ti atkļūdot. Ir veids, kā izveidot savienojumu ar NIFI JVM un sākt atkļūdoÅ”anas procesu. PersonÄ«gi es palaidu vietējo lietojumprogrammu un simulēju faila saņemÅ”anu no sesijas. Es arÄ« veicu atkļūdoÅ”anu lokāli. Kļūdas, kas parādās, ielādējot skriptu, ir diezgan viegli Google, un tās ieraksta žurnālā pats NIFI.

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

Faktiski Ŕeit beidzas laukuma pielāgoŔana. Tālāk atjauninātais fails tiek pārsūtīts uz laukumu, kas ir atbildīgs par faila nosūtīŔanu uz serveri. Tālāk ir norādīti Ŕī laukuma iestatījumi.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Mēs aprakstām metodi, ar kuru tiks pārsūtīts SOAP ziņojums. Mēs rakstām, kur. Tālāk jums jānorāda, ka tas ir SOAP.

Apache NIFI ā€” Ä«ss pārskats par iespējām praksē

Pievienojiet vairākus rekvizÄ«tus, piemēram, saimniekdatoru un darbÄ«bu (soapAction). Mēs saglabājam un pārbaudām. Varat skatÄ«t sÄ«kāku informāciju par to, kā nosÅ«tÄ«t SOAP pieprasÄ«jumus Å”eit

Mēs apskatÄ«jām vairākas NIFI procesu izmantoÅ”anas iespējas. Kā viņi mijiedarbojas un kāds ir viņu patiesais labums? ApskatÄ«tie piemēri ir pārbaudes piemēri un nedaudz atŔķiras no tā, kas patiesÄ«bā notiek kaujā. Es ceru, ka Å”is raksts bÅ«s nedaudz noderÄ«gs izstrādātājiem. Paldies par jÅ«su uzmanÄ«bu. Ja ir kādi jautājumi, rakstiet. Es mēģināŔu atbildēt.

Avots: www.habr.com

Pievieno komentāru