Автоматикунонии интиқол дар Apache NiFi

Салом хама!

Автоматикунонии интиқол дар Apache NiFi

Вазифа чунин аст - ҷараёне дар расми боло нишон дода шудааст, ки бояд ба N серверҳо интиқол дода шавад. Apache NiFi. Санҷиши ҷараён - файл тавлид мешавад ва ба дигар намунаи NiFi фиристода мешавад. Интиқоли маълумот бо истифода аз протоколи NiFi Site to Site сурат мегирад.

NiFi Site to Site (S2S) як роҳи бехатар ва хеле танзимшавандаи интиқоли маълумот байни мисолҳои NiFi мебошад. Бингар, ки чӣ тавр S2S кор мекунад хуччатхо ва муҳим аст, ки дар хотир дошта бошед, ки намунаи NiFi-и худро барои дидани S2S иҷозат диҳед дар ин ҷо.

Вақте ки сухан дар бораи интиқоли маълумот бо истифода аз S2S меравад, як мисол мизоҷ номида мешавад, дуюмаш сервер аст. Мизоҷ маълумот мефиристад, сервер онро қабул мекунад. Ду роҳи танзими интиқоли маълумот байни онҳо:

  1. Тела. Маълумот аз мисоли муштарӣ бо истифода аз Гурӯҳи равандҳои дурдаст (RPG) фиристода мешавад. Дар мисоли сервер маълумот бо истифода аз Порти Вуруд қабул карда мешавад
  2. Кашидан. Сервер маълумотро бо истифода аз RPG қабул мекунад, муштарӣ бо истифода аз порти баромад мефиристад.


Ҷараён барои гардиш дар Феҳристи Apache нигоҳ дошта мешавад.

Registry Apache NiFi зерлоиҳаи Apache NiFi мебошад, ки асбоби нигоҳдории ҷараён ва нусхабардориро таъмин мекунад. Як навъ GIT. Маълумотро дар бораи насб, конфигуратсия ва кор бо реестр дар зер пайдо кардан мумкин аст ҳуҷҷатҳои расмӣ. Ҷараён барои нигоҳдорӣ ба як гурӯҳи равандҳо муттаҳид карда мешавад ва дар ин шакл дар реестр нигоҳ дошта мешавад. Мо ба ин баъдтар дар мақола бармегардем.

Дар оғоз, вақте ки N рақами хурд аст, ҷараён бо дасти худ дар вақти мувофиқ интиқол дода мешавад ва нав карда мешавад.

Аммо бо афзоиши N, мушкилоти бештар вуҷуд дорад:

  1. барои навсозии ҷараёни он вақти бештар лозим аст. Шумо бояд ба ҳама серверҳо равед
  2. дар навсозии қолибҳо хатогиҳо вуҷуд доранд. Дар ин ҷо онҳо навсозӣ карданд, аммо дар ин ҷо онҳо фаромӯш карданд
  3. хатои инсон ҳангоми иҷрои шумораи зиёди амалиёти шабеҳ

Хамаи ин моро ба он оварда мерасонад, ки процессро автоматй кунондани он зарур аст. Ман роҳҳои зеринро барои ҳалли ин мушкилот кӯшиш кардам:

  1. Ба ҷои NiFi MiNiFi-ро истифода баред
  2. NiFi CLI
  3. NiPyAPI

Истифодаи MiNiFi

ApacheMiNify зерлоиҳаи Apache NiFi мебошад. MiNiFy як агенти паймонест, ки ҳамон протсессори NiFi-ро истифода мебарад ва ба шумо имкон медиҳад, ки ҷараёни ҳамон тавре ки дар NiFi эҷод кунед. Сабукии агент, аз ҷумла, бо сабаби он, ки MiNiFy барои конфигуратсияи ҷараён интерфейси графикӣ надорад, ба даст оварда мешавад. Набудани интерфейси графикии MiNiFy маънои онро дорад, ки мушкилоти интиқоли ҷараёнро дар minifi ҳал кардан лозим аст. Азбаски MiNiFy дар IOT фаъолона истифода мешавад, ҷузъҳои зиёде мавҷуданд ва раванди интиқоли ҷараён ба намунаҳои ниҳоии minifi бояд автоматӣ карда шавад. Вазифаи шинос, дуруст?

Зерлоиҳаи дигар, MiNiFi C2 Server, дар ҳалли ин мушкилот кӯмак хоҳад кард. Ин маҳсулот барои як нуқтаи марказии меъмории ҷойгиркунӣ пешбинӣ шудааст. Чӣ тавр танзим кардани муҳити зист - дар тавсиф ин мақола дар бораи Habré ва маълумот барои ҳалли мушкилот кофӣ аст. MiNiFi дар якҷоягӣ бо сервери C2 конфигуратсияи худро ба таври худкор нав мекунад. Ягона нуқсони ин равиш дар он аст, ки шумо бояд дар сервери C2 қолабҳо эҷод кунед, як ӯҳдадории оддӣ ба реестр кофӣ нест.

Варианти дар мақолаи дар боло тавсифшуда кор мекунад ва татбиқи он душвор нест, аммо мо набояд чизҳои зеринро фаромӯш кунем:

  1. minifi на ҳама протсессори nifi дорад
  2. Версияҳои CPU дар Minifi аз версияҳои CPU дар NiFi ақиб мемонанд.

Дар замони навиштан, версияи охирини NiFi 1.9.2 аст. Версияи протсессори версияи охирини MiNiFi 1.7.0 аст. Протсессорҳоро ба MiNiFi илова кардан мумкин аст, аммо аз сабаби ихтилофи версияи байни протсессори NiFi ва MiNiFi, ин кор намекунад.

NiFi CLI

Бо мурури тавсиф асбоб дар вебсайти расмӣ, ин асбобест барои автоматикунонии ҳамкории байни NiFI ва Registry NiFi дар соҳаи интиқоли ҷараён ё идоракунии раванд. Барои оғози кор ин асбобро зеркашӣ кунед. аз ин ҷо.

Утилитаро иҷро кунед

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

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

Барои он ки мо ҷараёни заруриро аз реестр бор кунем, мо бояд идентификаторҳои сабад (идентификатори сатил) ва худи ҷараёнро (идентификатори ҷараён) донем. Ин маълумотро тавассути cli ё дар веб-интерфейси реестри NiFi гирифтан мумкин аст. Интерфейси веб чунин менамояд:

Автоматикунонии интиқол дар Apache NiFi

Бо истифода аз CLI, шумо ин корро мекунед:

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

Гурӯҳи раванди воридотро аз феҳрист иҷро кунед:

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

Нуктаи муҳим ин аст, ки ҳама гуна мисоли nifi метавонад ҳамчун мизбоне, ки мо гурӯҳи равандро дар он мегузорем, муайян карда шавад.

Гурӯҳи равандҳо бо коркардкунандагони қатъшуда илова карда мешаванд, онҳо бояд оғоз карда шаванд

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

Хуб, коркардкунандагон оғоз шуданд. Аммо, мувофиқи шартҳои мушкилот, ба мо барои фиристодани маълумот ба дигар инстансияҳо намунаҳои NiFi лозим аст. Фарз мекунем, ки усули Push барои интиқоли маълумот ба сервер интихоб шудааст. Барои ташкили интиқоли маълумот, интиқоли маълумотро (Иқтидори интиқол) дар гурӯҳи иловагии равандҳои дурдаст (RPG), ки аллакай ба ҷараёни мо дохил карда шудааст, фаъол кардан лозим аст.

Автоматикунонии интиқол дар Apache NiFi

Дар ҳуҷҷатҳо дар CLI ва дигар манбаъҳо ман роҳи имкон додани интиқоли маълумотро наёфтам. Агар шумо медонед, ки чӣ тавр ин корро кардан лозим аст, лутфан дар шарҳҳо нависед.

Азбаски мо баш дорем ва омодаем то ба охир биравем, мо роҳи халосиро хоҳем ёфт! Шумо метавонед NiFi API-ро барои ҳалли ин мушкилот истифода баред. Биёед усули зеринро истифода барем, мо ID-ро аз мисолҳои дар боло овардашуда мегирем (дар ҳолати мо он 7f522a13-016e-1000-e504-d5b15587f2f3 аст). Тавсифи усулҳои NiFi API дар ин ҷо.

Автоматикунонии интиқол дар Apache NiFi
Дар бадан, шумо бояд JSON-ро аз шакли зерин гузаред:

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

Параметрҳое, ки бояд барои "кор" пур карда шаванд:
давлат - ҳолати интиқоли маълумот. Интиқоли дастрас барои имкон додани интиқоли маълумот, ҚАТЪ КАРДА барои хомӯш кардан
нусхаи - версияи коркардкунанда

версия ҳангоми сохтан ба 0 муқаррар карда мешавад, аммо ин параметрҳоро бо истифода аз усул ба даст овардан мумкин аст

Автоматикунонии интиқол дар Apache NiFi

Барои дӯстдорони скриптҳои bash, ин усул метавонад мувофиқ бошад, аммо ин барои ман душвор аст - скриптҳои bash дӯстдоштаи ман нестанд. Усули навбатӣ ба назари ман ҷолибтар ва қулайтар аст.

NiPyAPI

NiPyAPI китобхонаи Python барои ҳамкорӣ бо мисолҳои NiFi мебошад. Саҳифаи ҳуҷҷатгузорӣ дорои маълумоти зарурӣ барои кор бо китобхона. Оғози зуд дар тавсиф шудааст лоихаи дар github.

Скрипти мо барои паҳн кардани конфигуратсия як барномаи Python аст. Биёед ба рамзгузорӣ гузарем.
Барои кори минбаъда конфигуратсияҳоро насб кунед. Мо ба параметрҳои зерин ниёз дорем:

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

Минбаъд ман номҳои усулҳои ин китобхонаро, ки тавсиф шудаанд, дохил мекунам дар ин ҷо.

Мо бо истифода аз реестрро ба мисоли nifi пайваст мекунем

nipyapi.versioning.create_registry_client

Дар ин қадам, шумо инчунин метавонед чекеро илова кунед, ки феҳрист аллакай ба инстансия илова карда шудааст, барои ин шумо метавонед усулро истифода баред

nipyapi.versioning.list_registry_clients

Мо сатилро барои ҷустуҷӯи минбаъдаи ҷараёни дар сабад пайдо мекунем

nipyapi.versioning.get_registry_bucket

Мувофиқи сатили ёфтшуда мо ҷараёнро меҷӯем

nipyapi.versioning.get_flow_in_bucket

Баъдан, фаҳмидан муҳим аст, ки оё ин гурӯҳи раванд аллакай илова карда шудааст. Гурӯҳи равандҳо аз рӯи координатҳо ҷойгир карда шудааст ва вазъ метавонад ҳангоми ҷойгир кардани дуюм дар болои як. Ман тафтиш, он метавонад 🙂 Барои ба даст овардани ҳамаи гурӯҳи раванди иловашуда, истифода усули

nipyapi.canvas.list_all_process_groups

ва он гоҳ мо метавонем, масалан, аз рӯи ном ҷустуҷӯ кунем.

Ман раванди навсозии шаблонро тавсиф намекунам, танҳо мегӯям, ки агар протсессорҳо дар версияи нави қолаб илова карда шаванд, пас бо мавҷудияти паёмҳо дар навбат мушкилот вуҷуд надорад. Аммо агар протсессорҳо хориҷ карда шаванд, пас мушкилот метавонад ба миён ояд (nifi имкон намедиҳад, ки протсессор хориҷ карда шавад, агар дар пеши он навбати паём ҷамъ шуда бошад). Агар шумо ба он таваҷҷӯҳ дошта бошед, ки ман ин мушкилотро чӣ гуна ҳал кардам - ​​ба ман нависед, лутфан, мо ин масъаларо муҳокима хоҳем кард. Тамосҳо дар охири мақола. Биёед ба марҳилаи илова кардани гурӯҳи равандҳо гузарем.

Ҳангоми ислоҳи скрипт, ман бо хусусияте дучор шудам, ки версияи охирини ҷараён на ҳамеша боло кашида мешавад, бинобар ин ман тавсия медиҳам, ки аввал ин версияро равшан кунед:

nipyapi.versioning.get_latest_flow_ver

Ҷойгир кардани гурӯҳи равандҳо:

nipyapi.versioning.deploy_flow_version

Протсессорҳоро оғоз кунед:

nipyapi.canvas.schedule_process_group

Дар блок дар бораи CLI навишта шудааст, ки интиқоли маълумот дар гурӯҳи равандҳои дурдаст ба таври худкор фаъол нест? Ҳангоми татбиқи скрипт, ман низ ба ин мушкилот дучор шудам. Он вақт ман интиқоли маълумотро бо истифода аз API оғоз карда натавонистам ва ман қарор додам, ки ба таҳиягари китобхонаи NiPyAPI нависед ва маслиҳат / кӯмак пурсам. Таҳиягар ба ман ҷавоб дод, мо мушкилотро муҳокима кардем ва ӯ навишт, ки барои "санҷидани чизе" вақт лозим аст. Ва акнун, пас аз чанд рӯз, почтаи электронӣ меояд, ки дар он функсияи Python навишта шудааст, ки мушкилоти оғози маро ҳал мекунад !!! Дар он вақт, версияи NiPyAPI 0.13.3 буд ва, албатта, дар он чизе вуҷуд надошт. Аммо дар версияи 0.14.0, ки ба наздикӣ бароварда шуд, ин функсия аллакай ба китобхона дохил карда шудааст. Вохӯред

nipyapi.canvas.set_remote_process_group_transmission

Ҳамин тавр, бо ёрии китобхонаи NiPyAPI, мо реестрро пайваст кардем, ҷараёнро ҷамъ кардем ва ҳатто протсессорҳо ва интиқоли маълумотро оғоз кардем. Он гоҳ шумо метавонед рамзро шона кунед, ҳама гуна чекҳоро илова кунед, бақайдгирӣ кунед ва тамом. Аммо ин як ҳикояи тамоман дигар аст.

Аз имконоти автоматикуноние, ки ман баррасӣ кардам, охирин ба назарам самараноктарин буд. Аввалан, ин рамзи python аст, ки дар он шумо метавонед рамзи ёрирасонро ворид кунед ва аз тамоми бартариҳои забони барномасозӣ баҳра баред. Дуюм, лоиҳаи NiPyAPI фаъолона рушд мекунад ва дар сурати мушкилот шумо метавонед ба таҳиякунанда нависед. Сеюм, NiPyAPI ҳоло ҳам як воситаи фасеҳтар барои ҳамкорӣ бо NiFi дар ҳалли мушкилоти мураккаб аст. Масалан, ҳангоми муайян кардани он, ки оё навбатҳои паёмҳо дар ҷараёни ҳозир холӣ ҳастанд ва оё он имконпазир аст, ки гурӯҳи равандро навсозӣ кунед.

Ҳамааш ҳамин. Ман 3 равишро барои автоматикунонии интиқоли ҷараён дар NiFi тавсиф кардам, домҳоеро, ки таҳиягар дучор шуда метавонад ва барои автоматикунонии интиқол рамзи корӣ пешниҳод кардам. Агар шумо ба ин мавзӯъ мисли ман таваҷҷӯҳ дошта бошед - нависед!

Манбаъ: will.com

Илова Эзоҳ