Apache NIFI - Практикадагы функциялардын кыскача баяндамасы

тааныштыруу

Ошентип, азыркы иштеген жеримде бул технология менен таанышууга туура келди. Мен бир аз фон менен баштайын. Кийинки жолугушууда биздин команда менен интеграция түзүшүбүз керектиги айтылды белгилүү система. Интеграциялоо менен бул белгилүү система бизге HTTP аркылуу белгилүү бир акыркы чекитке суроо-талаптарды жөнөтөт жана биз, таң калыштуусу, жоопторду SOAP билдирүүсү түрүндө жөнөтөбүз дегенди билдирген. Баары жөнөкөй жана арзыбагандай көрүнөт. Ушундан улам, сизге керек ...

маселе

3 кызмат түзүү. Алардын биринчиси – Маалыматтар базасын жаңыртуу кызматы. Бул кызмат үчүнчү тараптын тутумунан жаңы маалыматтар келгенде, маалымат базасындагы маалыматтарды жаңыртат жана кийинки системага өткөрүү үчүн CSV форматында файлды түзөт. Экинчи кызматтын акыркы чекити деп аталат - FTP Транспорт кызматы, ал өткөрүлүп берилген файлды кабыл алып, аны текшерет жана FTP аркылуу файл сактагычына салат. Үчүнчү кызмат, керектөөчү маалыматтарды берүү кызматы, биринчи экөө менен асинхрондуу иштейт. Ал үчүнчү тараптын тышкы тутумунан жогоруда талкууланган файлды алуу өтүнүчүн алат, даяр жооп файлын алат, аны өзгөртөт (id, сүрөттөмө, linkToFile талааларын жаңылайт) жана жоопту SOAP билдирүүсү түрүндө жөнөтөт. Башкача айтканда, жалпы сүрөт төмөнкүдөй: биринчи эки кызмат жаңылоо үчүн маалыматтар келгенде гана ишин баштайт. Үчүнчү сервис тынымсыз иштейт, анткени маалыматты керектөөчүлөр көп, мүнөтүнө 1000ге жакын маалыматтар. Кызматтар дайыма жеткиликтүү жана алардын инстанциялары тест, демо, алдын ала өндүрүш жана өндүрүш сыяктуу ар кандай чөйрөлөрдө жайгашкан. Төмөндө бул кызматтардын кантип иштээри диаграммасы келтирилген. Керексиз татаалдыкты болтурбоо үчүн кээ бир деталдар жөнөкөйлөштүрүлгөнүн дароо түшүндүрүп берейин.

Apache NIFI - Практикадагы функциялардын кыскача баяндамасы

Техникалык тереңдетүү

Көйгөйдүн чечилишин пландаштырып жатканда, биз алгач Spring Framework, Nginx баланстоочу, Postgres маалымат базасы жана башка техникалык, анчалык деле техникалык эмес нерселерди колдонуу менен Java тилинде тиркемелерди жасоону чечтик. Техникалык чечимди иштеп чыгуу убактысы бизге бул маселени чечүүнүн башка жолдорун карап чыгууга мүмкүндүк бергендиктен, биздин көз карашыбыз белгилүү чөйрөлөрдө мода болгон 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-1.9.2/logs сиз таңгактан чыгарган жерден}/nifi-XNUMX/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 тутумуна кошушуңуз керек. Бул бүт операция дап менен бир топ узун бий менен коштолот, биз бул макалада талкуулабайбыз. Мен кооз тилди тандадым. Төмөндө SOAP билдирүүсүндөгү идентификаторду акырындык менен жаңыртуучу сыноо скрипти. Бул белгилей кетүү маанилүү. Сиз flowFile файлынан файлды алып, жаңыртасыз, аны кайра ошол жерге коюу керек экенин унутпаңыз, жаңыртыңыз. Ошондой эле бардык китепканалар камтылган эмес экенин белгилей кетүү керек. Сиз дагы эле libs бирин импорттоого туура келиши мүмкүн. Дагы бир жетишпеген жагы - бул квадраттагы скрипти оңдоо кыйын. 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 кабарын берүү ыкмасын сүрөттөп беребиз. Кайда жазабыз. Андан кийин бул САМЫН экенин көрсөтүшүңүз керек.

Apache NIFI - Практикадагы функциялардын кыскача баяндамасы

Хост жана аракет (soapAction) сыяктуу бир нече касиеттерди кошуңуз. Сактап, текшеребиз. SOAP суроо-талаптарын кантип жөнөтүү керектиги тууралуу кененирээк маалыматты көрө аласыз бул жерде

Биз NIFI процесстерин колдонуунун бир нече варианттарын карап чыктык. Алар кантип өз ара аракеттенишет жана алардын чыныгы пайдасы эмнеде? Каралган мисалдар сыноо болуп саналат жана согушта болгон окуялардан бир аз айырмаланат. Мен бул макала иштеп чыгуучулар үчүн бир аз пайдалуу болот деп үмүттөнөм. Конул бурганын учун рахмат. Суроолоруңуз болсо жазыңыз. Мен жооп бергенге аракет кылам.

Source: www.habr.com

Комментарий кошуу