Otomasyona radestkirina herikînê di Apache NiFi de

Hemûyan re merheba!

Otomasyona radestkirina herikînê di Apache NiFi de

Kar wiha ye - di wêneya jorîn de herikînek heye, ku pêdivî ye ku ji serverên N re bi Apache NiFi. Testa herikînê - pelek tê çêkirin û ji mînakek din a NiFi re tê şandin. Veguheztina daneyê bi karanîna protokola NiFi Malpera Malperê pêk tê.

Malpera NiFi ji Malperê (S2S) rêyek ewledar e, ku bi hêsanî tê mîheng kirin ji bo veguheztina daneyan di navbera mînakên NiFi de. S2S çawa dixebite, bibînin belgekirin û girîng e ku meriv ji bîr neke ku mînaka NiFi mîheng bike da ku destûrê bide S2S, binêre vir.

Di rewşên ku em li ser veguheztina daneyê bi karanîna S2S diaxivin, mînakek jê re muwekîlê, servera duyemîn tê gotin. Xerîdar daneyan dişîne, server distîne. Du awayên mîhengkirina veguheztina daneyê di navbera wan de:

  1. Lêqellibînî. Ji mînaka xerîdar, dane bi karanîna Koma Pêvajoya Dûr (RPG) tê şandin. Li ser mînaka serverê, dane bi karanîna Porta Ketinê tê wergirtin
  2. Kişandin. Pêşkêşker daneyan bi karanîna RPG-ê distîne, xerîdar bi karanîna porta derketinê dişîne.


Herikîna ji bo derxistinê di Registry Apache de tê hilanîn.

Apache NiFi Registry projeyek Apache NiFi ye ku amûrek ji bo hilanîna herikînê û kontrolkirina guhertoyê peyda dike. Cûreyek GIT. Agahdariya li ser sazkirin, mîhengkirin û xebata bi qeydê re dikare tê de were dîtin belgeyên fermî. Herikîna ji bo hilanînê di nav komek pêvajoyê de tête hev kirin û di vê formê de di qeydê de tê hilanîn. Em ê di vê gotarê de paşê vegerin.

Di destpêkê de, dema ku N hejmarek piçûk e, herikîn di demek pejirandî de bi destan tê şandin û nûve kirin.

Lê her ku N mezin dibe, pirsgirêk pirtir dibin:

  1. ji bo nûvekirina herikînê bêtir wext digire. Pêdivî ye ku hûn têkevin hemî pêşkêşkeran
  2. Çewtiyên nûvekirina şablonê çêdibin. Li vir ew nûve kirin, lê li vir wan ji bîr kir
  3. şaşiyên mirovî dema ku hejmareke mezin ji operasyonên wekhev pêk tînin

Hemî ev me digihîne vê rastiyê ku em hewce ne ku pêvajoyê otomatîk bikin. Min rêyên jêrîn ceriband ku vê pirsgirêkê çareser bikim:

  1. Li şûna NiFi MiNiFi bikar bînin
  2. NiFi CLI
  3. NiPyAPI

Bikaranîna MiNiFi

Apache MiNiFy - subprojeya Apache NiFi. MiNiFy karmendek kompakt e ku heman pêvajoyên wekî NiFi bikar tîne, ku dihêle hûn heman herikên ku di NiFi de biafirînin. Xwezaya sivik a ajanê, di nav tiştên din de, ji hêla rastiya ku MiNiFy ji bo veavakirina herikê xwedan navberek grafîkî nîne, tê bidestxistin. Nebûna navgînek grafîkî ya ji bo MiNiFy tê vê wateyê ku pêdivî ye ku pirsgirêka radestkirina herikînê ji minifi re were çareser kirin. Ji ber ku MiNiFy bi aktîvî di IOT de tê bikar anîn, gelek beş hene û pêdivî ye ku pêvajoya gihandina herikînê ji mînakên minifi-ya paşîn re bixweber be. Karekî naskirî, rast?

Binprojeyek din dê alîkariya çareserkirina vê pirsgirêkê bike - MiNiFi C2 Server. Ev hilber tête armanc kirin ku bibe xala navendî di mîmariya vesazkirina veavakirinê de. Meriv çawa jîngehê mîheng dike - di nav de tête diyar kirin vê gotara Ji bo çareserkirina pirsgirêkê li ser Habré agahdarî têra xwe heye. MiNiFi, digel servera C2, bixweber veavakirina xwe nûve dike. Tenê kêmasiya vê nêzîkatiyê ev e ku hûn neçar in ku li ser Servera C2 şablonan biafirînin;

Vebijarka ku di gotara li jor de hatî destnîşan kirin dixebite û ne dijwar e ku were bicîh kirin, lê divê em jêrîn ji bîr nekin:

  1. Minifi ne hemî pêvajoyên ji nifi ne
  2. Guhertoyên pêvajoya Minifi li pişt guhertoyên pêvajoya NiFi-yê dimînin.

Di dema nivîsandinê de, guhertoya herî dawî ya NiFi 1.9.2 e. Guhertoya herî dawî ya pêvajoyê ya MiNiFi 1.7.0 e. Pêvajo dikare li MiNiFi were zêdekirin, lê ji ber nakokiyên guhertoyên di navbera pêvajoyên NiFi û MiNiFi de, dibe ku ev nexebite.

NiFi CLI

Bi darizandin terîf amûrek li ser malpera fermî, ev amûrek ji bo otomatîkkirina danûstendina di navbera NiFI û NiFi Registry de di warê radestkirina herikînê an rêveberiya pêvajoyê de ye. Ji bo ku hûn dest pê bikin, hûn hewce ne ku vê amûrê dakêşin. ji vir.

Karûbar dest pê bikin

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

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

Ji bo ku em herikîna pêwîst ji qeydê bar bikin, pêdivî ye ku em nasnameyên kepçeyê (nasnameya kepçeyê) û herikîna xwe (nasnameya herikînê) zanibin. Ev dane dikare bi navgîniya cli an jî di navgîniya tevneya tomara NiFi de were bidestxistin. Di navgîniya webê de wusa xuya dike:

Otomasyona radestkirina herikînê di Apache NiFi de

Bi karanîna CLI ev tê kirin:

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

Em dest bi anîna koma pêvajoyê ji qeydê dikin:

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

Xalek girîng ev e ku her mînakek nifi dikare wekî mêvandarê ku em grûpa pêvajoyê lê dizivirînin were destnîşan kirin.

Koma pêvajoyê bi pêvajoyên rawestandî ve hatî zêdekirin, pêdivî ye ku ew werin destpêkirin

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

Mezin, pêvajo dest pê kir. Lêbelê, li gorî şertên peywirê, em hewce ne ku mînakên NiFi-yê bidin ku daneyan ji mînakên din re bişînin. Ka em bihesibînin ku we rêbaza Push hilbijartiye da ku daneyan biguhezîne serverê. Ji bo ku hûn veguheztina daneyê organîze bikin, hûn hewce ne ku veguheztina daneyê li ser Koma Pêvajoya Dûr a pêvekirî (RPG), ku jixwe di herikîna me de ye, çalak bikin.

Otomasyona radestkirina herikînê di Apache NiFi de

Di belgeyên di CLI û çavkaniyên din de, min rêyek nedît ku veguheztina daneyê çalak bikim. Heke hûn dizanin ka meriv çawa vê yekê dike, ji kerema xwe di şîroveyan de binivîsin.

Ji ber ku me bash heye û em amade ne ku heta dawiyê herin, em ê rêyekê bibînin! Hûn dikarin API-a NiFi bikar bînin ku vê pirsgirêkê çareser bikin. Ka em rêbaza jêrîn bikar bînin, nasnameyê ji mînakên jorîn bistînin (di rewşa me de ew 7f522a13-016e-1000-e504-d5b15587f2f3 e). Danasîna rêbazên NiFi API vir.

Otomasyona radestkirina herikînê di Apache NiFi de
Di laşê de hûn hewce ne ku JSON derbas bikin, bi vî rengî:

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

Parametreyên ku divê bêne dagirtin da ku ew bixebite:
rewş - Rewşa veguhastina daneyê. Berdest e: VEGIRTIN ji bo çalakkirina veguheztina daneyê, STOPPED ji bo neçalakkirinê
awa - guhertoya pêvajoyê

guherto dê dema ku were afirandin wekî 0-yê xwerû, lê ev pîvan bi karanîna rêbazê têne wergirtin

Otomasyona radestkirina herikînê di Apache NiFi de

Ji bo temaşevanên nivîsarên bash, dibe ku ev rêbaz minasib xuya bike, lê ew ji min re hinekî dijwar e - nivîsarên bash ne bijareya min in. Rêbaza paşîn li gorî min balkêştir û hêsantir e.

NiPyAPI

NiPyAPI pirtûkxaneyek Python e ku ji bo danûstendina bi mînakên NiFi re ye. Rûpelê belgekirinê agahiyên pêwîst ji bo xebatê bi pirtûkxaneyê dihewîne. Destpêka bilez di nav de tête diyar kirin pêşnûme li ser github.

Skrîpta me ya ji bo derxistina veavakirinê bernameyek di Python de ye. Ka em derbasî kodkirinê bibin.
Me ji bo xebata bêtir mîhengan saz kir. Em ê hewceyê pîvanên jêrîn hewce ne:

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

Paşê ez ê navên rêbazên vê pirtûkxaneyê, yên ku hatine vegotin, têxim nav vir.

Tomarê bi mînaka nifi ve girêdin

nipyapi.versioning.create_registry_client

Di vê gavê de, hûn dikarin kontrolek jî lê zêde bikin ku qeyd ji berê ve li nimûneyê hatî zêdekirin ji bo vê yekê hûn dikarin rêbazê bikar bînin

nipyapi.versioning.list_registry_clients

Em kelek ji bo lêgerîna bêtir ji bo herikîna di selikê de dibînin

nipyapi.versioning.get_registry_bucket

Bi karanîna kepçeya hatî dîtin, em li herikînê digerin

nipyapi.versioning.get_flow_in_bucket

Dûv re, girîng e ku meriv fêm bike ka ev koma pêvajoyê jixwe hatî zêdekirin an na. Koma Pêvajoyê li gorî hevrêzan tê danîn û dibe ku rewşek çêbibe dema ku pêkhateyek duyemîn li ser yek were danîn. Min kontrol kir, ev dikare bibe :) Ji bo ku hemî komên pêvajoyê yên zêdekirî bistînin em rêbazê bikar tînin

nipyapi.canvas.list_all_process_groups

Em dikarin bêtir lêgerîn, wek nimûne, bi navê.

Ez ê pêvajoya nûvekirina şablonê venabêjim, ez ê tenê bibêjim ku ger di guhertoya nû ya şablonê de pêvajo werin zêdekirin, wê hingê di nav rêzan de ti pirsgirêk tune. Lê heke pêvajoyek were rakirin, wê hingê dibe ku pirsgirêk derkevin (nifi rê nade we ku hûn pêvajoyek derxînin ger rêzek peyamê li ber wê kom bûye). Ger bala we dikişîne ka min çawa ev pirsgirêk çareser kir, ji kerema xwe ji min re binivîsin û em ê li ser vê pirsgirêkê nîqaş bikin. Têkilî di dawiya gotarê de. Werin em biçin qonaxa lêzêdekirina komek pêvajoyê.

Dema ku skrîptê jêbirin, ez rastî taybetmendiyek hatim ku guhertoya herî dawî ya herikînê her gav nayê kişandin, ji ber vê yekê ez pêşniyar dikim ku pêşî vê guhertoyê kontrol bikin:

nipyapi.versioning.get_latest_flow_ver

Koma pêvajoya sazkirinê:

nipyapi.versioning.deploy_flow_version

Em pêvajoyê dest pê dikin:

nipyapi.canvas.schedule_process_group

Di bloka derbarê CLI de hate nivîsandin ku veguheztina daneyê di koma pêvajoya dûr de bixweber nayê çalak kirin? Dema cîbicîkirina senaryoyê, ez jî rastî vê pirsgirêkê hatim. Wê demê, min nekarî dest bi veguheztina daneyê bi karanîna API-yê bikim û min biryar da ku ji pêşdebirê pirtûkxaneya NiPyAPI re binivîsim û ji bo şêwirdariyê/alîkariyê bipirsim. Pêşdebir bersiv da min, me pirsgirêk nîqaş kir û wî nivîsand ku ji wî re dem hewce ye ku "tiştek kontrol bike". Û dûv re, çend roj şûnda, nameyek tê ku tê de fonksiyonek di Python de hatî nivîsandin ku pirsgirêka destpêkirina min çareser dike!!! Wê demê, guhertoya NiPyAPI 0.13.3 bû û, bê guman, tiştek wusa tune. Lê di guhertoya 0.14.0 de, ku di van demên dawî de hate berdan, ev fonksiyon berê di pirtûkxaneyê de bû. Lihevrasthatin,

nipyapi.canvas.set_remote_process_group_transmission

Ji ber vê yekê, bi karanîna pirtûkxaneya NiPyAPI, me qeydê ve girêda, herikandin, û tewra dest bi pêvajo û veguheztina daneyê kir. Dûv re hûn dikarin kodê bişopînin, her cûre kontrol, têketin lê zêde bikin, û ew hemî ye. Lê ew çîrokek bi tevahî cûda ye.

Ji vebijarkên otomasyonê ku min fikirî, ya paşîn ji min re ya herî bikêr xuya bû. Ya yekem, ev hîn jî koda python e, ku hûn dikarin koda bernameya alîkar têxin nav xwe û ji hemî feydeyên zimanê bernamekirinê sûd werbigirin. Ya duyemîn, projeya NiPyAPI bi rengek çalak pêş dikeve û di rewşên pirsgirêkan de hûn dikarin ji pêşdebir re binivîsin. Ya sêyemîn, NiPyAPI hîn jî amûrek maqûltir e ku ji bo danûstendina bi NiFi re di çareserkirina pirsgirêkên tevlihev de. Mînakî, di destnîşankirina ka gelo rêzikên peyamê naha di herikînê de vala ne û gelo koma pêvajoyê dikare were nûve kirin.

Navê pêger. Min 3 nêzîkatiyên ji bo otomatkirina radestkirina herikînê li NiFi, xefikên ku dibe ku pêşdebirek pê re rû bi rû bimîne diyar kir, û koda xebatê ji bo radestkirina otomatîkî peyda kir. Ger hûn jî wekî min bi vê mijarê re eleqedar in - nivîsîn!

Source: www.habr.com

Add a comment