{"id":37567,"date":"2019-10-31T22:18:22","date_gmt":"2019-10-31T19:18:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\/"},"modified":"2019-10-31T22:18:22","modified_gmt":"2019-10-31T19:18:22","slug":"apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introduktion<\/h3>\n<p><\/p>\n<p>Det visade sig att jag p\u00e5 min nuvarande arbetsplats beh\u00f6vde bekanta mig med denna teknologi. Jag b\u00f6rjar med en liten bakgrund. Vid v\u00e5rt senaste m\u00f6te meddelade v\u00e5rt team att vi beh\u00f6vde skapa en integration med <em>ett v\u00e4lk\u00e4nt system<\/em>. Integrationen innebar att detta v\u00e4lk\u00e4nda system skulle skicka f\u00f6rfr\u00e5gningar till oss via HTTP till en viss slutpunkt, och vi, som m\u00e4rkligt nog, skulle skicka tillbaka svar i form av ett SOAP-meddelande. Det verkar ganska enkelt och trivialiskt. D\u00e4rav f\u00f6ljer att vi beh\u00f6ver\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>Uppgift<\/h3>\n<p><\/p>\n<p>Skapa 3 tj\u00e4nster. Den f\u00f6rsta \u00e4r en databasuppdateringstj\u00e4nst. Denna tj\u00e4nst, vid mottagande av nya data fr\u00e5n det externa systemet, uppdaterar informationen i databasen och genererar en fil i CSV-format f\u00f6r att \u00f6verf\u00f6ra den till n\u00e4sta system. Endpointen f\u00f6r den andra tj\u00e4nsten - Transporttj\u00e4nsten via FTP - anropas, som tar emot den \u00f6verf\u00f6rda filen, validerar den och l\u00e4gger den i filarkivet via FTP. Den tredje tj\u00e4nsten - Tj\u00e4nsten f\u00f6r dataleverans till konsumenten - arbetar asynkront med de tv\u00e5 f\u00f6rsta. Den tar emot en f\u00f6rfr\u00e5gan fr\u00e5n det externa systemet om att f\u00e5 den fil som n\u00e4mndes ovan, tar den f\u00e4rdiga svarfilen, modifierar den (uppdaterar f\u00e4lten id, description, linkToFile) och skickar svaret som ett SOAP-meddelande. S\u00e5, i stort sett ser situationen ut s\u00e5 h\u00e4r: De tv\u00e5 f\u00f6rsta tj\u00e4nsterna b\u00f6rjar arbeta endast n\u00e4r data f\u00f6r uppdatering har kommit. Den tredje tj\u00e4nsten arbetar kontinuerligt eftersom det finns m\u00e5nga informationskonsumenter, omkring 1000 f\u00f6rfr\u00e5gningar om data per minut. Tj\u00e4nsterna \u00e4r tillg\u00e4ngliga hela tiden och deras instanser finns i olika milj\u00f6er, s\u00e5som test, demo, preprod och prod. Nedan presenteras en \u00f6versikt \u00f6ver hur dessa tj\u00e4nster fungerar. Jag b\u00f6r omedelbart p\u00e5peka att vissa detaljer har f\u00f6renklats f\u00f6r att undvika on\u00f6dig komplexitet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">Teknisk f\u00f6rdjupning<\/h3>\n<p><\/p>\n<p>N\u00e4r vi planerade l\u00f6sningen p\u00e5 uppgiften best\u00e4mde vi oss f\u00f6rst f\u00f6r att utveckla applikationer i Java med hj\u00e4lp av Spring-ramverket, en Nginx-lastbalanserare, en Postgres-databas och andra tekniska och mindre tekniska komponenter. Eftersom tiden f\u00f6r att utveckla den tekniska l\u00f6sningen till\u00e4t oss att \u00f6verv\u00e4ga andra angreppss\u00e4tt, f\u00f6ll blicken p\u00e5 den trendiga teknologin Apache NIFI, som \u00e4r popul\u00e4r inom vissa kretsar. Jag vill genast n\u00e4mna att denna teknologi gjorde att vi uppt\u00e4ckte dessa tre tj\u00e4nster. I den h\u00e4r artikeln kommer jag att beskriva utvecklingen av en filtransporttj\u00e4nst och en dataleveranstj\u00e4nst till konsumenten; om artikeln uppskattas kommer jag \u00e4ven att skriva om tj\u00e4nsten f\u00f6r att uppdatera data i databasen.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">Vad \u00e4r det?<\/h3>\n<p><\/p>\n<p>NIFI \u00e4r en distribuerad arkitektur f\u00f6r snabb parallel loading och bearbetning av data, med ett stort antal plugins f\u00f6r k\u00e4llor och transformationer, versionhantering av konfigurationer och mycket mer. En trevlig bonus \u00e4r att den \u00e4r mycket enkel att anv\u00e4nda. Triviala processer som getFile, sendHttpRequest och andra kan visualiseras som rutor. Varje ruta representerar en viss process, vars interaktion kan ses i bilden nedan. Mer detaljerad dokumentation om hur man konfigurerar processerna \u00e4r skriven <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">h\u00e4r<\/a><\/noindex> , f\u00f6r dem som talar ryska \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">h\u00e4r<\/a><\/noindex>. I dokumentationen beskrivs det utm\u00e4rkt hur man packar upp och startar NIFI, samt hur man skapar processer, som ocks\u00e5 \u00e4r rutorna.<br \/>\nId\u00e9n att skriva artikeln f\u00f6ddes efter l\u00e5ngvariga s\u00f6kningar och strukturerande av den erh\u00e5llna informationen till n\u00e5got begripligt, samt en \u00f6nskan att underl\u00e4tta livet f\u00f6r framtida utvecklare.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Exempel<\/h3>\n<p><\/p>\n<p>Ett exempel p\u00e5 hur kvadrater interagerar med varandra har granskats. Den \u00f6vergripande schemat \u00e4r ganska enkelt: Vi f\u00e5r en HTTP-f\u00f6rfr\u00e5gan (teoretiskt med en fil i f\u00f6rfr\u00e5gan. F\u00f6r att demonstrera NIFIs m\u00f6jligheter startar f\u00f6rfr\u00e5gan i detta exempel en process f\u00f6r att h\u00e4mta en fil fr\u00e5n den lokala filhanteraren), d\u00e4refter skickar vi tillbaka ett svar om att f\u00f6rfr\u00e5gan har mottagits, samtidigt som processen f\u00f6r att h\u00e4mta filen fr\u00e5n filhanteraren startar och d\u00e4refter flyttas den via FTP. Det \u00e4r v\u00e4rt att p\u00e5peka att processerna interagerar med varandra genom s\u00e5 kallade flowFiles. Detta \u00e4r en grundl\u00e4ggande enhet i NIFI, som lagrar attribut och inneh\u00e5ll. Inneh\u00e5llet \u00e4r de data som representeras av fl\u00f6desfilen. Med andra ord, om du har f\u00e5tt en fil fr\u00e5n en kvadrat och \u00f6verf\u00f6r den till en annan, kommer inneh\u00e5llet att vara din fil.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Som ni kan se av denna bild illustreras den allm\u00e4nna processen. HandleHttpRequest tar emot f\u00f6rfr\u00e5gningar, ReplaceText genererar svarets kropp, HandleHttpResponse returnerar svaret. FetchFile h\u00e4mtar en fil fr\u00e5n filsystemet och \u00f6verf\u00f6r den till kvadraten PutSftp, som placerar filen p\u00e5 FTP, p\u00e5 den angivna adressen. L\u00e5t oss nu titta n\u00e4rmare p\u00e5 denna process. <\/p>\n<p><\/p>\n<p>I detta fall \u00e4r request b\u00f6rjan p\u00e5 allt. L\u00e5t oss se p\u00e5 dess konfigurationsparametrar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nH\u00e4r \u00e4r allt ganska trivialt, f\u00f6rutom StandartHttpContextMap - detta \u00e4r en typ av tj\u00e4nst som m\u00f6jligg\u00f6r att skicka och ta emot f\u00f6rfr\u00e5gningar. Mer detaljerat och till och med med exempel kan man se - <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">h\u00e4r<\/a><\/noindex><\/p>\n<p>D\u00e4refter kommer vi att titta p\u00e5 konfigurationsparametrarna f\u00f6r ReplaceText-kvadraten. H\u00e4r \u00e4r det viktigt att notera ReplacementValue - det som kommer att \u00e5terv\u00e4nda till anv\u00e4ndaren som ett svar. I inst\u00e4llningarna kan vi justera loggniv\u00e5n, loggar kan ses {vart vi packade upp nifi}\/nifi-1.9.2\/logs, d\u00e4r finns ocks\u00e5 parametrarna failure\/success - baserat p\u00e5 dessa parametrar kan vi justera processen som helhet. Det vill s\u00e4ga, vid framg\u00e5ngsrik behandling av texten - kommer processen f\u00f6r att skicka svar till anv\u00e4ndaren att kallas, annars loggar vi helt enkelt den misslyckade processen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I egenskaperna f\u00f6r HandleHttpResponse finns det inte mycket intressant f\u00f6rutom statusen vid framg\u00e5ngsrik skapande av ett svar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har diskuterat f\u00f6rfr\u00e5gan och svaret - l\u00e5t oss g\u00e5 vidare till att h\u00e4mta filen och placera den p\u00e5 FTP-servern. FetchFile h\u00e4mtar filen enligt den angivna s\u00f6kv\u00e4gen i inst\u00e4llningarna och \u00f6verf\u00f6r den till n\u00e4sta process. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och sedan placeras filen i fillagret av rutan PutSftp. Konfigurationsparametrarna kan vi se nedan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det \u00e4r v\u00e4rt att notera att varje ruta \u00e4r en separat process som m\u00e5ste startas. Vi har tittat p\u00e5 det enklaste exemplet som inte kr\u00e4ver n\u00e5gon avancerad anpassning. L\u00e5t oss nu se en n\u00e5got mer komplex process d\u00e4r vi skriver lite p\u00e5 Groovy. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Ett mer komplext exempel<\/h3>\n<p><\/p>\n<p>Tj\u00e4nsten f\u00f6r att \u00f6verf\u00f6ra data till konsumenten blev n\u00e5got mer komplicerad tack vare processen att modifera SOAP-meddelandet. Den \u00f6vergripande processen visas i bilden nedan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r \u00e4r id\u00e9n inte s\u00e4rskilt komplicerad heller: vi fick en f\u00f6rfr\u00e5gan fr\u00e5n konsumenten om att de beh\u00f6vde data, vi skickade tillbaka ett svar om att vi mottagit meddelandet, startade processen f\u00f6r att h\u00e4mta svaret, redigerade det med viss logik och skickade sedan filen till konsumenten i form av ett SOAP-meddelande p\u00e5 servern. <\/p>\n<p><\/p>\n<p>Jag tycker inte att vi beh\u00f6ver beskriva de rutor vi sett ovan igen \u2013 vi g\u00e5r direkt till de nya. Om du beh\u00f6ver redigera en fil och vanliga rutor som ReplaceText inte passar, m\u00e5ste du skriva ditt eget skript. Detta kan g\u00f6ras med rutan ExecuteGroovyScript. Inst\u00e4llningarna f\u00f6r den presenteras nedan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det finns tv\u00e5 alternativ f\u00f6r att ladda upp skriptet i denna ruta. Det f\u00f6rsta \u00e4r att ladda upp en fil med skriptet. Det andra \u00e4r att infoga skriptet i scriptBody. S\u00e5vitt jag vet st\u00f6der rutan executeScript flera programmeringsspr\u00e5k \u2014 ett av dem \u00e4r groovy. Jag m\u00e5ste tyv\u00e4rr g\u00f6ra java-utvecklare besvikna \u2014 man kan inte skriva skript i s\u00e5dana rutor med java. F\u00f6r den som verkligen vill \u2014 beh\u00f6ver man skapa sin egen anpassade ruta och l\u00e4gga till den i NIFI-systemet. Hela denna operation \u00e5tf\u00f6ljs av ganska l\u00e5ngvariga besv\u00e4r, vilket vi inte kommer att ta upp i den h\u00e4r artikeln. Jag valde spr\u00e5ket groovy. Nedan finns en testskript som helt enkelt uppdaterar id:t i SOAP-meddelandet inkrementellt. Det \u00e4r viktigt att notera. Du tar filen fr\u00e5n flowFile och uppdaterar den, gl\u00f6m inte att l\u00e4gga tillbaka den uppdaterade filen. Det \u00e4r ocks\u00e5 v\u00e4rt att notera att inte alla bibliotek \u00e4r anslutna. Det kan h\u00e4nda att du \u00e4nd\u00e5 m\u00e5ste importera ett av biblioteken. En nackdel \u00e4r ocks\u00e5 att det \u00e4r ganska sv\u00e5rt att fels\u00f6ka skriptet i denna ruta. Det finns ett s\u00e4tt att ansluta till JVM NIFI och b\u00f6rja fels\u00f6kningsprocessen. Personligen har jag k\u00f6rt en lokal applikation och imiterat att jag f\u00e5r filen fr\u00e5n sessionen. Jag har ocks\u00e5 gjort fels\u00f6kning lokalt. Fel som dyker upp vid laddning av skriptet \u00e4r ganska l\u00e4tta att googla och skrivs av NIFI i loggen.<\/p>\n<p><\/p>\n<pre><code class=\"java\">import org.apache.commons.io.IOUtils\nimport groovy.xml.XmlUtil\nimport java.nio.charset.*\nimport groovy.xml.StreamingMarkupBuilder\n\ndef flowFile = session.get()\nif (!flowFile) return\ntry {\n    flowFile = session.write(flowFile, { inputStream, outputStream -&gt;\n        String result = IOUtils.toString(inputStream, \"UTF-8\");\n        def recordIn = new XmlSlurper().parseText(result)\n        def element = recordIn.depthFirst().find {\n            it.name() == 'id'\n        }\n\n        def newId = Integer.parseInt(element.toString()) + 1\n        def recordOut = new XmlSlurper().parseText(result)\n        recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId\n\n        def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()\n        outputStream.write(res.getBytes(StandardCharsets.UTF_8))\n} as StreamCallback)\n     session.transfer(flowFile, REL_SUCCESS)\n}\ncatch(Exception e) {\n    log.error(\"Error during processing of validate.groovy\", e)\n    session.transfer(flowFile, REL_FAILURE)\n}<\/code><\/pre>\n<p><\/p>\n<p>Egentligen slutar anpassningen av rutan h\u00e4r. Den uppdaterade filen \u00f6verf\u00f6rs till en ruta som ansvarar f\u00f6r att skicka filen till servern. Nedan finns inst\u00e4llningarna f\u00f6r denna ruta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi beskriver metoden genom vilken SOAP-meddelandet kommer att skickas. Vi anger vart det ska skickas. D\u00e4refter beh\u00f6ver vi ange att det verkligen \u00e4r SOAP.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi l\u00e4gger till flera egenskaper s\u00e5som v\u00e4rd och \u00e5tg\u00e4rd (soapAction). Vi sparar och kontrollerar. Mer detaljerat om hur man skickar SOAP-f\u00f6rfr\u00e5gningar kan man se <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Vi har unders\u00f6kt flera anv\u00e4ndningsalternativ f\u00f6r NIFI-processer. Hur de interagerar och vilken verklig nytta de ger. De exempel som diskuterats \u00e4r testexempel och skiljer sig n\u00e5got fr\u00e5n det som faktiskt finns i produktion. Jag hoppas att denna artikel kommer vara lite anv\u00e4ndbar f\u00f6r utvecklare. Tack f\u00f6r uppm\u00e4rksamheten. Om det finns n\u00e5gra fr\u00e5gor \u2013 skriv. Jag ska f\u00f6rs\u00f6ka svara.<\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465299\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043c\u0438\u0442\u0438\u043d\u0433\u0435, \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041f\u043e\u0434 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c \u0441\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 HTTP \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0435\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0430 \u043c\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0441\u043b\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28196,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-37567","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Apache NIFI \u2014 \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:18:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Apache NIFI \u2013 En kort \u00f6versikt \u00f6ver m\u00f6jligheterna i praktiken | ProHoster","description":"Inledning Det har blivit s\u00e5 att jag p\u00e5 min nuvarande arbetsplats har beh\u00f6vt bekanta mig med denna teknologi. Jag b\u00f6rjar med en kort bakgrund.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Apache NIFI \u2014 \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439. \u041d\u0430\u0447\u043d\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438.","og:url":"https:\/\/prohoster.info\/sv\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:18:22+00:00","article:modified_time":"2019-10-31T19:18:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37567","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:24:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:24:24","updated":"2026-01-23 18:24:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}