ආයුබෝවන් හැමෝටම!
කාර්යය පහත පරිදි වේ - ඉහත පින්තූරයේ ඉදිරිපත් කර ඇති ප්රවාහයක් ඇත, එය N සේවාදායකයන් වෙත ගෙන යා යුතුය
NiFi Site to Site (S2S) යනු NiFi අවස්ථා අතර දත්ත මාරු කිරීමට ආරක්ෂිත, පහසුවෙන් වින්යාස කළ හැකි ක්රමයකි. S2S ක්රියා කරන ආකාරය, බලන්න
අපි S2S භාවිතයෙන් දත්ත හුවමාරුව ගැන කතා කරන අවස්ථා වලදී, එක් අවස්ථාවක් සේවාදායකයා, දෙවන සේවාදායකය ලෙස හැඳින්වේ. සේවාදායකයා දත්ත යවයි, සේවාදායකයාට ලැබේ. ඒවා අතර දත්ත හුවමාරුව වින්යාස කිරීමට ක්රම දෙකක්:
- තල්ලුව. සේවාදායක අවස්ථාවෙන්, දුරස්ථ ක්රියාවලි සමූහයක් (RPG) භාවිතයෙන් දත්ත යවනු ලැබේ. සේවාදායක අවස්ථාවෙහිදී, ආදාන තොට භාවිතයෙන් දත්ත ලැබේ
- අදින්න. සේවාදායකය RPG භාවිතයෙන් දත්ත ලබා ගනී, සේවාලාභියා ප්රතිදාන වරාය භාවිතයෙන් යවයි.
පෙරළීම සඳහා ප්රවාහය Apache Registry හි ගබඩා කර ඇත.
Apache NiFi Registry යනු ප්රවාහ ගබඩා කිරීම සහ අනුවාද පාලනය සඳහා මෙවලමක් සපයන Apache NiFi හි උප ව්යාපෘතියකි. GIT වර්ගයක්. රෙජිස්ට්රි සමඟ ස්ථාපනය කිරීම, වින්යාස කිරීම සහ වැඩ කිරීම පිළිබඳ තොරතුරු සොයාගත හැකිය
ආරම්භයේදී, N කුඩා සංඛ්යාවක් වන විට, ප්රවාහය භාර දී පිළිගත හැකි කාලයකදී අතින් යාවත්කාලීන වේ.
නමුත් N වර්ධනය වන විට, ගැටළු වැඩි වේ:
- ප්රවාහය යාවත්කාලීන කිරීමට වැඩි කාලයක් ගතවේ. ඔබ සියලු සේවාදායකයන් වෙත ලොග් විය යුතුය
- අච්චු යාවත්කාලීන කිරීමේදී දෝෂ ඇතිවේ. මෙන්න ඔවුන් එය යාවත්කාලීන කළා, නමුත් මෙන්න ඔවුන්ට අමතක වුණා
- සමාන මෙහෙයුම් විශාල සංඛ්යාවක් සිදු කරන විට මානව දෝෂ
මේ සියල්ල අපව ගෙන එන්නේ ක්රියාවලිය ස්වයංක්රීය කළ යුතු බවයි. මෙම ගැටළුව විසඳීමට මම පහත ක්රම අත්හදා බැලුවෙමි:
- NiFi වෙනුවට MiNiFi භාවිතා කරන්න
- NiFi CLI
- NiPyAPI
MiNiFi භාවිතා කිරීම
මෙම ගැටළුව විසඳීමට තවත් උප ව්යාපෘතියක් උපකාරී වනු ඇත - MiNiFi C2 සේවාදායකය. මෙම නිෂ්පාදනය වින්යාසය පෙරළීමේ ගෘහ නිර්මාණ ශිල්පයේ කේන්ද්රීය ලක්ෂ්යය වීමට අදහස් කෙරේ. පරිසරය වින්යාස කරන්නේ කෙසේද - විස්තර කර ඇත
ඉහත ලිපියේ විස්තර කර ඇති විකල්පය ක්රියාත්මක වන අතර ක්රියාත්මක කිරීමට අපහසු නැත, නමුත් අපි පහත සඳහන් දෑ අමතක නොකළ යුතුය:
- Minifi සතුව nifi වෙතින් සියලුම ප්රොසෙසර නොමැත
- Minifi ප්රොසෙසර අනුවාද 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 භාවිතා කළ හැකිය. අපි පහත ක්රමය භාවිතා කරමු, ඉහත උදාහරණ වලින් හැඳුනුම්පත ගන්න (අපගේ නඩුවේ එය 7f522a13-016e-1000-e504-d5b15587f2f3 වේ). NiFi API ක්රම පිළිබඳ විස්තරය
ශරීරයේ ඔබ JSON සමත් විය යුතුය, මේ වගේ:
{
"revision": {
"clientId": "value",
"version": 0,
"lastModifier": "value"
},
"state": "value",
"disconnectedNodeAcknowledged": true
}
එය වැඩ කිරීම සඳහා පිරවිය යුතු පරාමිතීන්:
රජයේ - දත්ත හුවමාරු තත්ත්වය. තිබේ: දත්ත හුවමාරුව සබල කිරීමට සම්ප්රේෂණය, අක්රිය කිරීමට නවතා ඇත
පිටපත - ප්රොසෙසර අනුවාදය
නිර්මාණය කරන විට අනුවාදය පෙරනිමියෙන් 0 වනු ඇත, නමුත් මෙම පරාමිති ක්රමය භාවිතයෙන් ලබා ගත හැක
බැෂ් ස්ක්රිප්ට් රසිකයින් සඳහා, මෙම ක්රමය සුදුසු යැයි පෙනේ, නමුත් එය මට ටිකක් අපහසුය - බැෂ් ස්ක්රිප්ට් මගේ ප්රියතම නොවේ. ඊළඟ ක්රමය මගේ මතය අනුව වඩාත් රසවත් හා පහසුය.
NiPyAPI
NiPyAPI යනු NiFi අවස්ථා සමඟ අන්තර් ක්රියා කිරීම සඳහා වන පයිතන් පුස්තකාලයකි.
වින්යාසය රෝල් කිරීමේ අපගේ ස්ක්රිප්ට් එක පයිතන් හි වැඩසටහනකි. අපි කේතනය වෙත යමු.
වැඩිදුර වැඩ සඳහා අපි සැකසුම් සකස් කරමු. අපට පහත පරාමිතීන් අවශ්ය වනු ඇත:
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
අපට තවදුරටත් සෙවිය හැකිය, උදාහරණයක් ලෙස, නම අනුව.
අච්චුව යාවත්කාලීන කිරීමේ ක්රියාවලිය මම විස්තර නොකරමි, අච්චුවේ නව අනුවාදයේ ප්රොසෙසර එකතු කර ඇත්නම්, පෝලිම්වල පණිවිඩ තිබීම පිළිබඳ ගැටළු නොමැති බව පමණක් මම කියමි. නමුත් ප්රොසෙසර ඉවත් කළහොත් ගැටළු ඇති විය හැක (නිෆයි මඟින් ප්රොසෙසරයක් ඉදිරියෙන් පණිවිඩ පෝලිමක් එකතු වී ඇත්නම් එය ඉවත් කිරීමට ඉඩ නොදේ). මා මෙම ගැටලුව විසඳූ ආකාරය ගැන ඔබ උනන්දු වන්නේ නම්, කරුණාකර මට ලියන්න, අපි මෙම ගැටළුව සාකච්ඡා කරමු. ලිපියේ අවසානයේ ඇති සම්බන්ධතා. අපි ක්රියාවලි කණ්ඩායමක් එකතු කිරීමේ පියවරට යමු.
ස්ක්රිප්ට් නිදොස් කිරීමේදී, ප්රවාහයේ නවතම අනුවාදය සෑම විටම ඉහළට නොපැමිණීමේ විශේෂත්වයක් මට හමු විය, එබැවින් මෙම අනුවාදය පළමුව පරීක්ෂා කිරීමට මම නිර්දේශ කරමි:
nipyapi.versioning.get_latest_flow_ver
ක්රියාවලි සමූහය යෙදවීම:
nipyapi.versioning.deploy_flow_version
අපි ප්රොසෙසර ආරම්භ කරමු:
nipyapi.canvas.schedule_process_group
CLI ගැන බ්ලොක් එකේ ලියා තිබුනේ දුරස්ථ ක්රියාවලි කණ්ඩායමේ දත්ත හුවමාරුව ස්වයංක්රීයව සක්රීය නොවන බවයි? ස්ක්රිප්ට් එක ක්රියාත්මක කරනකොට මටත් මේ ප්රශ්නය ඇති වුණා. එම අවස්ථාවේදී, මට API භාවිතයෙන් දත්ත හුවමාරුව ආරම්භ කිරීමට නොහැකි වූ අතර, මම NiPyAPI පුස්තකාලයේ සංවර්ධකයාට ලිපියක් ලිවීමට සහ උපදෙස්/උදව් ඉල්ලා සිටීමට තීරණය කළෙමි. සංවර්ධකයා මට ප්රතිචාර දැක්වූයේ, අපි ගැටලුව සාකච්ඡා කළ අතර ඔහු "යමක් පරීක්ෂා කිරීමට" කාලය අවශ්ය බව ලිවීය. ඊට පස්සේ දවස් දෙකකට පස්සේ, මගේ දියත් කිරීමේ ගැටලුව විසඳන කාර්යයක් පයිතන් වල ලියා ඇති ලිපියක් එයි!!! ඒ වන විට, NiPyAPI අනුවාදය 0.13.3 වන අතර, ඇත්ත වශයෙන්ම, එවැනි කිසිවක් නොතිබුණි. නමුත් මෑතකදී නිකුත් කරන ලද 0.14.0 අනුවාදයේ, මෙම කාර්යය දැනටමත් පුස්තකාලයට ඇතුළත් කර ඇත. හමුවන්න,
nipyapi.canvas.set_remote_process_group_transmission
එබැවින්, NiPyAPI පුස්තකාලය භාවිතා කරමින්, අපි රෙජිස්ට්රිය සම්බන්ධ කර, ප්රවාහය පෙරළා, ප්රොසෙසර සහ දත්ත හුවමාරුව පවා ආරම්භ කළෙමු. එවිට ඔබට කේතය පීරන්න, සියලු වර්ගවල චෙක්පත් එකතු කරන්න, ලොග් වීම, සහ එපමණයි. නමුත් එය සම්පූර්ණයෙන්ම වෙනස් කතාවකි.
මා සලකා බැලූ ස්වයංක්රීය විකල්ප අතුරින්, අවසාන එක මට වඩාත්ම කාර්යක්ෂම බව පෙනුනි. පළමුව, මෙය තවමත් පයිතන් කේතයකි, ඔබට සහායක වැඩසටහන් කේතය ඇතුළත් කර ක්රමලේඛන භාෂාවේ සියලු ප්රතිලාභ ලබා ගත හැකිය. දෙවනුව, NiPyAPI ව්යාපෘතිය සක්රියව සංවර්ධනය වෙමින් පවතින අතර ගැටළු ඇති වුවහොත් ඔබට සංවර්ධකයාට ලිවිය හැකිය. තෙවනුව, NiPyAPI තවමත් සංකීර්ණ ගැටළු විසඳීමේදී NiFi සමඟ අන්තර්ක්රියා කිරීම සඳහා වඩාත් නම්යශීලී මෙවලමකි. උදාහරණයක් ලෙස, ප්රවාහයේ පණිවිඩ පෝලිම් දැන් හිස්ද යන්න සහ ක්රියාවලි කණ්ඩායම යාවත්කාලීන කළ හැකිද යන්න තීරණය කිරීමේදී.
එච්චරයි. මම NiFi හි ප්රවාහ බෙදා හැරීම ස්වයංක්රීය කිරීම සඳහා ප්රවේශ 3ක් විස්තර කළෙමි, සංවර්ධකයෙකුට මුහුණ දිය හැකි අන්තරායන් සහ බෙදා හැරීම ස්වයංක්රීය කිරීම සඳහා ක්රියාකාරී කේතය ලබා දුනි. ඔබ මෙම මාතෘකාව ගැන මා තරම් උනන්දුවක් දක්වන්නේ නම් -
මූලාශ්රය: www.habr.com