Awtomazzjoni tal-kunsinna tal-fluss f'Apache NiFi

Hello kulħadd!

Awtomazzjoni tal-kunsinna tal-fluss f'Apache NiFi

Il-kompitu huwa kif ġej - hemm fluss, ippreżentat fl-istampa ta 'hawn fuq, li jeħtieġ li jiġi mxerred għal N servers b' Apache NiFi. Test tal-fluss - fajl qed jiġi ġġenerat u mibgħut lil istanza NiFi oħra. It-trasferiment tad-dejta jseħħ bl-użu tal-protokoll NiFi Site to Site.

NiFi Site to Site (S2S) huwa mod sigur u konfigurabbli faċilment biex tittrasferixxi d-dejta bejn istanzi NiFi. Kif jaħdem S2S, ara dokumentazzjoni u huwa importanti li ma ninsewx li tikkonfigura l-istanza NiFi biex tippermetti S2S, ara hawn.

F'każijiet fejn qed nitkellmu dwar it-trasferiment tad-data bl-użu ta 'S2S, istanza waħda tissejjaħ klijent, it-tieni server. Il-klijent jibgħat data, is-server jirċievi. Żewġ modi kif tikkonfigura t-trasferiment tad-dejta bejniethom:

  1. Imbotta. Mill-istanza tal-klijent, id-dejta tintbagħat permezz ta' Grupp ta' Proċess Remot (RPG). Fuq l-istanza tas-server, id-dejta tiġi riċevuta bl-użu tal-Port tal-Input
  2. Iġbed. Is-server jirċievi data bl-użu ta 'RPG, il-klijent jibgħat bl-użu tal-Port Output.


Il-fluss għat-tnedija huwa maħżun fir-Reġistru Apache.

Apache NiFi Reġistru huwa sottoproġett ta 'Apache NiFi li jipprovdi għodda għall-ħażna tal-fluss u l-kontroll tal-verżjoni. Speċi ta 'GIT. Informazzjoni dwar l-installazzjoni, il-konfigurazzjoni u l-ħidma mar-reġistru tista' tinstab fi dokumentazzjoni uffiċjali. Il-fluss għall-ħażna huwa kkombinat fi grupp ta 'proċess u maħżun f'din il-forma fir-reġistru. Nirritornaw għal dan aktar tard fl-artiklu.

Fil-bidu, meta N huwa numru żgħir, il-fluss jitwassal u jiġi aġġornat manwalment fi żmien aċċettabbli.

Iżda hekk kif N jikber, il-problemi jsiru aktar numerużi:

  1. jieħu aktar ħin biex taġġorna l-fluss. Għandek bżonn tidħol fis-servers kollha
  2. Jseħħu żbalji fl-aġġornament tal-mudelli. Hawn aġġornawh, imma hawn insew
  3. żbalji umani meta twettaq numru kbir ta 'operazzjonijiet simili

Dan kollu jwassalna għall-fatt li għandna bżonn nawtomatizzaw il-proċess. Ippruvajt il-modi li ġejjin biex issolvi din il-problema:

  1. Uża MiNiFi minflok NiFi
  2. NiFi CLI
  3. NiPyAPI

Bl-użu ta 'MiniFi

Apache MiNiFy - sottoproġett ta' Apache NiFi. MiNiFy huwa aġent kompatt li juża l-istess proċessuri bħal NiFi, li jippermettilek toħloq l-istess flussi bħal fin-NiFi. In-natura ħafifa tal-aġent tinkiseb, fost affarijiet oħra, mill-fatt li MiNiFy m'għandux interface grafiku għall-konfigurazzjoni tal-fluss. In-nuqqas ta 'interface grafika f'MiNiFy ifisser li huwa meħtieġ li tissolva l-problema tat-twassil tal-fluss lill-minifi. Peress li MiNiFy jintuża b'mod attiv fl-IOT, hemm ħafna komponenti u l-proċess tat-twassil tal-fluss għall-istanzi finali tal-minifi jeħtieġ li jiġi awtomatizzat. Kompitu familjari, hux?

Sottoproġett ieħor se jgħin biex issolvi din il-problema - MiNiFi C2 Server. Dan il-prodott huwa maħsub biex ikun il-punt ċentrali fl-arkitettura tat-tnedija tal-konfigurazzjoni. Kif tikkonfigura l-ambjent - deskritt fi Dan l-artikolu Hemm biżżejjed informazzjoni dwar Habré biex issolvi l-problema. MiNiFi, flimkien mas-server C2, jaġġorna awtomatikament il-konfigurazzjoni tiegħu. L-uniku żvantaġġ ta 'dan l-approċċ huwa li għandek toħloq mudelli fuq C2 Server; impenn sempliċi għar-reġistru mhuwiex biżżejjed.

L-għażla deskritta fl-artikolu hawn fuq qed taħdem u mhix diffiċli biex timplimenta, iżda ma rridux ninsew dan li ġej:

  1. Minifi m'għandux il-proċessuri kollha minn nifi
  2. Il-verżjonijiet tal-proċessuri Minifi għadhom lura wara l-verżjonijiet tal-proċessuri NiFi.

Fiż-żmien tal-kitba, l-aħħar verżjoni ta 'NiFi hija 1.9.2. L-aħħar verżjoni tal-proċessur MiNiFi hija 1.7.0. Il-proċessuri jistgħu jiżdiedu ma 'MiNiFi, iżda minħabba diskrepanzi fil-verżjoni bejn il-proċessuri NiFi u MiNiFi, dan jista' ma jaħdimx.

NiFi CLI

Ġudikant minn deskrizzjoni għodda fuq il-websajt uffiċjali, din hija għodda għall-awtomatizzazzjoni tal-interazzjoni bejn NiFI u NiFi Reġistru fil-qasam tal-kunsinna tal-fluss jew il-ġestjoni tal-proċess. Biex tibda, trid tniżżel din l-għodda. għalhekk.

Tnedija l-utilità

./bin/cli.sh
           _     ___  _
 Apache   (_)  .' ..](_)   ,
 _ .--.   __  _| |_  __    )
[ `.-. | [  |'-| |-'[  |  /  
|  | | |  | |  | |   | | '    '
[___||__][___][___] [___]',  ,'
                           `'
          CLI v1.9.2

Type 'help' to see a list of available commands, use tab to auto-complete.

Sabiex aħna tagħbija l-fluss meħtieġ mir-reġistru, irridu nkunu nafu l-identifikaturi tal-barmil (identifikatur tal-barmil) ​​u l-fluss innifsu (identifikatur tal-fluss). Din id-dejta tista' tinkiseb jew permezz tal-cli jew fl-interface tal-web tar-reġistru NiFi. Fl-interface tal-web jidher bħal dan:

Awtomazzjoni tal-kunsinna tal-fluss f'Apache NiFi

Bl-użu tas-CLI dan isir:

#> registry list-buckets -u http://nifi-registry:18080

#   Name             Id                                     Description
-   --------------   ------------------------------------   -----------
1   test_bucket   709d387a-9ce9-4535-8546-3621efe38e96   (empty)

#> registry list-flows -b 709d387a-9ce9-4535-8546-3621efe38e96 -u http://nifi-registry:18080

#   Name           Id                                     Description
-   ------------   ------------------------------------   -----------
1   test_flow   d27af00a-5b47-4910-89cd-9c664cd91e85

Nibdew jimportaw il-grupp tal-proċess mir-reġistru:

#> nifi pg-import -b 709d387a-9ce9-4535-8546-3621efe38e96 -f d27af00a-5b47-4910-89cd-9c664cd91e85 -fv 1 -u http://nifi:8080

7f522a13-016e-1000-e504-d5b15587f2f3

Punt importanti huwa li kwalunkwe istanza nifi tista 'tiġi speċifikata bħala l-ospitant li lejh irrombla l-grupp tal-proċess.

Grupp ta 'proċess miżjud ma' proċessuri waqfien, jeħtieġ li jinbdew

#> nifi pg-start -pgid 7f522a13-016e-1000-e504-d5b15587f2f3 -u http://nifi:8080

Kbir, il-proċessuri bdew. Madankollu, skont it-termini tal-kompitu, neħtieġu istanzi NiFi biex nibagħtu data lil istanzi oħra. Ejja nassumu li għażilt il-metodu Push biex tittrasferixxi d-dejta lis-server. Sabiex torganizza t-trasferiment tad-dejta, trid tippermetti t-trasferiment tad-dejta fuq il-Grupp tal-Proċess Remot (RPG) miżjud, li diġà huwa inkluż fil-fluss tagħna.

Awtomazzjoni tal-kunsinna tal-fluss f'Apache NiFi

Fid-dokumentazzjoni fis-CLI u sorsi oħra, ma sibtx mod kif nippermetti t-trasferiment tad-dejta. Jekk taf kif tagħmel dan, jekk jogħġbok ikteb fil-kummenti.

Peress li għandna bash u lesti li mmorru sal-aħħar, insibu mod kif noħorġu! Tista 'tuża l-API NiFi biex issolvi din il-problema. Ejja nużaw il-metodu li ġej, ħu l-ID mill-eżempji ta 'hawn fuq (fil-każ tagħna huwa 7f522a13-016e-1000-e504-d5b15587f2f3). Deskrizzjoni tal-metodi NiFi API hawn.

Awtomazzjoni tal-kunsinna tal-fluss f'Apache NiFi
Fil-ġisem trid tgħaddi JSON, bħal dan:

{
    "revision": {
	    "clientId": "value",
	    "version": 0,
	    "lastModifier": "value"
	},
    "state": "value",
    "disconnectedNodeAcknowledged": true
}

Parametri li jridu jimtlew biex taħdem:
kienu — l-istatus tat-trasferiment tad-data. Disponibbli: TRAżmissjoni biex tippermetti t-trasferiment tad-dejta, Waqqfet biex tiddiżattiva
verżjoni - verżjoni tal-proċessur

verżjoni default għal 0 meta maħluqa, iżda dawn il-parametri jistgħu jinkisbu bl-użu tal-metodu

Awtomazzjoni tal-kunsinna tal-fluss f'Apache NiFi

Għal fannijiet ta 'skripts bash, dan il-metodu jista' jidher adattat, iżda huwa daqsxejn diffiċli għalija - l-iskripts bash mhumiex il-favoriti tiegħi. Il-metodu li jmiss huwa aktar interessanti u konvenjenti fl-opinjoni tiegħi.

NiPyAPI

NiPyAPI hija librerija Python għall-interazzjoni ma 'istanzi NiFi. Paġna tad-dokumentazzjoni fih l-informazzjoni meħtieġa biex taħdem mal-librerija. Bidu malajr huwa deskritt fi proġett fuq github.

L-iskrittura tagħna għat-tnedija tal-konfigurazzjoni hija programm f'Python. Ejja ngħaddu għall-kodifikazzjoni.
Aħna waqqafna konfigurazzjonijiet għal aktar xogħol. Ikollna bżonn il-parametri li ġejjin:

nipyapi.config.nifi_config.host = 'http://nifi:8080/nifi-api' #путь до nifi-api инстанса, на котором разворачиваем process group
nipyapi.config.registry_config.host = 'http://nifi-registry:18080/nifi-registry-api' #путь до nifi-registry-api registry
nipyapi.config.registry_name = 'MyBeutifulRegistry' #название registry, как будет называться в инстансе nifi
nipyapi.config.bucket_name = 'BucketName' #название bucket, из которого подтягиваем flow
nipyapi.config.flow_name = 'FlowName' #название flow, которое подтягиваем

Sussegwentement se ndaħħal l-ismijiet tal-metodi ta 'din il-librerija, li huma deskritti hawn.

Qabbad ir-reġistru mal-istanza nifi billi tuża

nipyapi.versioning.create_registry_client

F'dan il-pass, tista 'wkoll iżżid verifika li r-reġistru diġà ġie miżjud mal-istanza; għal dan tista' tuża l-metodu

nipyapi.versioning.list_registry_clients

Insibu l-barmil għal aktar tfittxija għall-fluss fil-basket

nipyapi.versioning.get_registry_bucket

Bl-użu tal-barmil misjub, infittxu fluss

nipyapi.versioning.get_flow_in_bucket

Sussegwentement, huwa importanti li wieħed jifhem jekk dan il-grupp ta 'proċess diġà ġiex miżjud. Il-grupp tal-Proċess jitqiegħed skont il-koordinati u tista' tinħoloq sitwazzjoni meta t-tieni komponent jiġi superimpost fuq wieħed. Iċċekkja, dan jista 'jiġri :) Biex tikseb il-gruppi kollha ta' proċessi miżjuda nużaw il-metodu

nipyapi.canvas.list_all_process_groups

Nistgħu nfittxu aktar, pereżempju, bl-isem.

Mhux se niddeskrivi l-proċess tal-aġġornament tal-mudell, ngħid biss li jekk il-proċessuri jiżdiedu fil-verżjoni l-ġdida tal-mudell, allura m'hemm l-ebda problemi bil-preżenza ta 'messaġġi fil-kjuwijiet. Iżda jekk il-proċessuri jitneħħew, allura jistgħu jinqalgħu problemi (nifi ma jippermettilekx tneħħi proċessur jekk ikun akkumula kju ta 'messaġġi quddiemu). Jekk inti interessat dwar kif solvut din il-problema, jekk jogħġbok iktebli u niddiskutu din il-kwistjoni. Kuntatti fl-aħħar tal-artiklu. Ejja ngħaddu għall-pass li żżid grupp ta 'proċess.

Meta niddibaggja l-iskrittura, iltqajt ma' partikolarità li l-aħħar verżjoni tal-fluss mhux dejjem tinġibed 'il fuq, għalhekk nirrakkomanda li tiċċekkja din il-verżjoni l-ewwel:

nipyapi.versioning.get_latest_flow_ver

Uża grupp ta' proċessi:

nipyapi.versioning.deploy_flow_version

Nibdew il-proċessuri:

nipyapi.canvas.schedule_process_group

Fil-blokk dwar CLI kien miktub li t-trasferiment tad-dejta mhux awtomatikament attivat fil-grupp tal-proċess remot? Meta implimentat l-iskrittura, iltqajt ma 'din il-problema wkoll. Dak iż-żmien, ma stajtx nibda t-trasferiment tad-dejta bl-użu tal-API u ddeċidejt li nikteb lill-iżviluppatur tal-librerija NiPyAPI u nitlob għal parir/għajnuna. L-iżviluppatur wieġeb lili, iddiskutejna l-problema u kiteb li kellu bżonn iż-żmien biex "jiċċekkja xi ħaġa". U mbagħad, ftit tal-jiem wara, tasal ittra li fiha tinkiteb funzjoni f'Python li ssolvi l-problema tat-tnedija tiegħi!!! Dak iż-żmien, il-verżjoni NiPyAPI kienet 0.13.3 u, ovvjament, ma kien hemm xejn bħal dan. Iżda fil-verżjoni 0.14.0, li ġiet rilaxxata pjuttost reċentement, din il-funzjoni kienet diġà inkluża fil-librerija. Iltaqa',

nipyapi.canvas.set_remote_process_group_transmission

Allura, bl-użu tal-librerija NiPyAPI, aħna konnessi r-reġistru, roll out fluss, u anke bdejna proċessuri u trasferiment tad-data. Imbagħad tista 'tikmix il-kodiċi, żid kull tip ta' kontrolli, illoggjar, u dak kollu. Imma dik hija storja kompletament differenti.

Mill-għażliet ta 'awtomazzjoni li ikkunsidrajt, l-aħħar waħda dehret lili l-aktar effiċjenti. L-ewwelnett, dan għadu kodiċi python, li fih tista 'tdaħħal kodiċi tal-programm awżiljarju u tieħu vantaġġ mill-benefiċċji kollha tal-lingwa ta' programmar. It-tieni nett, il-proġett NiPyAPI qed jiżviluppa b'mod attiv u f'każ ta 'problemi tista' tikteb lill-iżviluppatur. It-tielet nett, NiPyAPI għadu għodda aktar flessibbli għall-interazzjoni ma 'NiFi fis-soluzzjoni ta' problemi kumplessi. Per eżempju, fid-determinazzjoni jekk il-kjuwijiet tal-messaġġi humiex issa vojta fil-fluss u jekk il-grupp tal-proċess jistax jiġi aġġornat.

Dak kollox. Iddeskrivejt 3 approċċi għall-awtomatizzazzjoni tal-kunsinna tal-fluss f'NiFi, in-nases li żviluppatur jista 'jiltaqa' magħhom, u pprovda kodiċi tax-xogħol għall-awtomatizzazzjoni tal-kunsinna. Jekk int interessat f'dan is-suġġett daqs kemm jien - ikteb!

Sors: www.habr.com

Żid kumment