اپاچی نی فائی میں فلو ڈیلیوری آٹومیشن

ہر کسی کو خوش!

اپاچی نی فائی میں فلو ڈیلیوری آٹومیشن

کام مندرجہ ذیل ہے - اوپر کی تصویر میں دکھایا گیا ایک بہاؤ ہے، جسے N سرورز کے ساتھ رول آؤٹ کرنے کی ضرورت ہے۔ اپاچی نی فائی. فلو ٹیسٹ - ایک فائل تیار کی جا رہی ہے اور دوسری NiFi مثال کو بھیجی جا رہی ہے۔ ڈیٹا کی منتقلی NiFi سائٹ ٹو سائٹ پروٹوکول کا استعمال کرتے ہوئے ہوتی ہے۔

NiFi سائٹ ٹو سائٹ (S2S) NiFi مثالوں کے درمیان ڈیٹا کی منتقلی کا ایک محفوظ، انتہائی حسب ضرورت طریقہ ہے۔ دیکھیں کہ S2S کیسے کام کرتا ہے۔ دستاویزات اور S2S کو دیکھنے کی اجازت دینے کے لیے اپنی NiFi مثال قائم کرنا یاد رکھنا ضروری ہے۔ یہاں.

جب S2S کا استعمال کرتے ہوئے ڈیٹا کی منتقلی کی بات آتی ہے تو، ایک مثال کو کلائنٹ کہا جاتا ہے، دوسرا سرور ہوتا ہے۔ کلائنٹ ڈیٹا بھیجتا ہے، سرور اسے وصول کرتا ہے۔ ان کے درمیان ڈیٹا کی منتقلی کو ترتیب دینے کے دو طریقے:

  1. پش. ریموٹ پروسیس گروپ (RPG) کا استعمال کرتے ہوئے کلائنٹ مثال سے ڈیٹا بھیجا جاتا ہے۔ سرور کی مثال پر، ڈیٹا ان پٹ پورٹ کا استعمال کرتے ہوئے موصول ہوتا ہے۔
  2. ھیںچو. سرور آر پی جی کا استعمال کرتے ہوئے ڈیٹا وصول کرتا ہے، کلائنٹ آؤٹ پٹ پورٹ کا استعمال کرتے ہوئے بھیجتا ہے۔


رولنگ کے لیے فلو اپاچی رجسٹری میں محفوظ ہے۔

Apache NiFi رجسٹری Apache NiFi کا ایک ذیلی پروجیکٹ ہے جو ایک فلو اسٹوریج اور ورژننگ ٹول فراہم کرتا ہے۔ جی آئی ٹی کی ایک قسم۔ رجسٹری کو انسٹال کرنے، ترتیب دینے اور اس کے ساتھ کام کرنے کے بارے میں معلومات مل سکتی ہیں۔ سرکاری دستاویزات. اسٹوریج کے لیے فلو کو ایک پروسیس گروپ میں ملایا جاتا ہے اور اس فارم میں رجسٹری میں اسٹور کیا جاتا ہے۔ ہم اس مضمون میں بعد میں واپس آئیں گے۔

شروع میں، جب 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 سرور، اس مسئلے کو حل کرنے میں مدد کرے گا۔ اس پروڈکٹ کا مقصد تعیناتی کے فن تعمیر میں مرکزی نقطہ ہونا ہے۔ ماحول کو ترتیب دینے کا طریقہ - میں بیان کیا گیا ہے۔ یہ مضمون Habré پر اور معلومات مسئلے کو حل کرنے کے لیے کافی ہیں۔ MiNiFi C2 سرور کے ساتھ مل کر اپنی ترتیب کو خود بخود اپ ڈیٹ کرتا ہے۔ اس نقطہ نظر کی واحد خرابی یہ ہے کہ آپ کو C2 سرور پر ٹیمپلیٹس بنانا ہوں گے، رجسٹری کے لیے ایک سادہ کمٹ کافی نہیں ہے۔

اوپر مضمون میں بیان کردہ آپشن کام کر رہا ہے اور اسے نافذ کرنا مشکل نہیں ہے، لیکن ہمیں درج ذیل کو نہیں بھولنا چاہیے:

  1. minifi میں nifi سے تمام پروسیسر نہیں ہیں۔
  2. Minifi میں CPU ورژن NiFi میں CPU ورژن سے پیچھے ہیں۔

لکھنے کے وقت، 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 رجسٹری ویب انٹرفیس میں حاصل کیا جا سکتا ہے۔ ویب انٹرفیس اس طرح لگتا ہے:

اپاچی نی فائی میں فلو ڈیلیوری آٹومیشن

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

نیا تبصرہ شامل کریں