Apache NiFi හි ප්රවාහ බෙදා හැරීමේ ස්වයංක්රීයකරණය

ආයුබෝවන් හැමෝටම!

Apache NiFi හි ප්රවාහ බෙදා හැරීමේ ස්වයංක්රීයකරණය

කාර්යය පහත පරිදි වේ - ඉහත පින්තූරයේ ඉදිරිපත් කර ඇති ප්‍රවාහයක් ඇත, එය N සේවාදායකයන් වෙත ගෙන යා යුතුය Apache NiFi. ප්‍රවාහ පරීක්ෂණය - ගොනුවක් උත්පාදනය වෙමින් තවත් NiFi අවස්ථාවක් වෙත යවනු ලැබේ. NiFi Site to Site ප්‍රොටෝකෝලය භාවිතයෙන් දත්ත හුවමාරුව සිදුවේ.

NiFi Site to Site (S2S) යනු NiFi අවස්ථා අතර දත්ත මාරු කිරීමට ආරක්ෂිත, පහසුවෙන් වින්‍යාස කළ හැකි ක්‍රමයකි. S2S ක්‍රියා කරන ආකාරය, බලන්න ලියකියවිලි සහ S2S සඳහා NiFi අවස්ථාව වින්‍යාස කිරීමට අමතක නොකිරීම වැදගත් වේ, බලන්න මෙහි.

අපි S2S භාවිතයෙන් දත්ත හුවමාරුව ගැන කතා කරන අවස්ථා වලදී, එක් අවස්ථාවක් සේවාදායකයා, දෙවන සේවාදායකය ලෙස හැඳින්වේ. සේවාදායකයා දත්ත යවයි, සේවාදායකයාට ලැබේ. ඒවා අතර දත්ත හුවමාරුව වින්‍යාස කිරීමට ක්‍රම දෙකක්:

  1. තල්ලුව. සේවාදායක අවස්ථාවෙන්, දුරස්ථ ක්‍රියාවලි සමූහයක් (RPG) භාවිතයෙන් දත්ත යවනු ලැබේ. සේවාදායක අවස්ථාවෙහිදී, ආදාන තොට භාවිතයෙන් දත්ත ලැබේ
  2. අදින්න. සේවාදායකය RPG භාවිතයෙන් දත්ත ලබා ගනී, සේවාලාභියා ප්‍රතිදාන වරාය භාවිතයෙන් යවයි.


පෙරළීම සඳහා ප්‍රවාහය Apache Registry හි ගබඩා කර ඇත.

Apache NiFi Registry යනු ප්‍රවාහ ගබඩා කිරීම සහ අනුවාද පාලනය සඳහා මෙවලමක් සපයන Apache NiFi හි උප ව්‍යාපෘතියකි. GIT වර්ගයක්. රෙජිස්ට්රි සමඟ ස්ථාපනය කිරීම, වින්යාස කිරීම සහ වැඩ කිරීම පිළිබඳ තොරතුරු සොයාගත හැකිය නිල ලියකියවිලි. ගබඩා කිරීම සඳහා ප්රවාහය ක්රියාවලි කණ්ඩායමකට ඒකාබද්ධ කර රෙජිස්ට්රි තුළ මෙම ආකෘතියේ ගබඩා කර ඇත. අපි පසුව ලිපියෙන් මේ වෙත ආපසු යන්නෙමු.

ආරම්භයේදී, N කුඩා සංඛ්‍යාවක් වන විට, ප්‍රවාහය භාර දී පිළිගත හැකි කාලයකදී අතින් යාවත්කාලීන වේ.

නමුත් N වර්ධනය වන විට, ගැටළු වැඩි වේ:

  1. ප්‍රවාහය යාවත්කාලීන කිරීමට වැඩි කාලයක් ගතවේ. ඔබ සියලු සේවාදායකයන් වෙත ලොග් විය යුතුය
  2. අච්චු යාවත්කාලීන කිරීමේදී දෝෂ ඇතිවේ. මෙන්න ඔවුන් එය යාවත්කාලීන කළා, නමුත් මෙන්න ඔවුන්ට අමතක වුණා
  3. සමාන මෙහෙයුම් විශාල සංඛ්යාවක් සිදු කරන විට මානව දෝෂ

මේ සියල්ල අපව ගෙන එන්නේ ක්‍රියාවලිය ස්වයංක්‍රීය කළ යුතු බවයි. මෙම ගැටළුව විසඳීමට මම පහත ක්‍රම අත්හදා බැලුවෙමි:

  1. NiFi වෙනුවට MiNiFi භාවිතා කරන්න
  2. NiFi CLI
  3. NiPyAPI

MiNiFi භාවිතා කිරීම

Apache MiniFy - Apache NiFi හි උප ව්‍යාපෘතිය. MiNiFy යනු NiFi හා සමාන ප්‍රොසෙසර භාවිතා කරන සංයුක්ත නියෝජිතයෙකි, ඔබට NiFi හි මෙන් එකම ප්‍රවාහයන් නිර්මාණය කිරීමට ඉඩ සලසයි. MiNiFy හි ප්‍රවාහ වින්‍යාසය සඳහා චිත්‍රක අතුරු මුහුණතක් නොමැති නිසා නියෝජිතයාගේ සැහැල්ලු ස්වභාවය සාක්ෂාත් කරගනු ලැබේ. MiNiFy හි චිත්රක අතුරුමුහුණතක් නොමැතිකම යනු minifi වෙත ප්රවාහය ලබා දීමේ ගැටළුව විසඳීමට අවශ්ය බවයි. IOT හි MiNiFy සක්‍රියව භාවිතා වන බැවින්, බොහෝ සංරචක ඇති අතර අවසාන minifi අවස්ථාවන් වෙත ප්‍රවාහය ලබා දීමේ ක්‍රියාවලිය ස්වයංක්‍රීය කළ යුතුය. හුරුපුරුදු කාර්යයක් නේද?

මෙම ගැටළුව විසඳීමට තවත් උප ව්‍යාපෘතියක් උපකාරී වනු ඇත - MiNiFi C2 සේවාදායකය. මෙම නිෂ්පාදනය වින්‍යාසය පෙරළීමේ ගෘහ නිර්මාණ ශිල්පයේ කේන්ද්‍රීය ලක්ෂ්‍යය වීමට අදහස් කෙරේ. පරිසරය වින්‍යාස කරන්නේ කෙසේද - විස්තර කර ඇත මේ ලිපිය කියවන්න ගැටලුව විසඳීමට Habré පිළිබඳ ප්රමාණවත් තොරතුරු තිබේ. MiNiFi, C2 සේවාදායකය සමඟ ඒකාබද්ධව, එහි වින්‍යාසය ස්වයංක්‍රීයව යාවත්කාලීන කරයි. මෙම ප්‍රවේශයේ ඇති එකම පසුබෑම නම් ඔබට C2 සේවාදායකයේ සැකිලි නිර්මාණය කිරීමට සිදු වීමයි; රෙජිස්ට්‍රිය සඳහා සරල කැපවීමක් ප්‍රමාණවත් නොවේ.

ඉහත ලිපියේ විස්තර කර ඇති විකල්පය ක්‍රියාත්මක වන අතර ක්‍රියාත්මක කිරීමට අපහසු නැත, නමුත් අපි පහත සඳහන් දෑ අමතක නොකළ යුතුය:

  1. Minifi සතුව nifi වෙතින් සියලුම ප්‍රොසෙසර නොමැත
  2. Minifi ප්‍රොසෙසර අනුවාද NiFi ප්‍රොසෙසර අනුවාද වලට වඩා පසුගාමී වේ.

ලියන අවස්ථාව වන විට, NiFi හි නවතම අනුවාදය 1.9.2 වේ. නවතම MiNiFi ප්‍රොසෙසර අනුවාදය 1.7.0 වේ. ප්‍රොසෙසර MiNiFi වෙත එක් කළ හැකි නමුත් NiFi සහ MiNiFi ප්‍රොසෙසර අතර පවතින අනුවාද විෂමතා නිසා මෙය ක්‍රියා නොකරනු ඇත.

NiFi CLI

අනුව විනිශ්චය කිරීම විස්තර නිල වෙබ් අඩවියේ ඇති මෙවලම, මෙය ප්‍රවාහ බෙදා හැරීමේ හෝ ක්‍රියාවලි කළමනාකරණ ක්ෂේත්‍රයේ NiFI සහ 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 භාවිතා කළ හැකිය. අපි පහත ක්‍රමය භාවිතා කරමු, ඉහත උදාහරණ වලින් හැඳුනුම්පත ගන්න (අපගේ නඩුවේ එය 7f522a13-016e-1000-e504-d5b15587f2f3 වේ). NiFi API ක්‍රම පිළිබඳ විස්තරය මෙහි.

Apache NiFi හි ප්රවාහ බෙදා හැරීමේ ස්වයංක්රීයකරණය
ශරීරයේ ඔබ JSON සමත් විය යුතුය, මේ වගේ:

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

එය වැඩ කිරීම සඳහා පිරවිය යුතු පරාමිතීන්:
රජයේ - දත්ත හුවමාරු තත්ත්වය. තිබේ: දත්ත හුවමාරුව සබල කිරීමට සම්ප්‍රේෂණය, අක්‍රිය කිරීමට නවතා ඇත
පිටපත - ප්රොසෙසර අනුවාදය

නිර්මාණය කරන විට අනුවාදය පෙරනිමියෙන් 0 වනු ඇත, නමුත් මෙම පරාමිති ක්‍රමය භාවිතයෙන් ලබා ගත හැක

Apache NiFi හි ප්රවාහ බෙදා හැරීමේ ස්වයංක්රීයකරණය

බැෂ් ස්ක්‍රිප්ට් රසිකයින් සඳහා, මෙම ක්‍රමය සුදුසු යැයි පෙනේ, නමුත් එය මට ටිකක් අපහසුය - බැෂ් ස්ක්‍රිප්ට් මගේ ප්‍රියතම නොවේ. ඊළඟ ක්රමය මගේ මතය අනුව වඩාත් රසවත් හා පහසුය.

NiPyAPI

NiPyAPI යනු NiFi අවස්ථා සමඟ අන්තර් ක්‍රියා කිරීම සඳහා වන පයිතන් පුස්තකාලයකි. ලේඛන පිටුව පුස්තකාලය සමඟ වැඩ කිරීම සඳහා අවශ්ය තොරතුරු අඩංගු වේ. ඉක්මන් ආරම්භය විස්තර කර ඇත ව්යාපෘතිය github මත.

වින්‍යාසය රෝල් කිරීමේ අපගේ ස්ක්‍රිප්ට් එක පයිතන් හි වැඩසටහනකි. අපි කේතනය වෙත යමු.
වැඩිදුර වැඩ සඳහා අපි සැකසුම් සකස් කරමු. අපට පහත පරාමිතීන් අවශ්ය වනු ඇත:

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

අදහස් එක් කරන්න