ہر کسی کو خوش!
کام مندرجہ ذیل ہے - اوپر کی تصویر میں دکھایا گیا ایک بہاؤ ہے، جسے N سرورز کے ساتھ رول آؤٹ کرنے کی ضرورت ہے۔
NiFi سائٹ ٹو سائٹ (S2S) NiFi مثالوں کے درمیان ڈیٹا کی منتقلی کا ایک محفوظ، انتہائی حسب ضرورت طریقہ ہے۔ دیکھیں کہ S2S کیسے کام کرتا ہے۔
جب S2S کا استعمال کرتے ہوئے ڈیٹا کی منتقلی کی بات آتی ہے تو، ایک مثال کو کلائنٹ کہا جاتا ہے، دوسرا سرور ہوتا ہے۔ کلائنٹ ڈیٹا بھیجتا ہے، سرور اسے وصول کرتا ہے۔ ان کے درمیان ڈیٹا کی منتقلی کو ترتیب دینے کے دو طریقے:
- پش. ریموٹ پروسیس گروپ (RPG) کا استعمال کرتے ہوئے کلائنٹ مثال سے ڈیٹا بھیجا جاتا ہے۔ سرور کی مثال پر، ڈیٹا ان پٹ پورٹ کا استعمال کرتے ہوئے موصول ہوتا ہے۔
- ھیںچو. سرور آر پی جی کا استعمال کرتے ہوئے ڈیٹا وصول کرتا ہے، کلائنٹ آؤٹ پٹ پورٹ کا استعمال کرتے ہوئے بھیجتا ہے۔
رولنگ کے لیے فلو اپاچی رجسٹری میں محفوظ ہے۔
Apache NiFi رجسٹری Apache NiFi کا ایک ذیلی پروجیکٹ ہے جو ایک فلو اسٹوریج اور ورژننگ ٹول فراہم کرتا ہے۔ جی آئی ٹی کی ایک قسم۔ رجسٹری کو انسٹال کرنے، ترتیب دینے اور اس کے ساتھ کام کرنے کے بارے میں معلومات مل سکتی ہیں۔
شروع میں، جب N ایک چھوٹی تعداد ہے، بہاؤ کو ایک مناسب وقت میں ہاتھ سے پہنچایا اور اپ ڈیٹ کیا جاتا ہے۔
لیکن جیسے جیسے N بڑھتا ہے، مزید مسائل ہیں:
- بہاؤ کو اپ ڈیٹ کرنے میں زیادہ وقت لگتا ہے۔ آپ کو تمام سرورز پر جانے کی ضرورت ہے۔
- ٹیمپلیٹس کو اپ ڈیٹ کرنے میں خرابیاں ہیں۔ یہاں انہوں نے اپ ڈیٹ کیا، لیکن یہاں وہ بھول گئے
- بڑی تعداد میں اسی طرح کے آپریشن کرتے وقت انسانی غلطی
یہ سب ہمیں اس حقیقت کی طرف لاتا ہے کہ اس عمل کو خودکار بنانا ضروری ہے۔ میں نے اس مسئلے کو حل کرنے کے لیے درج ذیل طریقے آزمائے ہیں۔
- NiFi کے بجائے MiNiFi استعمال کریں۔
- NiFi CLI
- NiPyAPI
MiNiFi استعمال کرنا
ایک اور ذیلی پروجیکٹ، MiNiFi C2 سرور، اس مسئلے کو حل کرنے میں مدد کرے گا۔ اس پروڈکٹ کا مقصد تعیناتی کے فن تعمیر میں مرکزی نقطہ ہونا ہے۔ ماحول کو ترتیب دینے کا طریقہ - میں بیان کیا گیا ہے۔
اوپر مضمون میں بیان کردہ آپشن کام کر رہا ہے اور اسے نافذ کرنا مشکل نہیں ہے، لیکن ہمیں درج ذیل کو نہیں بھولنا چاہیے:
- minifi میں nifi سے تمام پروسیسر نہیں ہیں۔
- Minifi میں CPU ورژن NiFi میں CPU ورژن سے پیچھے ہیں۔
لکھنے کے وقت، 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 مثالوں کی ضرورت ہے۔ آئیے فرض کریں کہ سرور پر ڈیٹا منتقل کرنے کے لیے پش کا طریقہ منتخب کیا گیا تھا۔ ڈیٹا کی منتقلی کو منظم کرنے کے لیے، اضافی ریموٹ پروسیس گروپ (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 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
سی ایل آئی کے بارے میں بلاک میں لکھا تھا کہ ریموٹ پروسیس گروپ میں ڈیٹا ٹرانسفر خود بخود فعال نہیں ہوتا ہے؟ اسکرپٹ کو نافذ کرتے وقت، مجھے بھی اس مسئلے کا سامنا کرنا پڑا۔ اس وقت، میں API کا استعمال کرتے ہوئے ڈیٹا کی منتقلی شروع نہیں کر سکا اور میں نے NiPyAPI لائبریری کے ڈویلپر کو لکھنے اور مشورہ / مدد طلب کرنے کا فیصلہ کیا۔ ڈویلپر نے مجھے جواب دیا، ہم نے اس مسئلے پر تبادلہ خیال کیا اور اس نے لکھا کہ اسے "کچھ چیک کرنے" کے لیے وقت درکار ہے۔ اور اب کچھ دن بعد ایک ای میل آتی ہے جس میں ایک Python فنکشن لکھا ہوتا ہے جو میرے سٹارٹ اپ کا مسئلہ حل کر دیتا ہے!!! اس وقت، NiPyAPI ورژن 0.13.3 تھا اور یقیناً اس میں اس قسم کی کوئی چیز نہیں تھی۔ لیکن ورژن 0.14.0 میں، جو کہ حال ہی میں جاری کیا گیا تھا، یہ فنکشن پہلے ہی لائبریری میں شامل کیا جا چکا ہے۔ ملنا
nipyapi.canvas.set_remote_process_group_transmission
لہذا، NiPyAPI لائبریری کی مدد سے، ہم نے رجسٹری کو جوڑ دیا، بہاؤ کو رول اپ کیا، اور یہاں تک کہ پروسیسر اور ڈیٹا کی منتقلی شروع کی۔ پھر آپ کوڈ کو کنگھی کر سکتے ہیں، ہر قسم کے چیک شامل کر سکتے ہیں، لاگنگ کر سکتے ہیں، اور بس۔ لیکن یہ بالکل مختلف کہانی ہے۔
آٹومیشن کے آپشنز میں سے جن پر میں نے غور کیا، مؤخر الذکر مجھے سب سے زیادہ کارآمد معلوم ہوا۔ سب سے پہلے، یہ ابھی تک ازگر کا کوڈ ہے، جس میں آپ معاون پروگرام کوڈ کو سرایت کر سکتے ہیں اور پروگرامنگ زبان کے تمام فوائد سے لطف اندوز ہو سکتے ہیں۔ دوم، NiPyAPI پروجیکٹ فعال طور پر ترقی کر رہا ہے اور مسائل کی صورت میں آپ ڈویلپر کو لکھ سکتے ہیں۔ تیسرا، NiPyAPI پیچیدہ مسائل کو حل کرنے میں NiFi کے ساتھ بات چیت کرنے کے لیے اب بھی ایک زیادہ لچکدار ٹول ہے۔ مثال کے طور پر، اس بات کا تعین کرنے میں کہ آیا پیغام کی قطاریں فی الحال بہاؤ میں خالی ہیں اور کیا عمل گروپ کو اپ ڈیٹ کرنا ممکن ہے۔
بس۔ میں نے NiFi میں بہاؤ کی ترسیل کو خودکار کرنے کے لیے 3 نقطہ نظر بیان کیے، وہ نقصانات جن کا ایک ڈویلپر کو سامنا ہو سکتا ہے اور خودکار ترسیل کے لیے ورکنگ کوڈ فراہم کیا ہے۔ اگر آپ اس موضوع میں اتنی ہی دلچسپی رکھتے ہیں جیسے میں ہوں -
ماخذ: www.habr.com