Flow kohaletoimetamise automatiseerimine Apache NiFi's

Tere kÔigile!

Flow kohaletoimetamise automatiseerimine Apache NiFi's

Ülesanne on jĂ€rgmine — on voog, nagu on nĂ€idatud ĂŒlaltoodud pildil, mille tuleb rakendada N serverisse, Apache NiFi. 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 dokumentatsioon ja on oluline mitte unustada seadistada NiFi instantsi, et lubada S2S, vaata siit.

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:

  1. Push. Kliendi instantsist saadetakse andmeid Remote Process Group (RPG) abil. Serveri instantsis vÔetakse andmeid vastu Input Port kaudu.
  2. 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 ametlikust dokumentatsioonist. 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:

  1. voo ajakohastamiseks kulub rohkem aega. Tuleb sisse logida kÔikidele serveritele,
  2. tekivad mallide ajakohastamise vead. Siin on uuendatud, aga seal on unustatud.
  3. 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:

  1. Kasutada MiNiFi-d NiFi asemel.
  2. NiFi CLI
  3. NiPyAPI

MiNiFi kasutamine

Apache MiNiFi — 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 selles artiklis 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:

  1. MiNiFy-s pole kÔiki protsessoreid, mis on NiFi-s
  2. 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 kirjeldus 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 siit.

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:

Flow kohaletoimetamise automatiseerimine Apache NiFi's

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

Flow kohaletoimetamise automatiseerimine Apache NiFi's

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. siit.

Flow kohaletoimetamise automatiseerimine Apache NiFi's
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.

Flow kohaletoimetamise automatiseerimine Apache NiFi's

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. Dokumentatsiooni leht sisaldab vajalikku teavet teegiga töötamiseks. Kiire alustamine on kirjeldatud projektist 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 siit.

Ühendame registri nifi instantsiga kasutades

nipyapi.versioning.create_registry_client

Selle sammu juures saab veel lisada kontrolli, et registri instantsile on juba lisatud, selleks vÔib kasutada meetodit

nipyapi.versioning.list_registry_clients

Leidke bucket edasise vooge otsimiseks prĂŒgikastis

nipyapi.versioning.get_registry_bucket

Leitud bucket'i pÔhjal otsime vooge

nipyapi.versioning.get_flow_in_bucket

Edasi 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_groups

ja 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_ver

Deploy'ime protsessigruppi:

nipyapi.versioning.deploy_flow_version

KĂ€ivitame protsessorid:

nipyapi.canvas.schedule_process_group

CLI 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_transmission

Nii, 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 — kirjutage!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster