Салом хама!
Вазифа чунин аст - ҷараёне дар расми боло нишон дода шудааст, ки бояд ба N серверҳо интиқол дода шавад.
NiFi Site to Site (S2S) як роҳи бехатар ва хеле танзимшавандаи интиқоли маълумот байни мисолҳои NiFi мебошад. Бингар, ки чӣ тавр S2S кор мекунад
Вақте ки сухан дар бораи интиқоли маълумот бо истифода аз S2S меравад, як мисол мизоҷ номида мешавад, дуюмаш сервер аст. Мизоҷ маълумот мефиристад, сервер онро қабул мекунад. Ду роҳи танзими интиқоли маълумот байни онҳо:
- Тела. Маълумот аз мисоли муштарӣ бо истифода аз Гурӯҳи равандҳои дурдаст (RPG) фиристода мешавад. Дар мисоли сервер маълумот бо истифода аз Порти Вуруд қабул карда мешавад
- Кашидан. Сервер маълумотро бо истифода аз RPG қабул мекунад, муштарӣ бо истифода аз порти баромад мефиристад.
Ҷараён барои гардиш дар Феҳристи Apache нигоҳ дошта мешавад.
Registry Apache NiFi зерлоиҳаи Apache NiFi мебошад, ки асбоби нигоҳдории ҷараён ва нусхабардориро таъмин мекунад. Як навъ GIT. Маълумотро дар бораи насб, конфигуратсия ва кор бо реестр дар зер пайдо кардан мумкин аст
Дар оғоз, вақте ки N рақами хурд аст, ҷараён бо дасти худ дар вақти мувофиқ интиқол дода мешавад ва нав карда мешавад.
Аммо бо афзоиши N, мушкилоти бештар вуҷуд дорад:
- барои навсозии ҷараёни он вақти бештар лозим аст. Шумо бояд ба ҳама серверҳо равед
- дар навсозии қолибҳо хатогиҳо вуҷуд доранд. Дар ин ҷо онҳо навсозӣ карданд, аммо дар ин ҷо онҳо фаромӯш карданд
- хатои инсон ҳангоми иҷрои шумораи зиёди амалиёти шабеҳ
Хамаи ин моро ба он оварда мерасонад, ки процессро автоматй кунондани он зарур аст. Ман роҳҳои зеринро барои ҳалли ин мушкилот кӯшиш кардам:
- Ба ҷои NiFi MiNiFi-ро истифода баред
- NiFi CLI
- NiPyAPI
Истифодаи MiNiFi
Зерлоиҳаи дигар, MiNiFi C2 Server, дар ҳалли ин мушкилот кӯмак хоҳад кард. Ин маҳсулот барои як нуқтаи марказии меъмории ҷойгиркунӣ пешбинӣ шудааст. Чӣ тавр танзим кардани муҳити зист - дар тавсиф
Варианти дар мақолаи дар боло тавсифшуда кор мекунад ва татбиқи он душвор нест, аммо мо набояд чизҳои зеринро фаромӯш кунем:
- minifi на ҳама протсессори nifi дорад
- Версияҳои CPU дар Minifi аз версияҳои CPU дар NiFi ақиб мемонанд.
Дар замони навиштан, версияи охирини NiFi 1.9.2 аст. Версияи протсессори версияи охирини MiNiFi 1.7.0 аст. Протсессорҳоро ба MiNiFi илова кардан мумкин аст, аммо аз сабаби ихтилофи версияи байни протсессори NiFi ва MiNiFi, ин кор намекунад.
NiFi CLI
Бо мурури
Утилитаро иҷро кунед
./bin/cli.sh
_ ___ _
Apache (_) .' ..](_) ,
_ .--. __ _| |_ __ )
[ `.-. | [ |'-| |-'[ | /
| | | | | | | | | | ' '
[___||__][___][___] [___]', ,'
`'
CLI v1.9.2
Type 'help' to see a list of available commands, use tab to auto-complete.
Барои он ки мо ҷараёни заруриро аз реестр бор кунем, мо бояд идентификаторҳои сабад (идентификатори сатил) ва худи ҷараёнро (идентификатори ҷараён) донем. Ин маълумотро тавассути cli ё дар веб-интерфейси реестри 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), ки аллакай ба ҷараёни мо дохил карда шудааст, фаъол кардан лозим аст.
Дар ҳуҷҷатҳо дар CLI ва дигар манбаъҳо ман роҳи имкон додани интиқоли маълумотро наёфтам. Агар шумо медонед, ки чӣ тавр ин корро кардан лозим аст, лутфан дар шарҳҳо нависед.
Азбаски мо баш дорем ва омодаем то ба охир биравем, мо роҳи халосиро хоҳем ёфт! Шумо метавонед NiFi API-ро барои ҳалли ин мушкилот истифода баред. Биёед усули зеринро истифода барем, мо ID-ро аз мисолҳои дар боло овардашуда мегирем (дар ҳолати мо он 7f522a13-016e-1000-e504-d5b15587f2f3 аст). Тавсифи усулҳои NiFi API
Дар бадан, шумо бояд JSON-ро аз шакли зерин гузаред:
{
"revision": {
"clientId": "value",
"version": 0,
"lastModifier": "value"
},
"state": "value",
"disconnectedNodeAcknowledged": true
}
Параметрҳое, ки бояд барои "кор" пур карда шаванд:
давлат - ҳолати интиқоли маълумот. Интиқоли дастрас барои имкон додани интиқоли маълумот, ҚАТЪ КАРДА барои хомӯш кардан
нусхаи - версияи коркардкунанда
версия ҳангоми сохтан ба 0 муқаррар карда мешавад, аммо ин параметрҳоро бо истифода аз усул ба даст овардан мумкин аст
Барои дӯстдорони скриптҳои bash, ин усул метавонад мувофиқ бошад, аммо ин барои ман душвор аст - скриптҳои bash дӯстдоштаи ман нестанд. Усули навбатӣ ба назари ман ҷолибтар ва қулайтар аст.
NiPyAPI
NiPyAPI китобхонаи Python барои ҳамкорӣ бо мисолҳои NiFi мебошад.
Скрипти мо барои паҳн кардани конфигуратсия як барномаи 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