Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Муқаддима

Чунин шуд, ки дар чои корам ман бояд бо ин технология шинос шавам. Ман бо каме замина оғоз мекунам. Дар вохӯрии навбатӣ ба дастаи мо гуфтанд, ки мо бояд бо интегратсия эҷод кунем системаи маълум. Интегратсия маънои онро дошт, ки ин системаи маъруф ба мо тавассути HTTP ба нуқтаи муайян дархостҳо мефиристад ва мо, аҷиб аст, ки ҷавобҳоро дар шакли паёми SOAP бармегардонем. Ҳама чиз оддӣ ва ночиз ба назар мерасад. Аз ин бармеояд, ки ба шумо лозим аст ...

Мақсад

3 хидмат эҷод кунед. Яке аз онҳо хидмати навсозии пойгоҳи додаҳо мебошад. Ин хидмат, вақте ки маълумоти нав аз системаи тарафи сеюм ворид мешавад, маълумотро дар пойгоҳи додаҳо навсозӣ мекунад ва файлро дар формати CSV барои интиқоли он ба системаи оянда тавлид мекунад. Нуқтаи ниҳоии хидмати дуюм номида мешавад - Хадамоти нақлиёти FTP, ки файли интиқолшударо қабул мекунад, онро тасдиқ мекунад ва тавассути FTP дар нигаҳдории файл мегузорад. Хидмати сеюм, хидмати интиқоли додаҳои истеъмолӣ, бо дуи аввал асинхронӣ кор мекунад. Он аз системаи берунии тарафи сеюм дархостро барои гирифтани файли дар боло муҳокимашуда қабул мекунад, файли ҷавоби омодаро мегирад, онро тағир медиҳад (майдонҳои ID, тавсиф, linkToFile навсозӣ мекунад) ва посухро дар шакли паёми SOAP мефиристад. Яъне, манзараи умумӣ чунин аст: ду хидмати аввал танҳо пас аз расидани маълумот барои навсозӣ кори худро оғоз мекунанд. Хидмати сеюм пайваста кор мекунад, зеро истеъмолкунандагони зиёди иттилоот вуҷуд доранд, тақрибан 1000 дархост барои маълумот дар як дақиқа. Хидматҳо ҳамеша дастрасанд ва намунаҳои онҳо дар муҳитҳои гуногун, ба монанди озмоиш, намоишӣ, пеш аз истеҳсол ва истеҳсол ҷойгиранд. Дар зер диаграммаи кор кардани ин хидматҳо оварда шудааст. Иҷозат диҳед фавран фаҳмонам, ки баъзе тафсилотҳо барои пешгирӣ кардани мураккабии нолозим содда карда шудаанд.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Амиқсозии техникӣ

Ҳангоми банақшагирии ҳалли мушкилот, мо аввал тасмим гирифтем, ки барномаҳоро дар Java бо истифода аз чаҳорчӯбаи Spring, balanser Nginx, пойгоҳи додаҳои Postgres ва дигар чизҳои техникӣ ва на он қадар техникӣ созем. Азбаски вақти таҳияи ҳалли техникӣ ба мо имкон дод, ки равишҳои дигари ҳалли ин мушкилотро баррасӣ кунем, нигоҳи мо ба технологияи 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-и мураббаъ назар кунем. Ба ReplacementValue диққат додан лозим аст - ин он чизест, ки ба корбар дар шакли посух баргардонида мешавад. Дар танзимот шумо метавонед сатҳи сабтро танзим кунед, шумо метавонед гузоришҳоро бинед {дар он ҷо шумо nifi-ро кушодаед}/nifi-1.9.2/logs, инчунин параметрҳои нокомӣ/муваффақият мавҷуданд - дар асоси ин параметрҳо шумо метавонед равандро дар маҷмӯъ танзим кунед . Яъне, дар сурати бомуваффақияти коркарди матн, раванди ирсоли посух ба корбар даъват карда мешавад ва дар ҳолати дигар мо танҳо раванди нокомро сабт мекунем.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Дар хосиятҳои HandleHttpResponse чизи ҷолибе вуҷуд надорад, ба истиснои ҳолате, ки посух бомуваффақият эҷод мешавад.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Мо дархост ва ҷавобро ҷудо кардем - биёед ба қабули файл ва ҷойгиркунии он дар сервери FTP гузарем. FetchFile - файлро дар роҳе, ки дар танзимот нишон дода шудааст, қабул мекунад ва ба раванди оянда мегузарад.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Ва он гоҳ майдони PutSftp - файлро дар нигаҳдории файл ҷойгир мекунад. Мо метавонем параметрҳои конфигуратсияро дар зер бубинем.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Қобили таваҷҷӯҳ ба он аст, ки ҳар як майдон як раванди алоҳидаест, ки бояд оғоз шавад. Мо соддатарин мисолро дида баромадем, ки ягон мутобиқсозии мураккабро талаб намекунад. Минбаъд, мо раванди каме мураккабтарро дида мебароем, ки дар он ҷо каме дар чуқуриҳо менависем.

Мисоли мураккабтар

Хидмати интиқоли маълумот ба истеъмолкунанда аз сабаби раванди тағир додани паёми SOAP каме мушкилтар шуд. Раванди умумӣ дар расми зер нишон дода шудааст.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Дар ин ҷо идея низ чандон мураккаб нест: мо аз истеъмолкунанда дархост гирифтем, ки ба ӯ маълумот лозим аст, ҷавоб фиристод, ки ӯ паём гирифтааст, раванди қабули файли ҷавобро оғоз кард, сипас онро бо як мантиқи муайян таҳрир кард ва сипас файлро ба истеъмолкунанда дар шакли паёми SOAP ба сервер интиқол дод.

Ман фикр мекунам, ки дубора тавсиф кардани он квадратҳое, ки мо дар боло дидем, лозим нест - биёед рост ба навтаринҳо гузарем. Агар ба шумо ягон файл таҳрир кардан лозим бошад ва квадратҳои навъи ReplaceText мувофиқ набошанд, шумо бояд скрипти худро нависед. Инро бо истифода аз майдони ExecuteGroogyScript кардан мумкин аст. Танзимоти он дар зер оварда шудаанд.

Apache NIFI - Шарҳи мухтасари хусусиятҳо дар амал

Ду вариант барои бор кардани скрипт ба ин мураббаъ вуҷуд дорад. Якум ин бо зеркашии файл бо скрипт аст. Дуюм ин тавассути ворид кардани скрипт ба scriptBody. То ҷое ки ман медонам, квадрати executeScript якчанд забонҳоро дастгирӣ мекунад - яке аз онҳо ҷолиб аст. Ман таҳиягарони javaро ноумед мекунам - шумо наметавонед скриптҳоро дар java дар чунин квадратҳо нависед. Барои онҳое, ки воқеан мехоҳанд, ба шумо лозим аст, ки майдони фармоишии худро созед ва онро ба системаи NIFI илова кунед. Тамоми ин амалиёт бо рақси хеле тӯлонӣ бо даф ҳамроҳ карда мешавад, ки мо дар ин мақола сарукор намекунем. Ман забони ҷолибро интихоб кардам. Дар зер скрипти санҷишӣ мавҷуд аст, ки ба таври оддӣ ID-ро дар паёми SOAP навсозӣ мекунад. Кайд кардан мухим аст. Шумо файлро аз flowFile мегиред ва онро навсозӣ мекунед, фаромӯш накунед, ки шумо бояд онро ба он ҷо гузоред, навсозӣ кунед. Инчунин бояд гуфт, ки на хамаи китобхонахо дохил карда шудаанд. Мумкин аст, ки шумо ба ҳар ҳол бояд яке аз либерҳоро ворид кунед. Камбудии дигар дар он аст, ки скрипт дар ин майдон ислоҳ кардан хеле душвор аст. Роҳи пайвастшавӣ ба NIFI JVM ва оғози раванди ислоҳкунӣ вуҷуд дорад. Шахсан ман як замимаи маҳаллиро оғоз кардам ва қабули файлро аз сессия тақлид кардам. Ман инчунин ба таври маҳаллӣ ислоҳи ислоҳро анҷом додам. Хатоҳое, ки ҳангоми боркунии скрипт пайдо мешаванд, барои Google хеле осонанд ва аз ҷониби худи 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 - Шарҳи мухтасари хусусиятҳо дар амал

Якчанд хосиятҳо ба монанди мизбон ва амал (soapAction) илова кунед. Мо захира мекунем ва тафтиш мекунем. Шумо метавонед тафсилоти бештарро дар бораи чӣ гуна фиристодани дархостҳои SOAP дидан кунед дар ин ҷо

Мо якчанд вариантҳоро барои истифодаи равандҳои NIFI дида баромадем. Онҳо чӣ гуна ҳамкорӣ мекунанд ва фоидаи аслии онҳо чист? Намунаҳои баррасишуда намунаҳои санҷишӣ мебошанд ва аз он чизе, ки воқеан дар ҷанг рух медиҳад, каме фарқ мекунанд. Ман умедворам, ки ин мақола барои таҳиягарон каме муфид хоҳад буд. Ба диққататон ташаккур. Агар шумо ягон савол дошта бошед, нависед. Ман кӯшиш мекунам ҷавоб диҳам.

Манбаъ: will.com

Илова Эзоҳ