سلام هر!
ڪم هن ريت آهي - مٿي ڏنل تصوير ۾ ڏيکاريل هڪ وهڪري آهي، جنهن کي اين سرورز سان گڏ ڪرڻ جي ضرورت آهي.
NiFi سائيٽ ٽو سائٽ (S2S) ھڪڙو محفوظ، انتهائي حسب ضرورت طريقو آھي جيڪو NiFi مثالن جي وچ ۾ ڊيٽا جي منتقلي لاءِ. ڏسو ڪيئن S2S ڪم ڪري ٿو
جڏهن اهو S2S استعمال ڪندي ڊيٽا جي منتقلي تي اچي ٿو، هڪ مثال کي ڪلائنٽ سڏيو ويندو آهي، ٻيو هڪ سرور آهي. ڪلائنٽ ڊيٽا موڪلي ٿو، سرور ان کي وصول ڪري ٿو. انهن جي وچ ۾ ڊيٽا جي منتقلي کي ترتيب ڏيڻ لاء ٻه طريقا:
- پڪو. ڊيٽا ڪلائنٽ مثال مان موڪليو ويو آهي ريموٽ پروسيس گروپ (RPG) استعمال ڪندي. سرور جي مثال تي، ڊيٽا ان پٽ پورٽ استعمال ڪندي ملي ٿي
- پل. سرور آر پي جي استعمال ڪندي ڊيٽا وصول ڪري ٿو، ڪلائنٽ موڪلي ٿو ٻاھرين پورٽ استعمال ڪندي.
رولنگ لاء فلو Apache رجسٽري ۾ ذخيرو ٿيل آهي.
Apache NiFi رجسٽري Apache NiFi جو هڪ ذيلي منصوبو آهي جيڪو هڪ فلو اسٽوريج ۽ ورزننگ ٽول مهيا ڪري ٿو. GIT جو هڪ قسم. انسٽال ڪرڻ، ترتيب ڏيڻ ۽ رجسٽري سان ڪم ڪرڻ بابت معلومات ملي سگھن ٿا
شروعات ۾، جڏهن N هڪ ننڍڙو نمبر آهي، وهڪري پهچايو ويندو آهي ۽ هٿ سان هڪ مناسب وقت ۾ اپڊيٽ ڪيو ويندو آهي.
پر جيئن ن وڌندو آهي، اتي وڌيڪ مسئلا آهن:
- وهڪري کي اپڊيٽ ڪرڻ ۾ وڌيڪ وقت لڳندو آهي. توھان کي سڀني سرورن ڏانھن وڃڻ گھرجي
- ٽيمپليٽ کي اپڊيٽ ڪرڻ ۾ غلطيون آهن. هتي انهن کي اپڊيٽ ڪيو، پر هتي اهي وساري ويا
- انساني غلطي جڏهن هڪجهڙائي واري عمل جي وڏي تعداد کي انجام ڏئي ٿي
هي سڀ اسان کي حقيقت ڏانهن آڻيندو آهي ته اهو عمل کي خودڪار ڪرڻ ضروري آهي. مون هن مسئلي کي حل ڪرڻ لاء هيٺين طريقن جي ڪوشش ڪئي آهي:
- NiFi جي بدران MiNiFi استعمال ڪريو
- NiFi CLI
- NiPyAPI
MiNiFi استعمال ڪندي
ٻيو ذيلي پروجيڪٽ، MiNiFi C2 سرور، هن مسئلي کي حل ڪرڻ ۾ مدد ڪندو. ھن پراڊڪٽ جو مقصد آھي مرڪزي نقطو ٺاھڻ جي فن تعمير ۾. ماحول کي ڪيئن ترتيب ڏيڻ - بيان ڪيو ويو آهي
مٿي ڏنل مضمون ۾ بيان ڪيل اختيار ڪم ڪري رهيو آهي ۽ لاڳو ڪرڻ ڏکيو ناهي، پر اسان کي هيٺ ڏنل نه وسارڻ گهرجي:
- minifi وٽ nifi کان سڀ پروسيسر نه آهن
- Minifi ۾ سي پي يو ورجن 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.
اسان لاءِ رجسٽري مان ضروري وهڪري لوڊ ڪرڻ لاءِ، اسان کي ٽوڪري جي سڃاڻپ ڪندڙ (بالٽ جي سڃاڻپ ڪندڙ) ۽ وهڪري پاڻ کي (فلو جي سڃاڻپ ڪندڙ) ڄاڻڻ جي ضرورت آهي. هي ڊيٽا حاصل ڪري سگهجي ٿو يا ته ڪلائي ذريعي يا 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 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
}
پيرا ميٽرس جيڪي ڀرڻ گهرجن "ڪم" ڪرڻ لاءِ:
رياست - ڊيٽا جي منتقلي جي صورتحال. دستياب TRANSMITTING ڊيٽا جي منتقلي کي فعال ڪرڻ لاءِ، بند ڪرڻ لاءِ بند ڪيو ويو
نسخو - پروسيسر ورزن
ورزن ڊفالٽ ٿيندو 0 تي جڏھن ٺاھيو ويو، پر اھي پيٽرول حاصل ڪري سگھجن ٿا طريقا استعمال ڪندي
بيش اسڪرپٽس جي شوقينن لاءِ، ھي طريقو مناسب لڳي سگھي ٿو، پر اھو مون لاءِ مشڪل آھي - بيش اسڪرپٽ منھنجي پسنديده ناھن. ايندڙ طريقو منهنجي خيال ۾ وڌيڪ دلچسپ ۽ وڌيڪ آسان آهي.
NiPyAPI
NiPyAPI هڪ Python لائبريري آهي 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 لائبريري جي ڊولپر ڏانهن لکڻ ۽ صلاح / مدد لاءِ پڇو. ڊولپر مون کي جواب ڏنو، اسان مسئلي تي بحث ڪيو ۽ هن لکيو ته هن کي "ڪجهه چيڪ ڪرڻ" لاء وقت جي ضرورت آهي. ۽ هاڻي، ڪجهه ڏينهن بعد، هڪ اي ميل اچي ٿي جنهن ۾ هڪ Python فنڪشن لکيل آهي جيڪو منهنجي شروعاتي مسئلو حل ڪري ٿو !!! ان وقت، NiPyAPI نسخو 0.13.3 هو ۽، يقينا، ان ۾ قسم جو ڪجھ به نه هو. پر نسخو 0.14.0 ۾، جيڪو تازو جاري ڪيو ويو هو، هي فنڪشن اڳ ۾ ئي لائبريري ۾ شامل ڪيو ويو آهي. ملن
nipyapi.canvas.set_remote_process_group_transmission
تنهن ڪري، NiPyAPI لائبريري جي مدد سان، اسان رجسٽري کي ڳنڍيو، وهڪري کي وڌايو، ۽ اڃا تائين پروسيسرز ۽ ڊيٽا جي منتقلي کي شروع ڪيو. پوءِ توھان ڪوڊ گڏ ڪري سگھوٿا، ھر قسم جا چيڪ شامل ڪري سگھو ٿا، لاگنگ ڪري سگھو ٿا ۽ بس. پر اهو هڪ مڪمل طور تي مختلف ڪهاڻي آهي.
آٽوميشن جي اختيارن مان جن تي مون غور ڪيو، بعد ۾ مون کي سڀ کان وڌيڪ ڪارائتو لڳي. سڀ کان پهريان، اهو اڃا تائين پٿون ڪوڊ آهي، جنهن ۾ توهان معاون پروگرام ڪوڊ شامل ڪري سگهو ٿا ۽ پروگرامنگ ٻولي جو پورو فائدو وٺي سگهو ٿا. ٻيو، NiPyAPI پروجيڪٽ فعال طور تي ترقي ڪري رهيو آهي ۽ مسئلن جي صورت ۾ توهان ڊولپر ڏانهن لکي سگهو ٿا. ٽيون، NiPyAPI اڃا تائين پيچيده مسئلن کي حل ڪرڻ ۾ NiFi سان رابطي لاءِ وڌيڪ لچڪدار اوزار آهي. مثال طور، اهو طئي ڪرڻ ۾ ته ڇا پيغام جون قطارون هن وقت وهڪري ۾ خالي آهن ۽ ڇا اهو عمل گروپ کي اپڊيٽ ڪرڻ ممڪن آهي.
اهو ئي سڀ ڪجهه آهي. مون بيان ڪيو آهي 3 طريقن کي خودڪار ڪرڻ جي وهڪري جي ترسيل لاءِ NiFi ۾، اهي نقصان جيڪي هڪ ڊولپر کي منهن ڏئي سگهي ٿو ۽ خودڪار ترسيل لاءِ ڪم ڪندڙ ڪوڊ مهيا ڪيو. جيڪڏهن توهان صرف هن موضوع ۾ دلچسپي وٺندا آهيو جيئن آئون آهيان -
جو ذريعو: www.habr.com