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}/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 системд нэмэх хэрэгтэй. Энэ бүх үйл ажиллагаа нь хэнгэрэгтэй нэлээд урт бүжиг дагалддаг бөгөөд энэ нийтлэлд бид үүнийг авч үзэхгүй. Би гайхалтай хэлийг сонгосон. Доорх нь SOAP мессеж дэх id-г аажмаар шинэчлэх туршилтын скрипт юм. Үүнийг анхаарах нь чухал юм. Та 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 процессуудыг ашиглах хэд хэдэн сонголтыг авч үзсэн. Тэд хэрхэн харилцаж, тэдний жинхэнэ ашиг тус юу вэ? Харгалзан үзсэн жишээнүүд нь туршилтынх бөгөөд тулааны үед тохиолддог зүйлээс арай өөр юм. Энэ нийтлэл нь хөгжүүлэгчдэд бага зэрэг хэрэг болно гэж найдаж байна. Анхаарал тавьсанд баярлалаа. Асуух зүйл байвал бичээрэй. Би хариулахыг хичээх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх