Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Ifihan

O ṣẹlẹ pe ni ibi iṣẹ mi lọwọlọwọ Mo ni lati ni oye pẹlu imọ-ẹrọ yii. Emi yoo bẹrẹ pẹlu abẹlẹ diẹ. Ni ipade ti o tẹle, a sọ fun ẹgbẹ wa pe a nilo lati ṣẹda iṣọpọ pẹlu mọ eto. Nipa iṣọpọ o tumọ si pe eto ti a mọ daradara yoo fi awọn ibeere ranṣẹ si wa nipasẹ HTTP si aaye ipari kan pato, ati pe a, lainidii, yoo firanṣẹ awọn idahun pada ni irisi ifiranṣẹ SOAP kan. Ohun gbogbo dabi ohun rọrun ati ki o bintin. Lati eyi o tẹle pe o nilo ...

Nkan

Ṣẹda awọn iṣẹ 3. Akọkọ ninu wọn ni Iṣẹ Imudojuiwọn aaye data. Iṣẹ yii, nigbati data tuntun ba de lati eto ẹnikẹta, ṣe imudojuiwọn data ninu aaye data ati ṣe ipilẹṣẹ faili ni ọna kika CSV lati gbe lọ si eto atẹle. Ipari ipari ti iṣẹ keji ni a pe - Iṣẹ Irin-ajo FTP, eyiti o gba faili ti o ti gbe, fọwọsi rẹ, ati fi sii ni ibi ipamọ faili nipasẹ FTP. Iṣẹ kẹta, iṣẹ gbigbe data olumulo, ṣiṣẹ ni asynchronously pẹlu awọn meji akọkọ. O gba ibeere kan lati ọdọ eto ita ẹni-kẹta lati gba faili ti a sọrọ loke, gba faili idahun ti o ṣetan, ṣe atunṣe (imudojuiwọn id, apejuwe, awọn aaye linkToFile) ati firanṣẹ esi ni irisi ifiranṣẹ SOAP kan. Iyẹn ni, aworan gbogbogbo jẹ bi atẹle: awọn iṣẹ meji akọkọ bẹrẹ iṣẹ wọn nikan nigbati data fun imudojuiwọn ti de. Iṣẹ kẹta n ṣiṣẹ nigbagbogbo nitori ọpọlọpọ awọn onibara alaye wa, nipa awọn ibeere 1000 fun data fun iṣẹju kan. Awọn iṣẹ wa nigbagbogbo ati awọn iṣẹlẹ wọn wa ni awọn agbegbe oriṣiriṣi, gẹgẹbi idanwo, demo, iṣelọpọ iṣaaju ati ọja. Ni isalẹ ni aworan atọka ti bii awọn iṣẹ wọnyi ṣe n ṣiṣẹ. Jẹ ki n ṣalaye lẹsẹkẹsẹ pe diẹ ninu awọn alaye ti jẹ irọrun lati yago fun idiju ti ko wulo.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Imọ jinlẹ

Nigbati o ba gbero ojutu kan si iṣoro naa, a kọkọ pinnu lati ṣe awọn ohun elo ni Java nipa lilo ilana orisun omi, iwọntunwọnsi Nginx, ibi ipamọ data Postgres ati imọ-ẹrọ miiran ati kii ṣe awọn ohun imọ-ẹrọ bẹ. Niwọn igba ti akoko lati ṣe agbekalẹ ojutu imọ-ẹrọ gba wa laaye lati gbero awọn ọna miiran lati yanju iṣoro yii, iwo wa ṣubu lori imọ-ẹrọ Apache NIFI, eyiti o jẹ asiko ni awọn iyika kan. Emi yoo sọ lẹsẹkẹsẹ pe imọ-ẹrọ yii gba wa laaye lati ṣe akiyesi awọn iṣẹ 3 wọnyi. Nkan yii yoo ṣe apejuwe idagbasoke ti iṣẹ gbigbe faili ati iṣẹ gbigbe data si olumulo, ṣugbọn ti nkan naa ba wulo, Emi yoo kọ nipa iṣẹ naa fun imudojuiwọn data ninu ibi ipamọ data.

Kini o?

NIFI jẹ faaji ti a pin kaakiri fun ikojọpọ afiwera iyara ati sisẹ data, nọmba nla ti awọn afikun fun awọn orisun ati awọn iyipada, ti ikede awọn atunto ati pupọ diẹ sii. A nice ajeseku ni wipe o jẹ gidigidi rọrun a lilo. Awọn ilana bintin bii getFile, sendHttpRequest ati awọn miiran le jẹ aṣoju bi awọn onigun mẹrin. Onigun mẹrin kọọkan ṣe aṣoju ilana kan, ibaraenisepo eyiti o le rii ninu nọmba ni isalẹ. Awọn iwe alaye diẹ sii lori awọn ibaraẹnisọrọ iṣeto ilana ti kọ nibi , fun awọn ti o sọ Russian - nibi. Iwe naa ṣe apejuwe ni pipe bi o ṣe le ṣii ati ṣiṣẹ NIFI, bakanna bi o ṣe le ṣẹda awọn ilana, ti a tun mọ ni awọn onigun mẹrin
Imọran lati kọ nkan kan ni a bi lẹhin wiwa gigun ati iṣeto alaye ti o gba sinu nkan mimọ, ati ifẹ lati jẹ ki igbesi aye rọrun diẹ fun awọn idagbasoke iwaju.

Apeere:

Apeere ti bii awọn onigun mẹrin ṣe nlo pẹlu ara wọn ni a gbero. Ilana gbogbogbo jẹ ohun rọrun: A gba ibeere HTTP (Ni imọran, pẹlu faili kan ninu ara ti ibeere naa. Lati ṣe afihan awọn agbara ti NIFI, ninu apẹẹrẹ yii ibeere naa bẹrẹ ilana ti gbigba faili kan lati ibi ipamọ faili agbegbe ), lẹhinna a firanṣẹ esi pada pe o ti gba ibeere naa, ni afiwe ilana gbigba faili lati FH ati lẹhinna ilana gbigbe nipasẹ FTP si FH. O tọ lati ṣalaye pe awọn ilana ṣe ajọṣepọ pẹlu ara wọn nipasẹ eyiti a pe ni flowFile. Eyi ni nkan ipilẹ ni NIFI ti o tọju awọn abuda ati akoonu. Akoonu jẹ data ti o jẹ aṣoju nipasẹ faili ṣiṣan. Iyẹn ni, ni aijọju sisọ, ti o ba gba faili kan lati onigun mẹrin kan ati gbe lọ si omiiran, akoonu yoo jẹ faili rẹ.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Bi o ti le rii, aworan yii fihan ilana gbogbogbo. Ibeere HandleHttp - gba awọn ibeere, ReplaceText - ṣe agbekalẹ ara idahun, Idahun HandleHttp - fi esi ranṣẹ. FetchFile - gba faili kan lati ibi ipamọ faili kan, gbe lọ si square PutSftp - fi faili yii sori FTP, ni adirẹsi ti a sọ. Bayi diẹ sii nipa ilana yii.

Ni idi eyi, ibeere jẹ ibẹrẹ ohun gbogbo. Jẹ ká wo ni awọn oniwe-iṣeto ni sile.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Ohun gbogbo ti o wa nibi jẹ ohun kekere pẹlu ayafi ti StandardHttpContextMap - eyi jẹ iru iṣẹ ti o fun ọ laaye lati firanṣẹ ati gba awọn ibeere. Ni awọn alaye diẹ sii ati paapaa pẹlu awọn apẹẹrẹ, o le rii - nibi

Nigbamii, jẹ ki a wo awọn aye atunto ReplaceText ti square naa. O tọ lati san ifojusi si ReplacementValue - eyi ni ohun ti yoo da pada si olumulo ni irisi esi kan. Ninu awọn eto o le ṣatunṣe ipele ti gedu, o le wo awọn akọọlẹ {nibiti o ti ko niifi}/nifi-1.9.2/logs, ikuna/aṣeyọri tun wa - da lori awọn paramita wọnyi o le ṣe ilana ilana naa lapapọ. . Iyẹn ni, ninu ọran sisẹ ọrọ aṣeyọri, ilana ti fifiranṣẹ esi si olumulo yoo pe, ati ni ọran miiran a yoo wọle nirọrun ilana ti ko ni aṣeyọri.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Ko si ohun ti o nifẹ si ni pataki ni awọn ohun-ini Idahun HandleHttp ayafi ipo nigbati o ti ṣẹda esi ni aṣeyọri.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

A ti ṣeto ibeere ati idahun - jẹ ki a tẹsiwaju si gbigba faili ati gbigbe si olupin FTP. FetchFile - gba faili kan ni ọna ti a sọ pato ninu awọn eto ati gbe lọ si ilana atẹle.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Ati lẹhinna aaye PutSftp - gbe faili naa sinu ibi ipamọ faili. A le wo awọn paramita iṣeto ni isalẹ.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

O tọ lati san ifojusi si otitọ pe square kọọkan jẹ ilana ti o yatọ ti o gbọdọ ṣe ifilọlẹ. A wo apẹẹrẹ ti o rọrun julọ ti ko nilo isọdi idiju eyikeyi. Nigbamii ti, a yoo wo ilana naa diẹ diẹ sii idiju, nibiti a yoo kọ kekere kan lori awọn grooves.

Diẹ eka apẹẹrẹ

Iṣẹ gbigbe data si olumulo ti jade lati jẹ idiju diẹ sii nitori ilana ti iyipada ifiranṣẹ SOAP. Ilana gbogbogbo ti han ni aworan ni isalẹ.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Nibi ero naa tun ko ni idiju paapaa: a gba ibeere lati ọdọ alabara pe o nilo data, firanṣẹ esi pe o ti gba ifiranṣẹ kan, bẹrẹ ilana ti gbigba faili esi, lẹhinna ṣatunkọ pẹlu ọgbọn kan, ati lẹhinna. gbe faili naa si olumulo ni irisi ifiranṣẹ SOAP si olupin naa.

Mo ro pe ko si iwulo lati ṣe apejuwe lẹẹkansii awọn onigun mẹrin ti a rii loke - jẹ ki a lọ taara si awọn tuntun. Ti o ba nilo lati satunkọ eyikeyi faili ati awọn onigun mẹrin ReplaceText lasan ko dara, iwọ yoo ni lati kọ iwe afọwọkọ tirẹ. Eyi le ṣee ṣe nipa lilo square ExecuteGroogyScript. Awọn eto rẹ ti gbekalẹ ni isalẹ.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Awọn aṣayan meji wa fun ikojọpọ iwe afọwọkọ sinu onigun mẹrin yii. Akọkọ jẹ nipa gbigba faili kan pẹlu iwe afọwọkọ kan. Awọn keji ni nipa fifi a akosile sinu scriptBody. Gẹgẹ bi mo ti mọ, square executeScript ṣe atilẹyin awọn ede pupọ - ọkan ninu wọn jẹ groovy. Emi yoo bajẹ java Difelopa - o ko le kọ awọn iwe afọwọkọ ni java ni iru awọn onigun mẹrin. Fun awọn ti o fẹ gaan, o nilo lati ṣẹda square aṣa tirẹ ki o ṣafikun si eto NIFI. Gbogbo isẹ yii wa pẹlu ijó gigun pupọ pẹlu tambourin, eyiti a kii yoo ṣe pẹlu ninu nkan yii. Mo ti yan awọn groovy ede. Ni isalẹ ni iwe afọwọkọ idanwo ti o rọrun ni imudojuiwọn id ni ifiranṣẹ SOAP kan. O ṣe pataki lati ṣe akiyesi. O gba faili lati flowFile ki o ṣe imudojuiwọn, maṣe gbagbe pe o nilo lati fi sii pada sibẹ, imudojuiwọn. O tun tọ lati ṣe akiyesi pe kii ṣe gbogbo awọn ile-ikawe wa pẹlu. O le ṣẹlẹ pe o tun ni lati gbe ọkan ninu awọn libs wọle. Idakeji miiran ni pe iwe afọwọkọ ni square yii jẹ ohun ti o nira pupọ lati yokokoro. Ọna kan wa lati sopọ si NIFI JVM ati bẹrẹ ilana n ṣatunṣe aṣiṣe. Tikalararẹ, Mo ṣe ifilọlẹ ohun elo agbegbe ati kikopa gbigba faili kan lati igba naa. Mo tun ṣe n ṣatunṣe aṣiṣe ni agbegbe. Awọn aṣiṣe ti o han nigbati ikojọpọ iwe afọwọkọ jẹ irọrun pupọ si Google ati pe NIFI funrararẹ kọ si log.

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)
}

Lootọ, eyi ni ibi ti isọdi ti square dopin. Nigbamii ti, faili ti a ṣe imudojuiwọn ti gbe lọ si square, eyiti o jẹ iduro fun fifiranṣẹ faili si olupin naa. Ni isalẹ wa ni awọn eto fun onigun mẹrin yii.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

A ṣe apejuwe ọna nipasẹ eyiti ifiranṣẹ SOAP yoo ṣe tan kaakiri. A kọ ibi ti. Nigbamii o nilo lati fihan pe eyi ni ỌṢẸ.

Apache NIFI - Akopọ kukuru ti Awọn ẹya ninu Iṣeṣe

Ṣafikun awọn ohun-ini pupọ gẹgẹbi ogun ati iṣe (soapAction). A fipamọ ati ṣayẹwo. O le wo awọn alaye diẹ sii lori bi o ṣe le fi awọn ibeere ỌṢẸ ranṣẹ nibi

A wo awọn aṣayan pupọ fun lilo awọn ilana NIFI. Bawo ni wọn ṣe nlo ati kini anfani gidi wọn? Awọn apẹẹrẹ ti a gbero jẹ awọn idanwo ati pe o yatọ diẹ si ohun ti o ṣẹlẹ nitootọ ni ija. Mo nireti pe nkan yii yoo wulo diẹ fun awọn olupilẹṣẹ. Mo dupe fun ifetisile re. Ti o ba ni ibeere eyikeyi, kọ. Emi yoo gbiyanju lati dahun.

orisun: www.habr.com

Fi ọrọìwòye kun