Awtomeiddio Cyflenwi Llif yn Apache NiFi

Helo bawb!

Awtomeiddio Cyflenwi Llif yn Apache NiFi

Mae'r dasg fel a ganlyn - mae llif yn cael ei ddangos yn y llun uchod, sydd angen ei gyflwyno i weinyddion N gyda Apache NiFi. Prawf llif - mae ffeil yn cael ei chynhyrchu a'i hanfon i enghraifft NiFi arall. Mae trosglwyddo data yn digwydd gan ddefnyddio protocol Safle i Safle NiFi.

Mae Safle i Safle NiFi (S2S) yn ffordd ddiogel, hynod addasadwy o drosglwyddo data rhwng achosion NiFi. Gweld sut mae S2S yn gweithio dogfennaeth ac mae'n bwysig cofio gosod eich enghraifft NiFi i ganiatáu i S2S weld yma.

O ran trosglwyddo data gan ddefnyddio S2S, gelwir un enghraifft yn gleient, a'r ail yw gweinydd. Mae'r cleient yn anfon data, mae'r gweinydd yn ei dderbyn. Dwy ffordd o sefydlu trosglwyddiad data rhyngddynt:

  1. Gwthiwch. O enghraifft y cleient, anfonir data gan ddefnyddio Grŵp Proses o Bell (RPG). Yn achos y gweinydd, derbynnir data gan ddefnyddio'r Porth Mewnbwn
  2. Tynnwch. Mae'r gweinydd yn derbyn data gan ddefnyddio'r RPG, mae'r cleient yn ei anfon gan ddefnyddio'r porthladd Allbwn.


Mae llif ar gyfer cyflwyno yn cael ei storio yng Nghofrestrfa Apache.

Mae Cofrestrfa Apache NiFi yn is-brosiect o Apache NiFi sy'n darparu offeryn storio llif a fersiwn. Rhyw fath o GIT. Gellir dod o hyd i wybodaeth am osod, ffurfweddu a gweithio gyda'r gofrestrfa yn dogfennaeth swyddogol. Mae llif ar gyfer storio yn cael ei gyfuno'n grŵp proses a'i storio yn y gofrestrfa yn y ffurflen hon. Byddwn yn dychwelyd at hyn yn ddiweddarach yn yr erthygl.

Ar y dechrau, pan fo N yn nifer fach, mae'r llif yn cael ei ddanfon a'i ddiweddaru â llaw mewn amser rhesymol.

Ond wrth i N dyfu, mae mwy o broblemau:

  1. mae'n cymryd mwy o amser i ddiweddaru'r llif. Mae angen i chi fynd i bob gweinydd
  2. mae gwallau wrth ddiweddaru templedi. Yma maent yn diweddaru, ond yma maent wedi anghofio
  3. gwall dynol wrth gyflawni nifer fawr o weithrediadau tebyg

Daw hyn i gyd â ni at y ffaith bod angen awtomeiddio'r broses. Rwyf wedi rhoi cynnig ar y ffyrdd canlynol i ddatrys y broblem hon:

  1. Defnyddiwch MiNiFi yn lle NiFi
  2. NiFi CLI
  3. NiPyAPI

Defnyddio MiNiFi

ApacheMiNify yn is-brosiect o Apache NiFi. Mae MiNiFy yn asiant cryno sy'n defnyddio'r un proseswyr â NiFi, sy'n eich galluogi i greu'r un llif ag yn NiFi. Cyflawnir ysgafnder yr asiant, ymhlith pethau eraill, oherwydd y ffaith nad oes gan MiNiFy ryngwyneb graffigol ar gyfer y cyfluniad llif. Mae diffyg rhyngwyneb graffigol MiNiFy yn golygu bod angen datrys y broblem o gyflenwi llif mewn minifi. Gan fod MiNiFy yn cael ei ddefnyddio'n weithredol mewn IOT, mae yna lawer o gydrannau a rhaid i'r broses o gyflwyno llif i achosion minifi terfynol fod yn awtomataidd. Tasg gyfarwydd, iawn?

Bydd is-brosiect arall, Gweinydd MiNiFi C2, yn helpu i ddatrys y broblem hon. Bwriedir i'r cynnyrch hwn fod yn bwynt canolog yn y bensaernïaeth lleoli. Sut i ffurfweddu'r amgylchedd - disgrifir yn Mae'r erthygl hon yn ar Habré ac mae'r wybodaeth yn ddigon i ddatrys y broblem. Mae MiNiFi ar y cyd â'r gweinydd C2 yn diweddaru ei ffurfweddiad yn awtomatig. Unig anfantais y dull hwn yw bod yn rhaid i chi greu templedi ar y Gweinydd C2, nid yw ymrwymiad syml i'r gofrestrfa yn ddigon.

Mae'r opsiwn a ddisgrifir yn yr erthygl uchod yn gweithio ac nid yw'n anodd ei weithredu, ond ni ddylem anghofio'r canlynol:

  1. Nid oes gan minifi holl broseswyr gan nifi
  2. Mae fersiynau CPU yn Minifi ar ei hôl hi o gymharu â fersiynau CPU yn NiFi.

Ar adeg ysgrifennu, y fersiwn ddiweddaraf o NiFi yw 1.9.2. Fersiwn prosesydd y fersiwn MiNiFi diweddaraf yw 1.7.0. Gellir ychwanegu proseswyr at MiNiFi, ond oherwydd anghysondebau fersiwn rhwng proseswyr NiFi a MiNiFi, efallai na fydd hyn yn gweithio.

NiFi CLI

Beirniadu gan disgrifiad offeryn ar y wefan swyddogol, mae hwn yn offeryn ar gyfer awtomeiddio'r rhyngweithio rhwng NiFI a Chofrestrfa NiFi ym maes cyflenwi llif neu reoli prosesau. Lawrlwythwch yr offeryn hwn i ddechrau. felly.

Rhedeg y cyfleustodau

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

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

Er mwyn i ni lwytho'r llif angenrheidiol o'r gofrestrfa, mae angen i ni wybod dynodwyr y fasged (dynodwr bwced) a'r llif ei hun (dynodwr llif). Gellir cael y data hwn naill ai trwy'r cli neu yn rhyngwyneb gwe cofrestrfa NiFi. Mae'r rhyngwyneb gwe yn edrych fel hyn:

Awtomeiddio Cyflenwi Llif yn Apache NiFi

Gan ddefnyddio'r CLI, rydych chi'n gwneud hyn:

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

Rhedeg grŵp proses mewnforio o'r gofrestrfa:

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

Pwynt pwysig yw y gellir nodi unrhyw enghraifft nifi fel y gwesteiwr yr ydym yn cyflwyno'r grŵp proses arno.

Ychwanegwyd grŵp proses gyda phroseswyr sydd wedi'u stopio, mae angen eu cychwyn

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

Gwych, mae'r proseswyr wedi dechrau. Fodd bynnag, yn ôl amodau'r broblem, mae angen achosion NiFi arnom i anfon data i achosion eraill. Gadewch i ni dybio bod y dull Push wedi'i ddewis i drosglwyddo data i'r gweinydd. Er mwyn trefnu trosglwyddo data, mae angen galluogi trosglwyddo data (Galluogi trosglwyddo) ar y Grŵp Proses Anghysbell (RPG) ychwanegol, sydd eisoes wedi'i gynnwys yn ein llif.

Awtomeiddio Cyflenwi Llif yn Apache NiFi

Yn y ddogfennaeth yn y CLI a ffynonellau eraill, ni wnes i ddod o hyd i ffordd i alluogi trosglwyddo data. Os ydych chi'n gwybod sut i wneud hyn, ysgrifennwch y sylwadau.

Gan fod gennym bash ac rydym yn barod i fynd i'r diwedd, byddwn yn dod o hyd i ffordd allan! Gallwch ddefnyddio'r API NiFi i ddatrys y broblem hon. Gadewch i ni ddefnyddio'r dull canlynol, rydym yn cymryd yr ID o'r enghreifftiau uchod (yn ein hachos ni mae'n 7f522a13-016e-1000-e504-d5b15587f2f3). Disgrifiad o Ddulliau API NiFi yma.

Awtomeiddio Cyflenwi Llif yn Apache NiFi
Yn y corff, mae angen i chi basio JSON, o'r ffurf ganlynol:

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

Paramedrau y mae'n rhaid eu llenwi er mwyn “gweithio”:
Roedd - statws trosglwyddo data. TROSGLWYDDO Ar gael i alluogi trosglwyddo data, WEDI STOPIO i analluogi
fersiwn - fersiwn prosesydd

bydd fersiwn diofyn i 0 pan gaiff ei greu, ond gellir cael y paramedrau hyn gan ddefnyddio'r dull

Awtomeiddio Cyflenwi Llif yn Apache NiFi

I'r rhai sy'n hoff o sgriptiau bash, efallai y bydd y dull hwn yn ymddangos yn addas, ond mae'n anodd i mi - nid sgriptiau bash yw fy ffefryn. Mae'r ffordd nesaf yn fwy diddorol ac yn fwy cyfleus yn fy marn i.

NiPyAPI

Llyfrgell Python yw NiPyAPI ar gyfer rhyngweithio ag achosion NiFi. Tudalen dogfennaeth yn cynnwys y wybodaeth angenrheidiol i weithio gyda'r llyfrgell. Disgrifir cychwyn cyflym yn prosiect ar github.

Ein sgript ar gyfer cyflwyno'r ffurfweddiad yw rhaglen Python. Gadewch i ni symud ymlaen i godio.
Rydym yn sefydlu configs ar gyfer gwaith pellach. Bydd angen y paramedrau canlynol arnom:

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

Ymhellach byddaf yn mewnosod enwau dulliau'r llyfrgell hon, sy'n cael eu disgrifio yma.

Rydym yn cysylltu'r gofrestrfa i'r enghraifft nifi gan ddefnyddio

nipyapi.versioning.create_registry_client

Ar y cam hwn, gallwch hefyd ychwanegu siec bod y gofrestrfa eisoes wedi'i hychwanegu at yr enghraifft, ar gyfer hyn gallwch ddefnyddio'r dull

nipyapi.versioning.list_registry_clients

Rydyn ni'n dod o hyd i'r bwced i chwilio ymhellach am lif yn y fasged

nipyapi.versioning.get_registry_bucket

Gan ddefnyddio'r bwced a ddarganfuwyd, rydym yn edrych am lif

nipyapi.versioning.get_flow_in_bucket

Nesaf, mae'n bwysig deall a yw'r grŵp proses hwn eisoes wedi'i ychwanegu. Mae'r grŵp proses yn cael ei osod gan gyfesurynnau a gall sefyllfa godi pan fydd ail un yn cael ei arosod ar ben un. Gwiriais, gall fod yn 🙂 I gael yr holl grŵp proses ychwanegol, defnyddiwch y dull

nipyapi.canvas.list_all_process_groups

ac yna gallwn chwilio, er enghraifft, yn ôl enw.

Ni fyddaf yn disgrifio'r broses o ddiweddaru'r templed, dim ond os ychwanegir proseswyr yn y fersiwn newydd o'r templed y byddaf yn dweud, yna nid oes unrhyw broblemau gyda phresenoldeb negeseuon yn y ciwiau. Ond os caiff y proseswyr eu tynnu, yna gall problemau godi (nid yw nifi yn caniatáu tynnu'r prosesydd os yw ciw neges wedi cronni o'i flaen). Os oes gennych ddiddordeb mewn sut y gwnes i ddatrys y broblem hon - ysgrifennwch ataf, os gwelwch yn dda, byddwn yn trafod y pwynt hwn. Cysylltiadau ar ddiwedd yr erthygl. Gadewch i ni symud ymlaen at y cam o ychwanegu grŵp proses.

Wrth ddadfygio'r sgript, deuthum ar draws nodwedd nad yw'r fersiwn ddiweddaraf o lif yn cael ei thynnu i fyny bob amser, felly rwy'n argymell eich bod yn egluro'r fersiwn hon yn gyntaf:

nipyapi.versioning.get_latest_flow_ver

Defnyddio grŵp proses:

nipyapi.versioning.deploy_flow_version

Rydyn ni'n dechrau'r proseswyr:

nipyapi.canvas.schedule_process_group

Yn y bloc am CLI, ysgrifennwyd nad yw trosglwyddo data yn cael ei alluogi yn awtomatig yn y grŵp proses anghysbell? Wrth weithredu'r sgript, deuthum ar draws y broblem hon hefyd. Bryd hynny, ni allwn ddechrau trosglwyddo data gan ddefnyddio'r API a phenderfynais ysgrifennu at ddatblygwr llyfrgell NiPyAPI a gofyn am gyngor / help. Atebodd y datblygwr fi, buom yn trafod y broblem ac ysgrifennodd ei fod angen amser i “wirio rhywbeth”. A nawr, cwpl o ddiwrnodau yn ddiweddarach, mae e-bost yn cyrraedd lle mae swyddogaeth Python wedi'i ysgrifennu sy'n datrys fy mhroblem cychwyn !!! Bryd hynny, fersiwn NiPyAPI oedd 0.13.3 ac, wrth gwrs, nid oedd dim byd o'r fath ynddo. Ond yn fersiwn 0.14.0, a ryddhawyd yn eithaf diweddar, mae'r swyddogaeth hon eisoes wedi'i chynnwys yn y llyfrgell. Cyfarfod

nipyapi.canvas.set_remote_process_group_transmission

Felly, gan ddefnyddio llyfrgell NiPyAPI, fe wnaethom gysylltu'r gofrestrfa, cyflwyno llif, a hyd yn oed ddechrau proseswyr a throsglwyddo data. Yna gallwch chi gribo'r cod, ychwanegu pob math o wiriadau, logio, a dyna i gyd. Ond stori hollol wahanol yw honno.

O'r opsiynau awtomeiddio a ystyriwyd gennyf, roedd yn ymddangos i mi mai'r un olaf oedd y mwyaf effeithlon. Yn gyntaf, cod python yw hwn o hyd, y gallwch chi ymgorffori cod rhaglen ategol ynddo a manteisio ar holl fanteision yr iaith raglennu. Yn ail, mae'r prosiect NiPyAPI wrthi'n datblygu ac yn achos problemau gallwch ysgrifennu at y datblygwr. Yn drydydd, mae NiPyAPI yn dal i fod yn offeryn mwy hyblyg ar gyfer rhyngweithio â NiFi wrth ddatrys problemau cymhleth. Er enghraifft, wrth benderfynu a yw'r ciwiau neges bellach yn wag yn y llif ac a ellir diweddaru'r grŵp proses.

Dyna i gyd. Disgrifiais 3 dull o awtomeiddio cyflenwi llif yn NiFi, y peryglon y gallai datblygwr ddod ar eu traws a darparais god gweithio ar gyfer awtomeiddio cyflenwi. Os oes gennych chi gymaint o ddiddordeb yn y pwnc hwn ag ydw i - ysgrifennu!

Ffynhonnell: hab.com

Ychwanegu sylw