Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

perkenalan

Kajadian éta di tempat kerja kuring ayeuna kuring kedah kenal sareng téknologi ieu. Kuring gé mimitian ku latar saeutik. Dina rapat salajengna, tim kami ngawartoskeun yen urang kudu nyieun integrasi jeung sistem dipikawanoh. Ku integrasi ieu dimaksudkan yén sistem well-dipikawanoh ieu bakal ngirim kami requests via HTTP ka titik tungtung husus, sarta kami, cukup Oddly, bakal ngirim deui réspon dina bentuk pesen SOAP. Sagalana sigana basajan tur trivial. Ti ieu kieu nu peryogi ...

tugas

Jieun 3 jasa. Anu kahiji nyaéta Layanan Update Database. Ladenan ieu, nalika data anyar sumping ti sistem pihak katilu, ngamutahirkeun data dina pangkalan data sareng ngahasilkeun file dina format CSV pikeun mindahkeun ka sistem salajengna. Titik ahir jasa kadua disebut - FTP Transport Service, anu nampi file anu ditransfer, ngesahkeunana, sareng nempatkeun kana panyimpenan file via FTP. Ladenan katilu, ladenan transfer data konsumen, dianggo asynchronously sareng dua anu munggaran. Éta nampi pamundut ti sistem éksternal pihak katilu pikeun nampi file anu dibahas di luhur, nyandak file réspon anu siap, ngarobihna (ngamutahirkeun id, pedaran, widang linkToFile) sareng ngirim réspon dina bentuk pesen SOAP. Hartina, gambar sakabéh nyaéta kieu: dua layanan munggaran dimimitian karya maranéhanana ngan lamun data pikeun ngamutahirkeun geus anjog. Ladenan katilu jalan terus sabab aya loba pamakéna informasi, ngeunaan 1000 requests pikeun data per menit. Ladenan sayogi terus-terusan sareng instansina aya di lingkungan anu béda, sapertos uji, demo, pra-produksi sareng prod. Di handap ieu diagram kumaha jasa ieu jalan. Hayu atuh netelakeun langsung yén sababaraha rinci geus disederhanakeun pikeun nyegah pajeulitna perlu.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Téknis Deepening

Nalika ngarencanakeun solusi pikeun masalah éta, urang mimiti mutuskeun pikeun ngadamel aplikasi dina Java nganggo kerangka Spring, Nginx balancer, database Postgres sareng hal-hal téknis sanés sanés téknis. Kusabab waktos ngembangkeun solusi téknis ngamungkinkeun urang mertimbangkeun pendekatan anu sanés pikeun ngarengsekeun masalah ieu, pandangan urang murag kana téknologi Apache NIFI, anu modis di kalangan anu tangtu. Kuring bakal langsung nyarios yén téknologi ieu ngamungkinkeun urang perhatikeun 3 jasa ieu. Tulisan ieu bakal ngajelaskeun pamekaran jasa transportasi file sareng jasa transfer data ka konsumen, tapi upami tulisan éta mangpaat, kuring bakal nyerat ngeunaan jasa pikeun ngapdet data dina pangkalan data.

Naon ieu

NIFI mangrupikeun arsitéktur anu disebarkeun pikeun ngamuat paralel gancang sareng ngolah data, sajumlah ageung plugins pikeun sumber sareng transformasi, versi konfigurasi sareng seueur deui. A bonus nice éta pisan gampang ngagunakeun. Prosés trivial sapertos getFile, sendHttpRequest sareng anu sanésna tiasa diwakilan salaku kuadrat. Unggal kuadrat ngagambarkeun hiji prosés, interaksi nu bisa ditempo dina gambar di handap ieu. Dokuméntasi anu langkung rinci ngeunaan interaksi pangaturan prosés parantos ditulis di dieu , pikeun anu nyarios basa Rusia - di dieu. Dokuméntasi sampurna ngajelaskeun kumaha carana ngabongkar sareng ngajalankeun NIFI, ogé kumaha cara nyiptakeun prosés, ogé katelah kotak.
Gagasan pikeun nyerat tulisan dilahirkeun saatos milarian panjang sareng nyusun inpormasi anu ditampi kana hal anu sadar, ogé kahayang pikeun ngajantenkeun hirup langkung gampang pikeun pamekar anu bakal datang.

conto

Hiji conto kumaha kuadrat berinteraksi saling dianggap. Skéma umumna cukup basajan: Kami nampi pamundut HTTP (Dina téori, kalayan file dina awak pamundut. Pikeun nunjukkeun kamampuan NIFI, dina conto ieu pamundut ngamimitian prosés nampi file tina panyimpenan file lokal. ), teras kami ngirimkeun deui réspon yén pamundut parantos ditampi, paralel prosés nampi file ti FH teras prosés mindahkeun éta via FTP ka FH. Perlu dijelaskeun yén prosés saling berinteraksi ngaliwatan anu disebut flowFile. Ieu mangrupikeun éntitas dasar dina NIFI anu nyimpen atribut sareng kontén. Eusi nyaéta data anu diwakilan ku file stream. Nyaéta, kasarna nyarios, upami anjeun nampi file tina hiji alun-alun sareng mindahkeun ka anu sanés, eusina bakal janten file anjeun.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Sakumaha anjeun tiasa tingali, gambar ieu nunjukkeun prosés umum. HandleHttpRequest - narima requests, ReplaceText - ngahasilkeun awak respon, HandleHttpResponse - ngirimkeun respon. FetchFile - nampi file tina panyimpen file, mindahkeun ka alun-alun PutSftp - nempatkeun file ieu dina FTP, dina alamat anu ditangtukeun. Ayeuna langkung seueur ngeunaan prosés ieu.

Dina hal ieu, pamundut teh awal sagalana. Hayu urang nempo parameter konfigurasi na.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Sagalana di dieu téh rada trivial iwal StandardHttpContextMap - ieu téh jenis layanan nu ngidinan Anjeun pikeun ngirim jeung nampa requests. Dina leuwih jéntré komo jeung conto, Anjeun bisa nempo - di dieu

Salajengna, hayu urang tingali dina parameter konfigurasi ReplaceText alun-alun. Perlu nengetan ReplacementValue - ieu anu bakal dipulangkeun ka pangguna dina bentuk réspon. Dina setélan anjeun tiasa nyaluyukeun tingkat logging, anjeun tiasa ningali log {dimana anjeun ngabongkar nifi}/nifi-1.9.2/logs, aya ogé gagalna / parameter kasuksésan - dumasar kana parameter ieu anjeun tiasa ngatur prosés sacara gembleng. . Nyaéta, dina kasus ngolah téks anu suksés, prosés ngirim réspon ka pangguna bakal disebat, sareng dina kasus anu sanés urang ngan saukur bakal asup kana prosés anu henteu suksés.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Aya nanaon utamana metot dina sipat HandleHttpResponse iwal status nalika respon geus hasil dijieun.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Kami parantos nyortir pamundut sareng réspon - hayu urang teraskeun nampi file sareng nempatkeun éta dina server FTP. FetchFile - nampi file dina jalur anu ditetepkeun dina setélan sareng ngalirkeun kana prosés salajengna.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Teras alun-alun PutSftp - nempatkeun file dina panyimpenan file. Urang tiasa ningali parameter konfigurasi di handap.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Perlu nengetan kanyataan yén unggal kuadrat mangrupikeun prosés anu misah anu kedah diluncurkeun. Kami ningali conto pangbasajanna anu henteu meryogikeun kustomisasi anu rumit. Salajengna, urang bakal nempo prosés nu saeutik leuwih pajeulit, dimana urang bakal nulis saeutik dina alur.

Conto leuwih kompleks

Ladenan mindahkeun data ka konsumén tétéla rada leuwih pajeulit alatan prosés ngaropéa pesen SOAP. Prosés umum dipidangkeun dina gambar di handap ieu.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Di dieu idena ogé henteu pajeulit: kami nampi pamundut ti konsumen yén anjeunna peryogi data, ngirim réspon yén anjeunna nampi pesen, ngamimitian prosés nampi file réspon, teras diédit ku logika anu tangtu, teras teraskeun. ditransfer file ka konsumen dina bentuk pesen SOAP ka server.

Jigana teu kedah ngajelaskeun deui kuadrat anu urang tingali di luhur - hayu urang langsung ka anu énggal. Upami anjeun kedah ngédit file naon waé sareng kotak-kotak jinis ReplaceText biasa henteu cocog, anjeun kedah nyerat naskah anjeun nyalira. Ieu tiasa dilakukeun nganggo kotak ExecuteGroogyScript. Setelan na dibere handap.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Aya dua pilihan pikeun ngamuat naskah kana alun-alun ieu. Anu kahiji nyaéta ku ngaunduh file nganggo naskah. Anu kadua nyaéta ku ngalebetkeun skrip kana scriptBody. Sajauh anu kuring terang, kuadrat executeScript ngadukung sababaraha basa - salah sahijina nyaéta groovy. Kuring bakal nguciwakeun pamekar java - anjeun teu bisa nulis Aksara dina java dina kuadrat misalna. Pikeun anu hoyong pisan, anjeun kedah nyiptakeun alun-alun khusus anjeun sareng tambahkeun kana sistem NIFI. Sakabeh operasi ieu dipirig ku tarian rada lila jeung rebana, nu urang moal nungkulan dina artikel ieu. Kuring milih basa groovy. Di handap ieu mangrupa skrip test nu saukur incrementally ngamutahirkeun id dina pesen SOAP. Kadé dicatet. Anjeun nyandak file tina flowFile sareng ngapdet éta, ulah hilap yén anjeun kedah nempatkeun éta deui, diropéa. Ogé kudu dicatet yén teu sakabéh perpustakaan kaasup. Bisa jadi Anjeun masih kudu ngimpor salah sahiji libs. Kakurangan sanésna nyaéta yén naskah dina alun-alun ieu rada sesah di-debug. Aya cara pikeun nyambung ka NIFI JVM tur mimitian prosés debugging. Pribadi, kuring ngaluncurkeun aplikasi lokal sareng simulasi nampi file tina sési éta. Kuring ogé ngalakukeun debugging sacara lokal. Kasalahan anu muncul nalika ngamuat naskah cukup gampang pikeun Google sareng ditulis ku NIFI sorangan kana 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)
}

Sabenerna, ieu dimana kustomisasi alun-alun ditungtungan. Salajengna, file anu diropéa ditransferkeun ka alun-alun, anu tanggung jawab pikeun ngirim file ka server. Di handap ieu setelan pikeun kuadrat ieu.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Kami ngajelaskeun metode dimana pesen SOAP bakal dikirimkeun. Urang nulis dimana. Salajengna anjeun kedah nunjukkeun yén ieu SOAP.

Apache NIFI - Tinjauan Singkat ngeunaan Kasempetan dina Praktek

Tambahkeun sababaraha sipat sapertos host sareng aksi (soapAction). Urang nyimpen jeung pariksa. Anjeun tiasa ningali langkung rinci ngeunaan cara ngirim pamundut SOAP di dieu

Kami ningali sababaraha pilihan pikeun ngagunakeun prosés NIFI. Kumaha aranjeunna berinteraksi sareng naon kauntungan nyatana? Conto anu dipertimbangkeun nyaéta tés sareng rada béda ti anu sabenerna kajadian dina tempur. Kuring miharep artikel ieu bakal saeutik mangpaat pikeun pamekar. Nuhun kana perhatosanana. Upami anjeun gaduh patarosan, nyerat. Kuring bakal nyoba ngajawab.

sumber: www.habr.com

Tambahkeun komentar