Tere kÔigile!

Ălesanne on jĂ€rgmine â on voog, nagu on nĂ€idatud ĂŒlaltoodud pildil, mille tuleb rakendada N serverisse, . Voog on testvool â toimub faili genereerimine ja saatmine teise NiFi instantsi. Andmete edastamine toimub NiFi Site to Site protokolli kaudu.
NiFi Site to Site (S2S) â turvaline, lihtsalt seadistatav viis andmete edastamiseks NiFi instantside vahel. Kuidas S2S töötab, vaata ja on oluline mitte unustada seadistada NiFi instantsi, et lubada S2S, vaata .
Juhtudel, kui rÀÀgitakse andmete edastamisest S2S kaudu â ĂŒks instants on kliendi, teine serveri oma. Kliendi instants saadab andmeid, serveri instants vastuvĂ”tab. Kaks viisi andmete edastamiseks nende vahel:
- Push. Kliendi instantsist saadetakse andmeid Remote Process Group (RPG) abil. Serveri instantsis vÔetakse andmeid vastu Input Port kaudu.
- Pull. Server vÔtab andmeid vastu RPG kaudu, klient saadab andmeid Output Port abil.
Voog, mida rakendame, on salvestatud Apache Registry's.
Apache NiFi Registry â Apache NiFi allprojekti tööriist voogude salvestamiseks ja versioonide haldamiseks. Nagu GIT. Teavet registri installimise, seadistamise ja kasutamise kohta leiate . Hoidmiseks mĂ”eldud voogude grupp liidetakse protsessi grupp ja sellisel kujul salvestatakse registrisse. Tagasi sellele teemale tuleme hiljem artiklis.
Alguses, kui N on vÀike arv, tarnitakse ja ajakohastatakse voogu kÀsitsi vastuvÔetava ajaga.
Aga N kasvades tekivad probleemid:
- voo ajakohastamiseks kulub rohkem aega. Tuleb sisse logida kÔikidele serveritele,
- tekivad mallide ajakohastamise vead. Siin on uuendatud, aga seal on unustatud.
- inimese eksimused, kui tehakse palju sarnaseid operatsioone.
KĂ”ik see viib meid jĂ€reldusele, et protsess tuleb automatiseerida. Olen proovinud jĂ€rgmisi lahendusi sellele ĂŒlesandele:
- Kasutada MiNiFi-d NiFi asemel.
- NiFi CLI
- NiPyAPI
MiNiFi kasutamine
â Apache NiFi alaprojekt. MiNiFy on kompaktne agent, mis kasutab samu protsessoreid nagu NiFi, vĂ”imaldades luua samu vooge nagu NiFi. Agendi kergekaaluline olemus tuleneb osaliselt sellest, et MiNiFy-l puudub graafiline kasutajaliides voogude konfigureerimiseks. MiNiFy graafilise kasutajaliidese puudumine tĂ€hendab, et tuleb lahendada voogude edastamise probleem minifi-sse. Kuna MiNiFy-d kasutatakse aktiivselt IOT-s, on komponente palju ja voogude edastamise protsess lĂ”plikesse MiNiFy eksemplaridesse tuleb automatiseerida. Kas see ei tundu tuttav probleem?
Seda probleemi aitab lahendada veel ĂŒks alaprojekt â MiNiFi C2 Server. See toode on mĂ”eldud, et olla keskses punktis konfiguratsioonide levitamise arhitektuuris. Kuidas konfigureerida keskkonda â on kirjeldatud Habr's, ja teave on piisav, et lahendada antud probleem. MiNiFi koos C2 serveriga vĂ€rskendab oma konfiguratsiooni automaatreĆŸiimis. Ainus selle lĂ€henemise miinus on see, et C2 Serveris tuleb luua mallid, lihtsalt registry-sse commitimine ei ole piisav.
Ălaltoodud artiklis kirjeldatud variant on töötav ja mitte keeruline ellu viia, kuid ei tohi unustada jĂ€rgmist:
- MiNiFy-s pole kÔiki protsessoreid, mis on NiFi-s
- Protsessorite versioonid MiNiFy-s jÀÀvad NiFi protsessorite versioonidest maha.
Selle artikli kirjutamise ajal on NiFi viimane versioon â 1.9.2. Viimane MiNiFi protsessorite versioon on â 1.7.0. Protsessoreid saab MiNiFy-sse lisada, kuid versioonide erinevuse tĂ”ttu NiFi ja MiNiFy protsessorite vahel ei pruugi see töötada.
NiFi CLI
Ăksikasjalike andmete pĂ”hjal tööriistast ametlikul veebilehel, see on tööriist NiFi ja NiFi Registry koostöö automatiseerimiseks voogude edastamise vĂ”i protsesside haldamise osas. Selle tööriista kasutamiseks tuleb see alla laadida .
KĂ€ivitame utiliidi
.\/bin\/cli.sh
_ ___ _
Apache (_) .' ..](_) ,
_ .--. __ _| |_ __ )
[ `.-. | [ |'-| |-'[ | \/
| | | | | | | | | | ' '
[___||__][___][___] [___]', ,'
`'
CLI v1.9.2
Type 'help' to see a list of available commands, use tab to auto-complete.
Kuna me peame vajalikku voogu registry-st alla laadima, peame teadma Àmbrite identifikaatoreid (bucket identifier) ja ise voogu (flow identifier). Need andmed saab kÀtte kas cli vÔi NiFi registry veebiliideses. Veebiliideses nÀeb see vÀlja jÀrgmiselt:

CLI abil tehakse jÀrgmist:
#> 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
KĂ€ivitame process grupi importimise registry-st:
#> 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
Oluline punkt â protsessigruppide rakendamiseks vĂ”ib hostina kasutada mis tahes NiFi instantsi.
Protsessi grupp on lisatud peatatud protsessoritega, need tuleb kÀivitada.
#> nifi pg-start -pgid 7f522a13-016e-1000-e504-d5b15587f2f3 -u http://nifi:8080
SuurepĂ€rane, protsessorid on kĂ€ivitunud. Kuid ĂŒlesande tingimuste kohaselt peavad NiFi instantsid andmeid saatma teistele instantsidele. Eeldame, et andmete edastamiseks serverisse valiti Push meetod. Andmete edastamiseks tuleb lisatud Remote Process Group (RPG), mis on juba meie voos, aktiveerida edastus (Enable transmitting).

Dokumentatsioonis, CLI-s ja teistes allikates ei leidnud ma viisi edastuse aktiveerimiseks. Kui teate, kuidas seda teha, palun kirjutage kommentaarides.
Kuna meil on bash ja oleme valmis lĂ”puni minema â leidkem lahendus! Saame kasutada NiFi API-d selle probleemi lahendamiseks. Kasutame jĂ€rgmist meetodit, ID vĂ”tame eelnevatest nĂ€idetest (meie puhul on see 7f522a13-016e-1000-e504-d5b15587f2f3). NiFi API meetodite kirjeldus. .

Body-s tuleb edastada JSON jÀrgmises vormingus:
{
"revision": {
"clientId": "value",
"version": 0,
"lastModifier": "value"
},
"state": "value",
"disconnectedNodeAcknowledged": true
}
Parameetrid, mida tuleb tÀita, et "töötaks":
state â andmete edastusstatus. Saadaval on TRANSMITTING andmete edastamiseks, STOPPED edastuse vĂ€ljalĂŒlitamiseks.
version â protsessori versioon.
Versioon on vaike, 0 loomisel, kuid need parameetrid saab kÀtte meetodi abil.

Bash skriptide huvilistele vĂ”ib see meetod tunduda sobiv, kuid mulle on see keeruline â bash skriptid ei ole mu lemmikud. JĂ€rgmine meetod on huvitavam ja mugavam minu arvates.
NiPyAPI
NiPyAPI â Pythonile mĂ”eldud teek NiFi instantsidega suhtlemiseks. sisaldab vajalikku teavet teegiga töötamiseks. Kiire alustamine on kirjeldatud githubis.
Meie skript konfiguratsiooni vÀlja laskmiseks on programm Pythonis. Liigume koodimise juurde.
Seame konfiguratsioonid edasiseks tööks. Me vajame jÀrgmisi parameetreid:
nipyapi.config.nifi_config.host = 'http://nifi:8080/nifi-api' # tee nifi-api instantsi juurde, kus protsessi gruppi arendame
nipyapi.config.registry_config.host = 'http://nifi-registry:18080/nifi-registry-api' # tee nifi-registry-api registrisse
nipyapi.config.registry_name = 'MyBeutifulRegistry' # registri nimi, kuidas see nifi instantsis nimi on
nipyapi.config.bucket_name = 'BucketName' # bucketi nimi, kust toome flow
nipyapi.config.flow_name = 'FlowName' # flow nimi, which we are pulling
Edasi hakkan sisestama selle teegi meetodite nimesid, mis on kirjeldatud .
Ăhendame registri nifi instantsiga kasutades
nipyapi.versioning.create_registry_clientSelle sammu juures saab veel lisada kontrolli, et registri instantsile on juba lisatud, selleks vÔib kasutada meetodit
nipyapi.versioning.list_registry_clientsLeidke bucket edasise vooge otsimiseks prĂŒgikastis
nipyapi.versioning.get_registry_bucketLeitud bucket'i pÔhjal otsime vooge
nipyapi.versioning.get_flow_in_bucketEdasi on oluline mĂ”ista, kas see protsessigrupp on juba lisatud. Protsessigrupp paigutatakse koordinaatide pĂ”hjal ja vĂ”ib juhtuda, et ĂŒhe komponendi peale asetub teine. Ma olen seda kontrollinud, selline olukord on tĂ”epoolest vĂ”imalik đ. KĂ”ikide lisatud protsessigruppide saamiseks kasutame meetodit
nipyapi.canvas.list_all_process_groupsja seejÀrel vÔime otsida nÀiteks nime jÀrgi.
Ma ei hakka ĆĄablooni uuendamise protsessi kirjeldama, vaid ĂŒtlen vaid, et kui uues ĆĄablooni versioonis lisatakse protsessorid, siis ei ole tekkinud sĂ”numite jĂ€rjekordades probleeme. Kuid kui protsessorid eemaldatakse, vĂ”ivad probleemid tekkida (nifi ei luba protsessorit eemaldada, kui selle ees on sĂ”numite jĂ€rjekord). Kui teid huvitab, kuidas ma selle probleemi lahendasin, kirjutage mulle, palun, arutame seda kĂŒsimust. Kontaktid on artikli lĂ”pus. JĂ€tkame protsessigruppi lisamise sammuga.
Skripti tÔrkeotsingul olen kokku puutunud eripÀraga, et mitte alati ei tÔugata viimast versiooni vooge, seega soovitan kÔigepealt selle versiooni tÀpsustada:
nipyapi.versioning.get_latest_flow_verDeploy'ime protsessigruppi:
nipyapi.versioning.deploy_flow_versionKĂ€ivitame protsessorid:
nipyapi.canvas.schedule_process_groupCLI jaotises oli kirjutatud, et kaugprotsessigrupp ei lĂŒlita andmete edastamist automaatselt sisse? Skripti rakendamisel puutusin ma selle probleemiga samuti kokku. Sel hetkel ei Ă”nnestunud mul API abil andmete edastamist kĂ€ivitada ja otsustasin kirjutada NiPyAPI arendajale ning kĂŒsida nĂ”u/abi. Arendaja vastas mulle, me arutasime probleemi ja ta kirjutas, et tal on vaja aega "mĂ”ned asjad kontrollida". Ja nii, paar pĂ€eva hiljem tuli kiri, milles oli Pythonis funktsioon, mis lahendab minu kĂ€ivitamise probleemi!!! Sel hetkel oli NiPyAPI versioon 0.13.3 ja selles ei olnud loomulikult midagi sellist. Kuid versioonis 0.14.0, mis on ilmunud ĂŒsna hiljuti, on see funktsioon juba raamatukogus olemas. Tere tulemast,
nipyapi.canvas.set_remote_process_group_transmissionNii, kasutades NiPyAPI teeki, ĂŒhendasime registry, tĂ”mbasime töövoo ja isegi kĂ€ivitasime protsessorid ja andmete edastamise. Edasi saab koodi lihvida, lisada erinevaid kontrolle, logimist ja nii edasi. Kuid see on juba hoopis teine lugu.
Minu lĂ€bi vaadatud automatiseerimise variantidest tundus viimane kĂ”ige toimivam. Esiteks, see on ikkagi Python keeles kood, kuhu saab integreerida abikoodi ja kasutada kĂ”ikide programmeerimiskeele eeliseid. Teiseks, NiPyAPI projekt areneb aktiivselt ja probleemide korral saab arendajale kirjutada. Kolmandaks, NiPyAPI on siiski paindlikum tööriist NiFi-ga keerukate ĂŒlesannete lahendamiseks. NĂ€iteks, et mÀÀrata, kas sĂ”numijĂ€rjekorrad on praegu tĂŒhjad ja kas process group'i saab uuendada.
Sellega on kĂ”ik. Kirjeldasin kolme lĂ€henemist töövoo automatiseerimisele NiFis, takistusi, millega arendaja vĂ”ib kokku puutuda, ja esitasin töötava koodi automatiseerimiseks. Kui teid huvitab see teema, nagu mind â
Allikas: habr.com
