Sjálfvirkni flæðisendingar í Apache NiFi

Halló allir!

Sjálfvirkni flæðisendingar í Apache NiFi

Verkefnið er sem hér segir - það er flæði sem sést á myndinni hér að ofan, sem þarf að rúlla út á N netþjóna með Apache NiFi. Flæðispróf - verið er að búa til skrá og senda í annað NiFi tilvik. Gagnaflutningur á sér stað með því að nota NiFi Site to Site samskiptareglur.

NiFi Site to Site (S2S) er örugg, mjög sérhannaðar leið til að flytja gögn á milli NiFi tilvika. Sjáðu hvernig S2S virkar skjöl og það er mikilvægt að muna að setja upp NiFi dæmið þitt til að leyfa S2S að sjá hér.

Þegar kemur að gagnaflutningi með S2S er eitt tilvikið kallað viðskiptavinur, annað er netþjónn. Viðskiptavinurinn sendir gögn, þjónninn tekur við þeim. Tvær leiðir til að setja upp gagnaflutning á milli:

  1. Ýttu. Gögn eru send frá tilviki viðskiptavinarins með því að nota Remote Process Group (RPG). Á netþjónstilvikinu eru gögn móttekin með því að nota inntaksportið
  2. Pull. Miðlarinn tekur á móti gögnum með því að nota RPG, viðskiptavinurinn sendir með Output tengið.


Flæði til að rúlla er geymt í Apache Registry.

Apache NiFi Registry er undirverkefni Apache NiFi sem býður upp á flæðisgeymslu og útgáfutól. Eins konar GIT. Upplýsingar um að setja upp, stilla og vinna með skrárinn er að finna í opinber skjöl. Flæði til geymslu er sameinað í vinnsluhóp og geymt í skránni á þessu formi. Við munum koma aftur að þessu síðar í greininni.

Í upphafi, þegar N er lítil tala, er flæðið afhent og uppfært í höndunum á hæfilegum tíma.

En eftir því sem N vex eru fleiri vandamál:

  1. það tekur lengri tíma að uppfæra flæðið. Þú þarft að fara á alla netþjóna
  2. Villur við uppfærslu sniðmáts eiga sér stað. Hér uppfærðu þeir, en hér gleymdu þeir
  3. mannleg mistök þegar verið er að framkvæma fjölda svipaðra aðgerða

Allt þetta leiðir okkur að þeirri staðreynd að það er nauðsynlegt að gera ferlið sjálfvirkt. Ég hef reynt eftirfarandi leiðir til að leysa þetta vandamál:

  1. Notaðu MiNiFi í stað NiFi
  2. NiFi CLI
  3. NiPyAPI

Að nota MiNiFi

ApacheMiNify er undirverkefni Apache NiFi. MiNiFy er þéttur umboðsmaður sem notar sömu örgjörva og NiFi, sem gerir þér kleift að búa til sama flæði og í NiFi. Léttleiki umboðsmannsins næst meðal annars vegna þess að MiNiFy er ekki með grafísku viðmóti fyrir flæðisstillingar. Skortur MiNiFy á grafísku viðmóti gerir það að verkum að nauðsynlegt er að leysa vandamálið við flæðisendingu í minifi. Þar sem MiNiFy er virkt notað í IOT eru margir íhlutir og ferlið við að skila flæði til endanlegra minifi tilvika verður að vera sjálfvirkt. Kunnuglegt verkefni, ekki satt?

Annað undirverkefni, MiNiFi C2 Server, mun hjálpa til við að leysa þetta vandamál. Þessari vöru er ætlað að vera miðpunkturinn í dreifingararkitektúrnum. Hvernig á að stilla umhverfið - lýst í Þessi grein á Habré og upplýsingarnar nægja til að leysa vandann. MiNiFi í tengslum við C2 netþjóninn uppfærir sjálfkrafa stillingar sínar. Eini gallinn við þessa nálgun er að þú þarft að búa til sniðmát á C2 Server, einföld skuldbinding til skrásetningarinnar er ekki nóg.

Valkosturinn sem lýst er í greininni hér að ofan er að virka og ekki erfiður í framkvæmd, en við megum ekki gleyma eftirfarandi:

  1. minifi er ekki með alla örgjörva frá nifi
  2. CPU útgáfur í Miniifi eru á eftir CPU útgáfum í NiFi.

Þegar þetta er skrifað er nýjasta útgáfan af NiFi 1.9.2. Örgjörvaútgáfan af nýjustu MiNiFi útgáfunni er 1.7.0. Hægt er að bæta örgjörvum við MiNiFi, en vegna misræmis í útgáfum milli NiFi og MiNiFi örgjörva gæti þetta ekki virkað.

NiFi CLI

Að dæma eftir lýsingu tól á opinberu vefsíðunni, þetta er tól til að gera sjálfvirk samskipti milli NiFI og NiFi Registry á sviði flæðisendingar eða ferlistjórnunar. Sæktu þetta tól til að byrja. þess vegna.

Keyra tólið

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

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

Til þess að við getum hlaðið nauðsynlegu flæði úr skráningunni þurfum við að þekkja auðkenni körfunnar (auðkenni fötu) og flæðisins sjálfs (flæðisauðkenni). Þessi gögn er hægt að nálgast annað hvort í gegnum cli eða í NiFi skráningarvefviðmótinu. Vefviðmótið lítur svona út:

Sjálfvirkni flæðisendingar í Apache NiFi

Með því að nota CLI gerirðu þetta:

#> 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

Keyra innflutningsferlishóp úr skránni:

#> 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

Mikilvægur punktur er að hægt er að tilgreina hvaða nifi-tilvik sem er sem gestgjafi sem við rúllum ferlihópnum á.

Ferlahópur bætt við með stöðvuðum örgjörvum, það þarf að ræsa þá

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

Frábært, örgjörvarnir eru byrjaðir. Hins vegar, í samræmi við aðstæður vandamálsins, þurfum við NiFi tilvik til að senda gögn til annarra tilvika. Gerum ráð fyrir að Push aðferðin hafi verið valin til að flytja gögn yfir á netþjóninn. Til að skipuleggja gagnaflutning er nauðsynlegt að virkja gagnaflutning (Virkja sendingu) á viðbótar Remote Process Group (RPG), sem er þegar innifalinn í flæðinu okkar.

Sjálfvirkni flæðisendingar í Apache NiFi

Í skjölunum í CLI og öðrum heimildum fann ég ekki leið til að virkja gagnaflutning. Ef þú veist hvernig á að gera þetta, vinsamlegast skrifaðu í athugasemdirnar.

Þar sem við erum með bash og erum tilbúin að fara til enda, munum við finna leið út! Þú getur notað NiFi API til að leysa þetta vandamál. Við skulum nota eftirfarandi aðferð, við tökum auðkennið úr dæmunum hér að ofan (í okkar tilfelli er það 7f522a13-016e-1000-e504-d5b15587f2f3). Lýsing á NiFi API aðferðum hér.

Sjálfvirkni flæðisendingar í Apache NiFi
Í líkamanum þarftu að standast JSON, af eftirfarandi formi:

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

Færibreytur sem þarf að fylla út til að „virka“:
voru — gagnaflutningsstaða. Í boði SENDING til að virkja gagnaflutning, HÆTTIÐ til að slökkva á
útgáfa - örgjörva útgáfa

útgáfan verður sjálfgefið 0 þegar hún er búin til, en þessar breytur er hægt að fá með aðferðinni

Sjálfvirkni flæðisendingar í Apache NiFi

Fyrir unnendur bash-handrita gæti þessi aðferð virst hentug, en það er erfitt fyrir mig - bash-handrit eru ekki í uppáhaldi hjá mér. Næsta leið er áhugaverðari og þægilegri að mínu mati.

NiPyAPI

NiPyAPI er Python bókasafn til að hafa samskipti við NiFi tilvik. Skjalasíða inniheldur nauðsynlegar upplýsingar til að vinna með bókasafninu. Fljótlegri byrjun er lýst í drögin á github.

Handritið okkar til að útfæra uppsetninguna er Python forrit. Við skulum halda áfram að kóða.
Settu upp stillingar fyrir frekari vinnu. Við þurfum eftirfarandi breytur:

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, которое подтягиваем

Ennfremur mun ég setja inn nöfn aðferða þessa bókasafns, sem lýst er hér.

Við tengjum skrásetninguna við nifi tilvikið með því að nota

nipyapi.versioning.create_registry_client

Í þessu skrefi geturðu líka bætt við því að skrásetningin hafi þegar verið bætt við tilvikið, til þess geturðu notað aðferðina

nipyapi.versioning.list_registry_clients

Við finnum fötuna til að leita frekar að flæðinu í körfunni

nipyapi.versioning.get_registry_bucket

Samkvæmt fundnum fötu erum við að leita að flæði

nipyapi.versioning.get_flow_in_bucket

Næst er mikilvægt að skilja hvort þessum ferlihópi hefur þegar verið bætt við. Ferlihópurinn er settur eftir hnitum og sú staða getur komið upp þegar annar er lagður ofan á einn. Ég athugaði, það getur verið 🙂 Til að fá allan vinnsluhópinn sem bætt er við skaltu nota aðferðina

nipyapi.canvas.list_all_process_groups

og þá getum við leitað til dæmis eftir nafni.

Ég mun ekki lýsa ferlinu við að uppfæra sniðmátið, ég mun aðeins segja að ef örgjörvum er bætt við í nýju útgáfunni af sniðmátinu, þá eru engin vandamál með tilvist skilaboða í biðröðunum. En ef örgjörvarnir eru fjarlægðir, þá geta komið upp vandamál (nifi leyfir ekki að fjarlægja örgjörvann ef skilaboðaröð hefur safnast fyrir framan hann). Ef þú hefur áhuga á hvernig ég leysti þetta vandamál - skrifaðu mér, vinsamlegast, við munum ræða þetta atriði. Tengiliðir í lok greinarinnar. Við skulum halda áfram í skrefið að bæta við ferlihópi.

Við kembiforritið rakst ég á eiginleika sem gerir nýjasta útgáfan af flæði ekki alltaf dregin upp, svo ég mæli með að þú skýrir þessa útgáfu fyrst:

nipyapi.versioning.get_latest_flow_ver

Senda ferli hópur:

nipyapi.versioning.deploy_flow_version

Við ræsum örgjörvana:

nipyapi.canvas.schedule_process_group

Í blokkinni um CLI var skrifað að gagnaflutningur er ekki sjálfkrafa virkur í fjarvinnsluhópnum? Þegar ég útfærði handritið lenti ég líka í þessu vandamáli. Á þeim tíma gat ég ekki byrjað gagnaflutning með því að nota API og ég ákvað að skrifa til þróunaraðila NiPyAPI bókasafnsins og biðja um ráð / hjálp. Framkvæmdaraðilinn svaraði mér, við ræddum vandamálið og hann skrifaði að hann þyrfti tíma til að „tékka eitthvað“. Og núna, nokkrum dögum síðar, kemur tölvupóstur þar sem Python aðgerð er skrifuð sem leysir ræsingarvandamálið mitt !!! Á þeim tíma var NiPyAPI útgáfan 0.13.3 og auðvitað var ekkert slíkt í henni. En í útgáfu 0.14.0, sem var gefin út nokkuð nýlega, hefur þessi aðgerð þegar verið innifalin í bókasafninu. Hittumst

nipyapi.canvas.set_remote_process_group_transmission

Svo, með hjálp NiPyAPI bókasafnsins, tengdum við skrásetninguna, rúlluðum upp flæðinu og byrjuðum jafnvel á örgjörvum og gagnaflutningi. Svo er hægt að greiða kóðann, bæta við alls kyns ávísunum, skráningu, og það er allt. En það er allt önnur saga.

Af þeim sjálfvirknivalkostum sem ég velti fyrir mér fannst mér sá síðarnefndi hagkvæmastur. Í fyrsta lagi er þetta enn python kóða, þar sem þú getur fellt inn aukaforritskóða og notið allra kosta forritunarmáls. Í öðru lagi er NiPyAPI verkefnið í virkri þróun og ef vandamál koma upp geturðu skrifað til framkvæmdaraðilans. Í þriðja lagi er NiPyAPI enn sveigjanlegra tæki til að hafa samskipti við NiFi við að leysa flókin vandamál. Til dæmis, við að ákvarða hvort skilaboðabiðraðir séu tómar í flæðinu og hvort hægt sé að uppfæra vinnsluhópinn.

Það er allt og sumt. Ég lýsti 3 aðferðum til að gera sjálfvirkan flæðisendingu í NiFi, gildrunum sem þróunaraðili gæti lent í og ​​útvegaði vinnukóða til að gera sjálfvirkan afhendingu. Ef þú hefur jafn mikinn áhuga á þessu efni og ég - skrifa!

Heimild: www.habr.com

Bæta við athugasemd