Automation sa paghatud sa dagan sa Apache NiFi

Hello sa tanan!

Automation sa paghatud sa dagan sa Apache NiFi

Ang buluhaton mao ang mosunod - adunay usa ka dagan, nga gipresentar sa hulagway sa ibabaw, nga kinahanglan nga gilukot ngadto sa N server uban sa Apache NiFi. Pagsulay sa pag-agos - usa ka file ang gihimo ug gipadala sa lain nga pananglitan sa NiFi. Ang pagbalhin sa datos mahitabo gamit ang NiFi Site to Site protocol.

Ang NiFi Site to Site (S2S) usa ka luwas, dali nga ma-configure nga paagi sa pagbalhin sa datos tali sa mga higayon sa NiFi. Giunsa pagtrabaho ang S2S, tan-awa dokumentasyon ug importante nga dili kalimtan ang pag-configure sa NiFi nga pananglitan aron tugutan ang S2S, tan-awa dinhi.

Sa mga kaso diin naghisgot kami bahin sa pagbalhin sa datos gamit ang S2S, usa ka pananglitan ang gitawag nga kliyente, ang ikaduha nga server. Ang kliyente nagpadala sa datos, ang server makadawat. Duha ka paagi aron ma-configure ang pagbalhin sa data tali kanila:

  1. Push. Gikan sa pananglitan sa kliyente, ang datos gipadala gamit ang Remote Process Group (RPG). Sa pananglitan sa server, ang datos nadawat gamit ang Input Port
  2. Agawon. Ang server nakadawat data gamit ang RPG, ang kliyente nagpadala gamit ang Output port.


Ang agos alang sa pag-roll out gitipigan sa Apache Registry.

Ang Apache NiFi Registry usa ka subproyekto sa Apache NiFi nga naghatag usa ka himan alang sa pagtipig sa dagan ug pagkontrol sa bersyon. Usa ka matang sa GIT. Ang kasayuran bahin sa pag-install, pag-configure ug pagtrabaho kauban ang rehistro makita sa opisyal nga dokumentasyon. Ang agos alang sa pagtipig gihiusa sa usa ka grupo sa proseso ug gitipigan sa kini nga porma sa rehistro. Atong balikan kini sa ulahi sa artikulo.

Sa pagsugod, kung ang N gamay nga numero, ang dagan ipadala ug mano-mano nga gi-update sa usa ka madawat nga oras.

Apan samtang ang N motubo, ang mga problema mahimong mas daghan:

  1. nagkinahanglan kini og dugang nga panahon sa pag-update sa dagan. Kinahanglan ka nga mag-log in sa tanan nga mga server
  2. Nahitabo ang mga sayup sa pag-update sa template. Dinhi sila nag-update niini, apan dinhi sila nakalimot
  3. mga kasaypanan sa tawo kung naghimo sa daghang parehas nga mga operasyon

Kining tanan nagdala kanato sa kamatuoran nga kinahanglan natong i-automate ang proseso. Gisulayan nako ang mosunod nga mga paagi aron masulbad kini nga problema:

  1. Gamita ang MiNiFi imbes nga NiFi
  2. NiFi CLI
  3. NiPyAPI

Paggamit sa MiNiFi

Apache MiNiFy - subproyekto sa Apache NiFi. Ang MiNiFy usa ka compact agent nga naggamit sa parehas nga mga processor sama sa NiFi, nga nagtugot kanimo sa paghimo sa parehas nga mga agos sama sa NiFi. Ang gaan nga kinaiya sa ahente nakab-ot, taliwala sa ubang mga butang, pinaagi sa kamatuoran nga ang MiNiFy walay graphical interface alang sa pag-configure sa dagan. Ang kakulang sa usa ka graphical interface sa MiNiFy nagpasabot nga gikinahanglan ang pagsulbad sa problema sa paghatud sa dagan sa minifi. Tungod kay ang MiNiFy aktibo nga gigamit sa IOT, adunay daghang mga sangkap ug ang proseso sa paghatud sa dagan sa katapusan nga minifi nga mga higayon kinahanglan nga awtomatiko. Usa ka pamilyar nga buluhaton, dili ba?

Ang laing subproyekto makatabang sa pagsulbad niini nga problema - MiNiFi C2 Server. Kini nga produkto gituyo nga mahimong sentro nga punto sa configuration rollout architecture. Giunsa ang pag-configure sa palibot - gihulagway sa kini nga artikulo Adunay igo nga kasayuran sa HabrΓ© aron masulbad ang problema. Ang MiNiFi, inubanan sa C2 server, awtomatik nga nag-update sa configuration niini. Ang bugtong disbentaha niini nga pamaagi mao nga kinahanglan ka nga maghimo mga template sa C2 Server; ang usa ka yano nga pagpasalig sa rehistro dili igo.

Ang opsyon nga gihulagway sa artikulo sa ibabaw nagtrabaho ug dili lisud nga ipatuman, apan dili nato kalimtan ang mosunod:

  1. Ang Minifi wala'y tanan nga mga processor gikan sa nifi
  2. Ang mga bersyon sa Minifi processor naa sa luyo sa mga bersyon sa NiFi processor.

Sa panahon sa pagsulat, ang pinakabag-o nga bersyon sa NiFi mao ang 1.9.2. Ang pinakabag-o nga bersyon sa processor sa MiNiFi mao ang 1.7.0. Mahimong idugang ang mga processor sa MiNiFi, apan tungod sa mga kalainan sa bersyon tali sa mga processor sa NiFi ug MiNiFi, mahimong dili kini molihok.

NiFi CLI

Gihukman ni paghulagway tool sa opisyal nga website, kini usa ka himan alang sa pag-automate sa interaksyon tali sa NiFI ug NiFi Registry sa natad sa paghatud sa dagan o pagdumala sa proseso. Aron makasugod, kinahanglan nimo nga i-download kini nga himan. gikan dinhi.

Ilunsad ang utility

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

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

Aron ma-load ang gikinahanglan nga dagan gikan sa rehistro, kinahanglan naton mahibal-an ang mga identifier sa balde (bucket identifier) ​​​​ug ang dagan mismo (flow identifier). Kini nga datos mahimong makuha pinaagi sa cli o sa NiFi registry web interface. Sa web interface kini ingon niini:

Automation sa paghatud sa dagan sa Apache NiFi

Gamit ang CLI nahimo kini:

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

Nagsugod kami sa pag-import sa grupo sa proseso gikan sa rehistro:

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

Ang usa ka importante nga punto mao nga ang bisan unsang nifi nga instance mahimong ipiho isip host diin atong gi-roll ang proseso nga grupo.

Ang grupo sa proseso nga gidugang sa mga nahunong nga mga processor, kinahanglan nga magsugod sila

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

Nindot, nagsugod na ang mga processor. Bisan pa, sumala sa mga termino sa buluhaton, kinahanglan namon ang mga higayon sa NiFi aron ipadala ang datos sa ubang mga higayon. Ibutang ta nga imong gipili ang Push nga pamaagi sa pagbalhin sa data ngadto sa server. Aron maorganisar ang pagbalhin sa datos, kinahanglan nimo nga palihokon ang pagbalhin sa datos sa gidugang nga Remote Process Group (RPG), nga naapil na sa among dagan.

Automation sa paghatud sa dagan sa Apache NiFi

Sa dokumentasyon sa CLI ug uban pang mga tinubdan, wala koy nakit-an nga paagi aron mahimo ang pagbalhin sa datos. Kung nahibal-an nimo kung giunsa kini buhaton, palihug isulat sa mga komento.

Kay naa man tay bash ug andam na ta sa katapusan, mangita ta ug paagi! Mahimo nimong gamiton ang NiFi API aron masulbad kini nga problema. Atong gamiton ang mosunod nga pamaagi, kuhaa ang ID gikan sa mga pananglitan sa ibabaw (sa atong kaso kini mao ang 7f522a13-016e-1000-e504-d5b15587f2f3). Deskripsyon sa mga pamaagi sa NiFi API dinhi.

Automation sa paghatud sa dagan sa Apache NiFi
Sa lawas kinahanglan nimo nga ipasa ang JSON, sama niini:

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

Mga parametro nga kinahanglan pun-an aron kini molihok:
estado β€” kahimtang sa pagbalhin sa datos. Anaa: PAG-TRANSMIT aron mahimo ang pagbalhin sa datos, GIHUNONG aron ma-disable
nga bersyon - bersyon sa processor

Ang bersyon mahimong default sa 0 kung gibuhat, apan kini nga mga parameter mahimong makuha gamit ang pamaagi

Automation sa paghatud sa dagan sa Apache NiFi

Para sa mga fans sa bash scripts, kini nga pamaagi murag angayan, pero medyo lisod para nako - bash scripts dili nako paborito. Ang sunod nga pamaagi mas makapaikag ug kombenyente sa akong opinyon.

NiPyAPI

Ang NiPyAPI usa ka librarya sa Python alang sa pagpakig-uban sa mga higayon sa NiFi. Panid sa dokumentasyon naglangkob sa gikinahanglan nga impormasyon alang sa pagtrabaho uban sa librarya. Ang dali nga pagsugod gihulagway sa ang draft sa github.

Ang among script alang sa pag-roll out sa configuration usa ka programa sa Python. Mopadayon ta sa coding.
Nag-set up mi og mga config para sa dugang trabaho. Kinahanglan namon ang mosunod nga mga parameter:

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, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подтягиваСм

Sunod akong ibutang ang mga ngalan sa mga pamaagi niini nga librarya, nga gihulagway dinhi.

Ikonektar ang rehistro sa nifi nga pananglitan gamit ang

nipyapi.versioning.create_registry_client

Niini nga lakang, mahimo ka usab makadugang usa ka tseke nga ang rehistro nadugang na sa pananglitan; alang niini mahimo nimong gamiton ang pamaagi

nipyapi.versioning.list_registry_clients

Among pangitaon ang balde para sa dugang pagpangita sa dagan sa basket

nipyapi.versioning.get_registry_bucket

Gamit ang nakit-an nga balde, gipangita namon ang dagan

nipyapi.versioning.get_flow_in_bucket

Sunod, importante nga masabtan kung kini nga grupo sa proseso gidugang na. Ang grupo sa Proseso gibutang sumala sa mga koordinasyon ug ang usa ka sitwasyon mahimong motungha kung ang usa ka ikaduha nga sangkap gipatong sa ibabaw sa usa. Akong gisusi, kini mahimong mahitabo :) Aron makuha ang tanang dugang nga mga grupo sa proseso atong gigamit ang pamaagi

nipyapi.canvas.list_all_process_groups

Makapangita pa kita, pananglitan, pinaagi sa ngalan.

Dili nako ihulagway ang proseso sa pag-update sa template, isulti lang nako nga kung ang mga processor idugang sa bag-ong bersyon sa template, nan walay mga problema sa presensya sa mga mensahe sa mga pila. Apan kung ang mga processor tangtangon, nan ang mga problema mahimong motungha (nifi dili motugot kanimo sa pagtangtang sa usa ka processor kung ang usa ka mensahe nga pila natipon sa atubangan niini). Kung interesado ka kung giunsa nako pagsulbad kini nga problema, palihug pagsulat kanako ug hisgutan namon kini nga isyu. Mga kontak sa katapusan sa artikulo. Mopadayon kita sa lakang sa pagdugang usa ka grupo sa proseso.

Kung nag-debug sa script, nakit-an nako ang usa ka talagsaon nga ang pinakabag-o nga bersyon sa dagan dili kanunay gibira, mao nga girekomenda nako nga susihon una kini nga bersyon:

nipyapi.versioning.get_latest_flow_ver

I-deploy ang grupo sa proseso:

nipyapi.versioning.deploy_flow_version

Gisugdan namon ang mga processor:

nipyapi.canvas.schedule_process_group

Sa block bahin sa CLI gisulat nga ang pagbalhin sa data dili awtomatik nga mahimo sa hilit nga grupo sa proseso? Sa pag-implementar sa script, nakasugat usab ako niini nga problema. Niadtong panahona, wala ko makasugod sa pagbalhin sa datos gamit ang API ug nakahukom ko nga magsulat sa developer sa NiPyAPI library ug mangayo og tambag/tabang. Ang developer mitubag kanako, among gihisgutan ang problema ug siya misulat nga siya nagkinahanglan og panahon sa "pagsusi sa usa ka butang". Ug unya, paglabay sa pipila ka adlaw, miabot ang usa ka sulat diin ang usa ka function gisulat sa Python nga nagsulbad sa akong problema sa paglansad !!! Niadtong panahona, ang bersyon sa NiPyAPI mao ang 0.13.3 ug, siyempre, wala'y ingon niana. Apan sa bersyon 0.14.0, nga bag-o lang gipagawas, kini nga function gilakip na sa librarya. Magkita,

nipyapi.canvas.set_remote_process_group_transmission

Busa, gamit ang NiPyAPI library, among gikonektar ang registry, gilukot ang dagan, ug gisugdan pa gani ang mga processor ug pagbalhin sa data. Dayon mahimo nimong isuklay ang code, idugang ang tanang matang sa mga tseke, pag-log, ug kana lang. Apan kana usa ka hingpit nga lahi nga istorya.

Sa mga opsyon sa automation nga akong gikonsiderar, ang naulahi para nako mao ang labing episyente. Una, kini gihapon ang python code, diin mahimo nimong i-embed ang auxiliary program code ug pahimuslan ang tanan nga mga benepisyo sa programming language. Ikaduha, ang proyekto sa NiPyAPI aktibo nga nag-uswag ug kung adunay mga problema mahimo nimong sulatan ang developer. Ikatulo, ang NiPyAPI usa gihapon ka mas flexible nga himan alang sa pagpakig-uban sa NiFi sa pagsulbad sa mga komplikadong problema. Pananglitan, sa pagtino kung ang mga linya sa mensahe wala’y sulod sa dagan ug kung ang grupo sa proseso mahimong ma-update.

Mao ra. Gihubit nako ang 3 nga mga pamaagi sa pag-automate sa paghatud sa dagan sa NiFi, mga pitfalls nga mahimong masugatan sa usa ka developer, ug naghatag ug nagtrabaho nga code alang sa pag-automate sa paghatud. Kung interesado ka niini nga hilisgutan sama kanako - pagsulat!

Source: www.habr.com

Idugang sa usa ka comment