Otomatik livrezon koule nan Apache NiFi

Всем Привет!

Otomatik livrezon koule nan Apache NiFi

Travay la se jan sa a - gen yon koule, prezante nan foto ki anwo a, ki bezwen yo dwe woule soti nan N sèvè ak Apache NiFi. Tès koule - yon dosye ap pwodwi epi voye nan yon lòt egzanp NiFi. Transfè done fèt lè l sèvi avèk pwotokòl NiFi Site a Site.

NiFi Site to Site (S2S) se yon fason ki an sekirite, fasil configurable pou transfere done ant ka NiFi. Ki jan S2S travay, wè dokiman epi li enpòtan pou pa bliye configured egzanp NiFi pou pèmèt S2S, gade isit la.

Nan ka kote nou ap pale de transfè done lè l sèvi avèk S2S, yon egzanp yo rele kliyan, dezyèm sèvè a. Kliyan an voye done, sèvè a resevwa. De fason pou konfigirasyon transfè done ant yo:

  1. Pouse. Soti nan egzanp kliyan an, done yo voye lè l sèvi avèk yon Gwoup Pwosesis Remote (RPG). Sou egzanp sèvè a, done yo resevwa lè l sèvi avèk Pò Antre
  2. Rale. Sèvè a resevwa done lè l sèvi avèk RPG, kliyan an voye lè l sèvi avèk pò Sòti.


Se koule pou woule soti ki estoke nan Apache Rejis.

Apache NiFi Rejis se yon sou-pwojè Apache NiFi ki bay yon zouti pou depo koule ak kontwòl vèsyon. Yon sòt de GIT. Ou ka jwenn enfòmasyon sou enstale, konfigirasyon ak travay ak rejis nan dokiman ofisyèl yo. Flow pou depo konbine nan yon gwoup pwosesis epi estoke nan fòm sa a nan rejis la. Nou pral retounen sou sa pita nan atik la.

Nan kòmansman an, lè N se yon ti kantite, koule yo delivre epi mete ajou manyèlman nan yon tan akseptab.

Men, kòm N ap grandi, pwoblèm yo vin pi plis:

  1. li pran plis tan pou mete ajou koule a. Ou bezwen konekte nan tout serveurs
  2. Erè aktyalizasyon modèl rive. Isit la yo mete ajou li, men isit la yo bliye
  3. erè imen lè w ap fè yon gwo kantite operasyon menm jan an

Tout bagay sa a mennen nou nan lefèt ke nou bezwen otomatize pwosesis la. Mwen te eseye fason sa yo pou rezoud pwoblèm sa a:

  1. Sèvi ak MiNiFi olye pou yo NiFi
  2. NiFi CLI
  3. NiPyAPI

Sèvi ak MiNiFi

Apache MiNiFy - sou-pwojè Apache NiFi. MiNiFy se yon ajan kontra enfòmèl ant ki sèvi ak processeur yo menm jan ak NiFi, ki pèmèt ou kreye koule yo menm jan ak nan NiFi. Se nati ki lejè nan ajan an reyalize, pami lòt bagay, pa lefèt ke MiNiFy pa gen yon koòdone grafik pou konfigirasyon koule. Mank yon koòdone grafik pou MiNiFy vle di ke li nesesè yo rezoud pwoblèm nan nan livrezon koule nan minifi. Depi MiNiFy yo itilize aktivman nan IOT, gen anpil konpozan epi pwosesis pou bay koule nan dènye ka minifi yo bezwen otomatize. Yon travay abitye, dwa?

Yon lòt sous-pwojè pral ede rezoud pwoblèm sa a - MiNiFi C2 Server. Pwodui sa a gen entansyon kòm pwen santral la nan achitekti deplwaye konfigirasyon an. Ki jan yo konfigirasyon anviwònman an - ki dekri nan atik sa a Gen ase enfòmasyon sou Habré pou rezoud pwoblèm nan. MiNiFi, ansanm ak sèvè C2 a, otomatikman mete ajou konfigirasyon li yo. Dezavantaj a sèlman nan apwòch sa a se ke ou gen yo kreye modèl sou C2 sèvè yon senp komèt nan rejis la se pa ase.

Opsyon ki dekri nan atik ki anwo a ap travay epi li pa difisil pou aplike, men nou pa dwe bliye bagay sa yo:

  1. Minifi pa gen tout processeurs de nifi
  2. Vèsyon processeur Minifi la dèyè vèsyon processeur NiFi.

Nan moman sa a nan ekri a, vèsyon an dènye nan NiFi se 1.9.2. Dènye vèsyon processeur MiNiFi a se 1.7.0. Pwosesè yo ka ajoute nan MiNiFi, men akòz diferans vèsyon ant processeurs NiFi ak MiNiFi, sa a ka pa travay.

NiFi CLI

Jije pa deskripsyon zouti sou sit entènèt ofisyèl la, sa a se yon zouti pou otomatize entèraksyon ki genyen ant NiFI ak NiFi Rejis nan domèn livrezon koule oswa jesyon pwosesis. Pou kòmanse, ou bezwen telechaje zouti sa a. kon sa.

Lanse sèvis piblik la

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

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

Pou nou chaje koule ki nesesè nan rejis la, nou bezwen konnen idantifyan yo nan bokit la (idantifyan bokit) ​​ak koule nan tèt li (idantifyan koule). Done sa yo ka jwenn swa atravè cli a oswa nan koòdone entènèt rejis NiFi. Nan koòdone entènèt la li sanble sa a:

Otomatik livrezon koule nan Apache NiFi

Sèvi ak CLI sa a se fè:

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

Nou kòmanse enpòte gwoup pwosesis soti nan rejis:

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

Yon pwen enpòtan se ke nenpòt egzanp nifi ka espesifye kòm lame a ke nou woule gwoup la pwosesis.

Gwoup pwosesis te ajoute ak processeurs sispann, yo bezwen yo dwe kòmanse

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

Gwo, processeurs yo te kòmanse. Sepandan, dapre kondisyon travay la, nou bezwen egzanp NiFi pou voye done nan lòt ka. Ann sipoze ke ou te chwazi metòd la Pouse transfere done sou sèvè a. Yo nan lòd yo òganize transfè done, ou bezwen pèmèt transfè done sou te ajoute Remote Process Group (RPG), ki deja enkli nan koule nou an.

Otomatik livrezon koule nan Apache NiFi

Nan dokiman ki nan CLI a ak lòt sous, mwen pa t 'jwenn yon fason yo pèmèt transfè done. Si w konnen ki jan fè sa, tanpri ekri nan kòmantè yo.

Depi nou gen bash epi nou pare pou ale nan fen a, nou pral jwenn yon fason soti! Ou ka itilize API NiFi pou rezoud pwoblèm sa a. Ann sèvi ak metòd sa a, pran ID a nan egzanp ki anwo yo (nan ka nou an li se 7f522a13-016e-1000-e504-d5b15587f2f3). Deskripsyon metòd NiFi API isit la.

Otomatik livrezon koule nan Apache NiFi
Nan kò a ou bezwen pase JSON, tankou sa a:

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

Paramèt ki bezwen ranpli pou li travay:
te - estati transfè done. Disponib: TRANSMISYON pou pèmèt transfè done, SISPANN pou enfim
vèsyon - vèsyon processeur

vèsyon an pral default a 0 lè yo kreye, men paramèt sa yo ka jwenn lè l sèvi avèk metòd la

Otomatik livrezon koule nan Apache NiFi

Pou fanatik scripts bash, metòd sa a ka sanble apwopriye, men li yon ti jan difisil pou mwen - scripts bash yo pa pi renmen m '. Metòd kap vini an pi enteresan ak pratik nan opinyon mwen.

NiPyAPI

NiPyAPI se yon bibliyotèk Python pou kominike avèk egzanp NiFi. Paj dokimantasyon gen enfòmasyon ki nesesè pou travay ak bibliyotèk la. Demaraj rapid yo dekri nan bouyon an sou github.

Script nou an pou woule konfigirasyon an se yon pwogram nan Python. Ann ale nan kodaj.
Nou mete konfigirasyon pou plis travay. Nou pral bezwen paramèt sa yo:

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

Apre sa, mwen pral mete non metòd bibliyotèk sa a, ki dekri isit la.

Konekte rejis la nan egzanp nifi a lè l sèvi avèk

nipyapi.versioning.create_registry_client

Nan etap sa a, ou ka ajoute tou yon chèk ke rejis la te deja ajoute nan egzanp lan pou sa a ou ka itilize metòd la

nipyapi.versioning.list_registry_clients

Nou jwenn bokit la pou plis rechèch pou koule nan panyen an

nipyapi.versioning.get_registry_bucket

Sèvi ak bokit la jwenn, nou gade pou koule

nipyapi.versioning.get_flow_in_bucket

Apre sa, li enpòtan pou w konprann si gwoup pwosesis sa a te deja ajoute. Gwoup Pwosesis la mete dapre kowòdone yo epi yon sitiyasyon ka rive lè yon dezyèm eleman sipèpoze sou tèt youn. Mwen tcheke, sa ka rive :) Pou jwenn tout gwoup pwosesis te ajoute nou itilize metòd la

nipyapi.canvas.list_all_process_groups

Nou ka plis rechèch, pa egzanp, pa non.

Mwen pa pral dekri pwosesis la nan mete ajou modèl la, mwen pral sèlman di ke si processeurs yo ajoute nan nouvo vèsyon an nan modèl la, Lè sa a, pa gen okenn pwoblèm ak prezans nan mesaj nan ke moun kap kriye yo. Men, si yo retire processeurs, lè sa a pwoblèm ka leve (nifi pa pèmèt ou retire yon processeur si yon keu mesaj akimile devan li). Si w enterese nan fason mwen rezoud pwoblèm sa a, tanpri ekri m epi n ap diskite sou pwoblèm sa a. Kontak nan fen atik la. Ann ale nan etap la nan ajoute yon gwoup pwosesis.

Lè debogaj script la, mwen te vin atravè yon sengularite ke vèsyon an dènye nan koule pa toujou rale moute, kidonk mwen rekòmande tcheke vèsyon sa a an premye:

nipyapi.versioning.get_latest_flow_ver

Deplwaye gwoup pwosesis:

nipyapi.versioning.deploy_flow_version

Nou kòmanse processeurs yo:

nipyapi.canvas.schedule_process_group

Nan blòk la sou CLI li te ekri ke transfè done pa otomatikman pèmèt nan gwoup la pwosesis aleka? Lè m ap aplike script la, mwen te rankontre pwoblèm sa a tou. Lè sa a, mwen pa t 'kapab kòmanse transfè done lè l sèvi avèk API a epi mwen deside ekri pwomotè bibliyotèk NiPyAPI a epi mande konsèy / èd. Pwomotè a te reponn mwen, nou te diskite sou pwoblèm nan epi li te ekri ke li te bezwen tan pou "tcheke yon bagay". Lè sa a, yon koup de jou apre, yon lèt rive nan ki yon fonksyon ekri nan Python ki rezoud pwoblèm lansman mwen an !!! Nan tan sa a, vèsyon an NiPyAPI te 0.13.3 epi, nan kou, pa te gen anyen tankou sa. Men, nan vèsyon 0.14.0, ki te pibliye byen dènyèman, fonksyon sa a te deja enkli nan bibliyotèk la. Rankontre,

nipyapi.canvas.set_remote_process_group_transmission

Se konsa, lè l sèvi avèk bibliyotèk la NiPyAPI, nou konekte rejis la, woule soti koule, e menm te kòmanse processeurs ak transfè done. Lè sa a, ou ka penyen kòd la, ajoute tout kalite chèk, antre, ak sa a tout. Men, sa se yon istwa konplètman diferan.

Nan opsyon automatisation mwen konsidere, dènye a te sanble pi efikas la. Premyèman, sa a se toujou kòd python, nan ki ou ka entegre kòd pwogram oksilyè epi pran avantaj de tout benefis ki genyen nan lang nan pwogramasyon. Dezyèmman, pwojè NiPyAPI a ap devlope aktivman epi si gen pwoblèm ou ka ekri pwomotè a. Twazyèmman, NiPyAPI se toujou yon zouti ki pi fleksib pou kominike avèk NiFi nan rezoud pwoblèm konplèks. Pou egzanp, nan detèmine si ke moun kap kriye mesaj yo kounye a vid nan koule a epi si gwoup pwosesis la ka mete ajou.

Se tout. Mwen te dekri 3 apwòch pou otomatize livrezon koule nan NiFi, enkonvenyans ke yon pwomotè ka rankontre, epi mwen bay kòd k ap travay pou otomatize livrezon. Si w enterese nan sijè sa a menm jan mwen menm - ekri!

Sous: www.habr.com

Add nouvo kòmantè