Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

تعارف

اهو ائين ٿيو آهي ته منهنجي موجوده ڪم جي جاء تي مون کي هن ٽيڪنالاجي سان واقف ٿيڻو پيو. مان ٿورڙي پس منظر سان شروع ڪندس. ايندڙ اجلاس ۾، اسان جي ٽيم کي ٻڌايو ويو ته اسان سان گڏ انضمام پيدا ڪرڻ جي ضرورت آهي معلوم نظام. انضمام جو مطلب اهو هو ته هي سڃاتل سسٽم اسان کي HTTP ذريعي هڪ مخصوص آخري پوائنٽ ڏانهن درخواستون موڪليندو، ۽ اسان، عجيب طور تي، هڪ SOAP پيغام جي صورت ۾ جواب واپس موڪلينداسين. سڀ ڪجھ سادو ۽ معمولي لڳي ٿو. انهي مان اهو آهي ته توهان کي ضرورت آهي ...

مقصد

3 خدمتون ٺاھيو. انهن مان پهريون آهي ڊيٽابيس اپڊيٽ سروس. هي خدمت، جڏهن نئين ڊيٽا ٽئين پارٽي جي سسٽم کان اچي ٿي، ڊيٽابيس ۾ ڊيٽا کي تازه ڪاري ڪري ٿي ۽ CSV فارميٽ ۾ هڪ فائل ٺاهي ٿي ان کي ايندڙ سسٽم ڏانهن منتقل ڪرڻ لاء. ٻئين سروس جي آخري پوائنٽ کي سڏيو ويندو آهي - FTP ٽرانسپورٽ سروس، جيڪا منتقل ٿيل فائل وصول ڪري ٿي، ان کي تصديق ڪري ٿي، ۽ ان کي FTP ذريعي فائل اسٽوريج ۾ رکي ٿو. ٽئين خدمت، صارف ڊيٽا جي منتقلي سروس، پهرين ٻن سان گڏ ڪم ڪري ٿي. اهو هڪ ٽئين پارٽي جي خارجي سسٽم کان هڪ درخواست وصول ڪري ٿو جيڪا مٿي ڄاڻايل فائل کي حاصل ڪرڻ لاء، تيار جوابي فائل وٺي ٿي، ان کي تبديل ڪري ٿو (ID، وضاحت، LinkToFile فيلڊ کي اپڊيٽ ڪري ٿو) ۽ جواب موڪلي ٿو SOAP پيغام جي صورت ۾. اهو آهي، مجموعي تصوير هن ريت آهي: پهرين ٻه خدمتون پنهنجو ڪم شروع ڪن ٿيون جڏهن تازه ڪاري لاء ڊيٽا اچي چڪو آهي. ٽيون سروس مسلسل ڪم ڪري ٿي ڇو ته معلومات جا ڪيترائي صارف آهن، اٽڪل 1000 درخواستون في منٽ ڊيٽا لاءِ. خدمتون مسلسل دستياب آهن ۽ انهن جا مثال مختلف ماحول ۾ واقع آهن، جهڙوڪ ٽيسٽ، ڊيمو، پري پروڊڪشن ۽ پروڊ. هيٺ ڏنل هڪ خاڪو آهي ته اهي خدمتون ڪيئن ڪم ڪن ٿيون. مون کي فوري طور تي واضح ڪرڻ ڏيو ته ڪجهه تفصيلن کي آسان ڪيو ويو آهي غير ضروري پيچيدگي کان بچڻ لاء.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

ٽيڪنيڪل ڊيپنگ

جڏهن مسئلو حل ڪرڻ جي منصوبابندي ڪريون ٿا، اسان پهريان فيصلو ڪيو ته جاوا ۾ ايپليڪيشنون ٺاهيون اسپرنگ فريم ورڪ، نينڪس بيلنس، پوسٽ گريس ڊيٽابيس ۽ ٻيون ٽيڪنيڪل ۽ نه ئي ٽيڪنيڪل شيون استعمال ڪندي. وقت کان وٺي هڪ ٽيڪنيڪل حل کي ترقي ڪرڻ لاء اسان کي هن مسئلي کي حل ڪرڻ لاء ٻين طريقن تي غور ڪرڻ جي اجازت ڏني وئي، اسان جي نظر Apache NIFI ٽيڪنالاجي تي ٿي، جيڪا ڪجهه حلقن ۾ فيشن آهي. مان فوري طور تي چوندس ته هن ٽيڪنالاجي اسان کي انهن 3 خدمتن کي نوٽيس ڪرڻ جي اجازت ڏني. هي آرٽيڪل فائل ٽرانسپورٽ سروس جي ترقي ۽ صارف کي ڊيٽا جي منتقلي جي خدمت جي وضاحت ڪندو، پر جيڪڏهن مضمون مفيد آهي، آئون ڊيٽابيس ۾ ڊيٽا کي اپڊيٽ ڪرڻ جي خدمت بابت لکندس.

اهو ڇا آهي؟

NIFI تيز متوازي لوڊ ڪرڻ ۽ ڊيٽا جي پروسيسنگ لاءِ هڪ ورهايل فن تعمير آهي، ذريعن ۽ تبديلين لاءِ پلگ ان جو وڏو تعداد، ترتيبن جي ورزننگ ۽ گهڻو ڪجهه. هڪ سٺو بونس اهو آهي ته اهو استعمال ڪرڻ بلڪل آسان آهي. معمولي عملن جهڙوڪ getFile، sendHttpRequest ۽ ٻيا پيش ڪري سگھجن ٿا چوڪن جي طور تي. هر چورس هڪ عمل جي نمائندگي ڪري ٿو، جنهن جو تعامل هيٺ ڏنل شڪل ۾ ڏسي سگھجي ٿو. پروسيس سيٽ اپ رابطي تي وڌيڪ تفصيلي دستاويز لکيو ويو آهي هتي انهن لاءِ جيڪي روسي ڳالهائين ٿا - هتي. دستاويز مڪمل طور تي بيان ڪري ٿو ته NIFI کي ڪيئن کوليو ۽ هلائڻ، ۽ انهي سان گڏ پروسيس ڪيئن ٺاهيو، پڻ اسڪوائر طور سڃاتو وڃي ٿو.
هڪ مضمون لکڻ جو خيال هڪ ڊگهي ڳولا کان پوءِ پيدا ٿيو ۽ حاصل ڪيل معلومات کي شعوري طور تي ترتيب ڏيڻ، انهي سان گڏ مستقبل جي ڊولپرز لاءِ زندگي کي ٿورو آسان بڻائڻ جي خواهش.

مثال طور

هڪ مثال طور سمجهيو ويندو آهي ته چورس هڪ ٻئي سان ڪيئن لهه وچڙ ۾ اچن ٿا. عام اسڪيم بلڪل سادو آهي: اسان هڪ HTTP درخواست وصول ڪندا آهيون (نظريي ۾، درخواست جي جسم ۾ هڪ فائل سان. NIFI جي صلاحيتن کي ظاهر ڪرڻ لاء، هن مثال ۾ درخواست مقامي فائل اسٽوريج مان فائل حاصل ڪرڻ جو عمل شروع ڪري ٿو. )، پوء اسان هڪ جواب واپس موڪليو ته درخواست ملي وئي آهي، متوازي طور تي FH کان فائل حاصل ڪرڻ جي عمل ۽ پوء ان کي FTP ذريعي FH ڏانهن منتقل ڪرڻ جو عمل. اهو واضح ڪرڻ جي قابل آهي ته پروسيس هڪ ٻئي سان نام نهاد flowFile ذريعي رابطو ڪن ٿا. هي NIFI ۾ بنيادي ادارو آهي جيڪو محفوظ ڪري ٿو خاصيتون ۽ مواد. مواد اهو ڊيٽا آهي جيڪو وهڪرو فائل جي نمائندگي ڪري ٿو. اهو آهي، تقريبن ڳالهائڻ، جيڪڏهن توهان هڪ چورس مان هڪ فائل وصول ڪيو ۽ ان کي ٻئي ڏانهن منتقل ڪيو، مواد توهان جي فائل هوندي.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

جئين توهان ڏسي سگهو ٿا، هي تصوير عام عمل ڏيکاري ٿو. HandleHttpRequest - درخواستون قبول ڪري ٿو، ReplaceText - ھڪڙو جوابي جسم ٺاھي ٿو، HandleHttpResponse - ھڪڙو جواب موڪلي ٿو. FetchFile - فائل اسٽوريج مان هڪ فائل وصول ڪري ٿو، ان کي چورس PutSftp ڏانهن منتقل ڪري ٿو - هن فائل کي FTP تي رکي ٿو، مخصوص پتي تي. هاڻي هن عمل جي باري ۾ وڌيڪ.

انهي حالت ۾، درخواست هر شيء جي شروعات آهي. اچو ته ان جي تشڪيل جي ماپن تي نظر.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

هتي هر شيءِ بلڪل معمولي آهي سواءِ StandardHttpContextMap جي - هي هڪ اهڙي قسم جي خدمت آهي جيڪا توهان کي موڪلڻ ۽ وصول ڪرڻ جي اجازت ڏئي ٿي. وڌيڪ تفصيل سان ۽ جيتوڻيڪ مثالن سان، توهان ڏسي سگهو ٿا - هتي

اڳيون، اچو ته ڏسو ReplaceText configuration parameters of چورس. اهو ReplacementValue تي ڌيان ڏيڻ جي قابل آهي - اهو آهي جيڪو جواب جي صورت ۾ صارف ڏانهن واپس ڪيو ويندو. سيٽنگن ۾ توهان لاگنگ جي سطح کي ترتيب ڏئي سگهو ٿا، توهان لاگز ڏسي سگهو ٿا {جتي توهان nifi-1.9.2/logs unpacked ڪيو ٿا، اتي پڻ ناڪامي/ڪاميابي جا پيرا ميٽر آهن - انهن پيرا ميٽرن جي بنياد تي توهان مڪمل طور تي عمل کي منظم ڪري سگهو ٿا . اهو آهي، ڪامياب ٽيڪسٽ پروسيسنگ جي صورت ۾، صارف کي جواب موڪلڻ جي عمل کي سڏيو ويندو، ۽ ٻي صورت ۾ اسان صرف ناڪامي عمل کي لاگ ان ڪنداسين.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

HandleHttpResponse پراپرٽيز ۾ ڪا خاص دلچسپ شيءِ ناهي سواءِ ان اسٽيٽس جي جڏهن ڪو جواب ڪاميابيءَ سان ٺاهيو وڃي.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

اسان درخواست ۽ جواب کي ترتيب ڏنو آهي - اچو ته فائل حاصل ڪرڻ ۽ ان کي FTP سرور تي رکڻ لاءِ اڳتي وڌون. FetchFile - سيٽنگون ۾ بيان ڪيل رستي تي ھڪڙي فائل وصول ڪري ٿي ۽ ان کي ايندڙ عمل ڏانھن منتقل ڪري ٿو.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

۽ پوءِ PutSftp اسڪوائر - فائل کي فائل اسٽوريج ۾ رکي ٿو. اسان هيٺ ڏنل ترتيبن جا پيراگراف ڏسي سگھون ٿا.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

اهو حقيقت تي ڌيان ڏيڻ جي قابل آهي ته هر چورس هڪ الڳ عمل آهي جيڪو شروع ڪيو وڃي. اسان هڪ سادي مثال تي غور ڪيو جنهن کي ڪنهن به پيچيده ڪسٽمائيزيشن جي ضرورت ناهي. اڳيون، اسان پروسيس کي ٿورو وڌيڪ پيچيده نظر ڪنداسين، جتي اسان نالن تي ٿورو لکنداسين.

وڌيڪ پيچيده مثال

صارف ڏانهن ڊيٽا جي منتقلي جي خدمت SOAP پيغام کي تبديل ڪرڻ جي عمل جي ڪري ٿورو وڌيڪ پيچيده ٿي ويو. عام عمل هيٺ ڏنل شڪل ۾ ڏيکاريل آهي.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

هتي اهو خيال به خاص پيچيده نه آهي: اسان صارف کان هڪ درخواست وصول ڪئي ته هن کي ڊيٽا جي ضرورت آهي، هڪ جواب موڪليو ته هن کي هڪ پيغام مليو آهي، جواب فائل حاصل ڪرڻ جو عمل شروع ڪيو، پوء ان کي هڪ خاص منطق سان تبديل ڪيو، ۽ پوء فائل کي صارف ڏانهن SOAP پيغام جي صورت ۾ سرور ڏانهن منتقل ڪيو.

مان سمجهان ٿو ته انهن چوڪن کي ٻيهر بيان ڪرڻ جي ڪا ضرورت ناهي جيڪي اسان مٿي ڏٺا آهن - اچو ته سڌو سنئون نوان ڏانهن وڃو. جيڪڏھن توھان کي ڪنھن فائل ۾ ترميم ڪرڻ جي ضرورت آھي ۽ عام ReplaceText قسم جا اسڪوائر مناسب نه آھن، توھان کي پنھنجو اسڪرپٽ لکڻو پوندو. اهو استعمال ڪري سگهجي ٿو ExecuteGroogyScript چورس. ان جي سيٽنگون هيٺ پيش ڪيون ويون آهن.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

ھن اسڪوائر ۾ اسڪرپٽ لوڊ ڪرڻ لاءِ ٻه آپشن آھن. پهرين هڪ اسڪرپٽ سان فائل ڊائون لوڊ ڪندي آهي. ٻيو آهي اسڪرپٽ داخل ڪندي اسڪرپٽ باڊي ۾. جيتري قدر مون کي خبر آهي، executeScript اسڪوائر ڪيترن ئي ٻولين کي سپورٽ ڪري ٿو - انهن مان هڪ گرووي آهي. مان جاوا ڊولپرز کي مايوس ڪندس - توھان اھڙين چوڪن ۾ جاوا ۾ اسڪرپٽ نٿا لکي سگھو. انھن لاءِ جيڪي واقعي چاھين ٿا، توھان کي ضرورت آھي پنھنجو ذاتي اسڪوائر ٺاھيو ۽ ان کي NIFI سسٽم ۾ شامل ڪريو. هي سڄو آپريشن هڪ ڊگهي ڊانس سان گڏ آهي، جيڪو اسان هن مضمون ۾ نه ڪنداسين. مون گورو ٻولي چونڊيو. هيٺ ڏنل هڪ ٽيسٽ اسڪرپٽ آهي جيڪا صرف هڪ SOAP پيغام ۾ آئي ڊي کي وڌ ۾ وڌ اپڊيٽ ڪري ٿي. اهو نوٽ ڪرڻ ضروري آهي. توهان flowFile مان فائل وٺو ۽ ان کي تازه ڪاري ڪريو، نه وساريو ته توهان کي ان کي واپس رکڻ جي ضرورت آهي، تازه ڪاري. اهو پڻ قابل ذڪر آهي ته سڀئي لائبريريون شامل نه آهن. اهو ٿي سگهي ٿو ته توهان اڃا تائين هڪ libs درآمد ڪرڻو پوندو. ٻيو نقصان اهو آهي ته هن اسڪوائر ۾ اسڪرپٽ ڊيبگ ڪرڻ ڪافي ڏکيو آهي. NIFI JVM سان ڳنڍڻ ۽ ڊيبنگ جي عمل کي شروع ڪرڻ جو هڪ طريقو آهي. ذاتي طور تي، مون هڪ مقامي ايپليڪيشن شروع ڪئي ۽ سيشن مان هڪ فائل حاصل ڪرڻ جي تخليق ڪئي. مون مقامي طور تي ڊيبنگ پڻ ڪيو. غلطيون جيڪي ظاهر ٿين ٿيون جڏهن اسڪرپٽ لوڊ ڪندي گوگل لاءِ ڪافي آسان آهن ۽ NIFI پاران پاڻ لاگ ۾ لکيل آهن.

import org.apache.commons.io.IOUtils
import groovy.xml.XmlUtil
import java.nio.charset.*
import groovy.xml.StreamingMarkupBuilder

def flowFile = session.get()
if (!flowFile) return
try {
    flowFile = session.write(flowFile, { inputStream, outputStream ->
        String result = IOUtils.toString(inputStream, "UTF-8");
        def recordIn = new XmlSlurper().parseText(result)
        def element = recordIn.depthFirst().find {
            it.name() == 'id'
        }

        def newId = Integer.parseInt(element.toString()) + 1
        def recordOut = new XmlSlurper().parseText(result)
        recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId

        def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()
        outputStream.write(res.getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
     session.transfer(flowFile, REL_SUCCESS)
}
catch(Exception e) {
    log.error("Error during processing of validate.groovy", e)
    session.transfer(flowFile, REL_FAILURE)
}

دراصل، هي آهي جتي چورس جي حسب ضرورت ختم ٿئي ٿي. اڳيون، اپڊيٽ ٿيل فائل چورس ڏانهن منتقل ڪيو ويو آهي، جيڪو سرور ڏانهن فائل موڪلڻ جو ذميوار آهي. هن اسڪوائر لاءِ هيٺيون سيٽنگون آهن.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

اسان اهو طريقو بيان ڪريون ٿا جنهن ذريعي هڪ SOAP پيغام منتقل ڪيو ويندو. اسان ڪٿي لکون ٿا. اڳيون توهان کي ظاهر ڪرڻ جي ضرورت آهي ته هي SOAP آهي.

Apache NIFI - مشق ۾ خاصيتن جو مختصر جائزو

ڪيترائي خاصيتون شامل ڪريو جهڙوڪ ميزبان ۽ عمل (صابن ايڪشن). اسان بچايو ۽ چيڪ ڪريو. توهان وڌيڪ تفصيل ڏسي سگهو ٿا ته ڪيئن موڪلجي SOAP درخواستون هتي

اسان NIFI عملن کي استعمال ڪرڻ لاءِ ڪيترن ئي اختيارن تي غور ڪيو. انهن جو تعلق ڪيئن آهي ۽ انهن جو حقيقي فائدو ڇا آهي؟ سمجھيل مثالن جا امتحان آھن ۽ ڪجھ مختلف آھن جيڪي اصل ۾ جنگ ۾ ٿين ٿا. مون کي اميد آهي ته هي آرٽيڪل ڊولپرز لاءِ ٿورڙو مفيد ثابت ٿيندو. توهان جي توجه لاء مهرباني. جيڪڏهن توهان وٽ ڪو سوال آهي، لکو. مان جواب ڏيڻ جي ڪوشش ڪندس.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو