{"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\/da\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI \u2013 Kort oversigt over praktiske muligheder","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introduktion<\/h3>\n<p><\/p>\n<p>Det kom til at ske, at jeg p\u00e5 mit nuv\u00e6rende arbejdssted m\u00e5tte blive bekendt med denne teknologi. Jeg vil starte med en lille baggrundshistorie. Ved et m\u00f8de fik vores team at vide, at vi skulle skabe en integration med <em>et kendt system<\/em>. Integration meant that this well-known system would send us requests via HTTP to a specific endpoint, and we, oddly enough, would send back responses in the form of a SOAP message. It all seems simple and trivial. Therefore, it follows that we need...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>Regler for godkendelse af merge-requests<\/h3>\n<p><\/p>\n<p>Oprette 3 tjenester. Den f\u00f8rste af dem er Databaseopdateringstjenesten. Denne tjeneste opdaterer data i databasen ved modtagelse af nye data fra det eksterne system og genererer en fil i CSV-format til overf\u00f8rsel til det n\u00e6ste system. Endpointet for den anden tjeneste \u2014 Transporttjeneste via FTP, aktiveres, som modtager den overf\u00f8rte fil, validerer den, og placerer den i filopbevaringen via FTP. Den tredje tjeneste \u2014 Dataoverf\u00f8rselstjenesten til forbrugeren, arbejder asynkront med de to f\u00f8rste. Den modtager en anmodning fra et eksternt system om at f\u00e5 den fil, vi tidligere har n\u00e6vnt, tager den f\u00e6rdige svarfil, modificerer den (opdaterer felterne id, description, linkToFile) og sender svaret i form af en SOAP-besked. S\u00e5 den samlede situation er som f\u00f8lger: de f\u00f8rste to tjenester begynder deres arbejde, n\u00e5r der kommer data til opdatering. Den tredje tjeneste arbejder konstant, da der er mange informationsforbrugere, omkring 1000 anmodninger om data pr. minut. Tjenesterne er tilg\u00e6ngelige konstant, og deres instanser er placeret i forskellige milj\u00f8er, s\u00e5som test, demo, preprod og prod. Nedenfor er der pr\u00e6senteret et diagram over arbejdet for disse tjenester. Jeg vil straks forklare, at nogle detaljer er forenklet for at undg\u00e5 un\u00f8dig kompleksitet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">Teknisk forklaring<\/h3>\n<p><\/p>\n<p>N\u00e5r man planl\u00e6gger at l\u00f8se en opgave, besluttede man f\u00f8rst at lave applikationer i Java med brug af Spring framework, en balanceringsl\u00f8sning Nginx, en database Postgres og diverse tekniske og mindre tekniske ting. Da tiden til at arbejde p\u00e5 den tekniske l\u00f8sning tillod at overveje andre tilgange til at l\u00f8se denne opgave, faldt blikket p\u00e5 den popul\u00e6re teknologi Apache NIFI, som er kendt i bestemte kredse. Jeg vil straks sige, at denne teknologi gjorde det muligt for os at identificere disse 3 tjenester. Denne artikel vil beskrive udviklingen af en filtransporttjeneste og en dataoverf\u00f8rselstjeneste til modtageren. Men hvis artiklen v\u00e6kker interesse, vil jeg skrive om tjenesten til opdatering af data i databasen.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">Hvad er det?<\/h3>\n<p><\/p>\n<p>NIFI repr\u00e6senterer en distribueret arkitektur til hurtig parallel loading og behandling af data, med et stort antal plugins til kilder og transformationer, versionskontrol for konfigurationer og meget mere. En behagelig bonus er, at det er meget nemt at bruge. Trivielle processer som getFile, sendHttpRequest og andre kan pr\u00e6senteres som firkanter. Hver firkant repr\u00e6senterer en proces, hvis interaktion kan ses p\u00e5 billedet nedenfor. Mere detaljeret dokumentation om interaktioner og ops\u00e6tning af processerne er skrevet <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">her<\/a><\/noindex> , for dem der taler russisk \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">her<\/a><\/noindex>. I dokumentationen er det fremragende beskrevet, hvordan man pakker ud og k\u00f8rer NIFI samt hvordan man opretter processer, som ogs\u00e5 er firkanter.<br \/>\nId\u00e9en om at skrive en artikel opstod efter langvarige s\u00f8gninger og strukturering af den indsamlede information i noget meningsfuldt, samt \u00f8nsket om at lette livet for fremtidige udviklere.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Eksempel<\/h3>\n<p><\/p>\n<p>Et eksempel p\u00e5, hvordan kvadrater interagerer med hinanden er blevet gennemg\u00e5et. Den overordnede skema er ganske enkelt: Vi modtager en HTTP-anmodning (teoretisk set med en fil i anmodningens krop. For at demonstrere NIFIs muligheder starter anmodningen i dette eksempel processen med at hente en fil fra det lokale filsystem), hvorefter vi sender et svar tilbage om, at anmodningen er modtaget; samtidig startes processen med at hente filen fra filsystemet og derefter flytning af den via FTP til filsystemet. Det skal bem\u00e6rkes, at processerne interagerer med hinanden via s\u00e5kaldte flowFiles. Dette er en grundl\u00e6ggende enhed i NIFI, der gemmer attributterne og indholdet. Indholdet er de data, der pr\u00e6senteres som en streamfil. Med andre ord, hvis du har f\u00e5et en fil fra et kvadrat og overf\u00f8rer den til et andet, vil indholdet v\u00e6re din fil.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Som du kan se, viser dette billede den generelle proces. HandleHttpRequest modtager anmodninger, ReplaceText genererer indholdet af svaret, HandleHttpResponse giver svaret videre. FetchFile henter en fil fra filopbevaringen og sender den til kvadratet PutSftp, som l\u00e6gger denne fil p\u00e5 FTP til den angivne adresse. Lad os besigtige denne proces n\u00e6rmere. <\/p>\n<p><\/p>\n<p>I dette tilf\u00e6lde er anmodningen alt. Lad os se p\u00e5 dens konfigurationsparametre. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nHer er alt ret trivielt, bortset fra StandartHttpContextMap - dette er en slags service, der g\u00f8r det muligt at sende og modtage anmodninger. Du kan se mere detaljeret og endda med eksempler - <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">her<\/a><\/noindex><\/p>\n<p>Vi ser nu p\u00e5 konfigurationsparametrene for ReplaceText-kvadratet. Her skal vi v\u00e6re opm\u00e6rksomme p\u00e5 ReplacementValue - det er det, der vil blive returneret til brugeren som svar. I indstillingerne kan niveauet for logf\u00f8ring reguleres, og logfiler kan ses {hvor vi har pakket nifi}\/nifi-1.9.2\/logs; her er der ogs\u00e5 parametre for failure\/success - baseret p\u00e5 disse parametre kan vi regulere processen som helhed. Det vil sige, i tilf\u00e6lde af vellykket behandling af teksten, vil processen til at sende et svar til brugeren blive kaldt, mens i et andet tilf\u00e6lde vil vi blot logge den mislykkede proces. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der er ikke rigtig noget interessant i egenskaberne for HandleHttpResponse undtagen status ved vellykket oprettelse af svaret. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har nu set p\u00e5 anmodningen og svaret - lad os g\u00e5 videre til at hente filen og placere den p\u00e5 FTP-serveren. FetchFile henter filen fra den angivne sti i indstillingerne og sender den videre til den n\u00e6ste proces. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Og derefter placerer kvadratet PutSftp filen i filopbevaringen. Konfigurationsparametrene kan ses nedenfor.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det er v\u00e6rd at bem\u00e6rke, at hver kvadrat er en separat proces, der skal startes. Vi har gennemg\u00e5et det simpleste eksempel, som ikke kr\u00e6ver nogen kompleks tilpasning. Lad os nu se p\u00e5 en lidt mere kompleks proces, hvor vi skriver lidt i groovy. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Et mere komplekst eksempel<\/h3>\n<p><\/p>\n<p>Dataoverf\u00f8rselstjenesten til forbrugeren blev lidt mere kompleks p\u00e5 grund af SOAP-beskedmodifikationsprocessen. Den overordnede proces er pr\u00e6senteret p\u00e5 tegningen nedenfor.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her er ideen heller ikke s\u00e6rlig kompleks: vi modtog en anmodning fra forbrugeren om, at han har brug for data, sendte et svar om, at vi har modtaget beskeden, startede processen med at hente svarfilen, redigerede den derefter med en bestemt logik, og til sidst sendte vi filen til forbrugeren som en SOAP-besked til serveren. <\/p>\n<p><\/p>\n<p>Jeg mener, at det ikke er n\u00f8dvendigt at beskrive de kvadrater, vi har set ovenfor igen - lad os straks g\u00e5 videre til nye. Hvis du skal redigere en fil, og de almindelige kvadrater som ReplaceText ikke er egnede, skal du skrive dit eget script. Dette kan g\u00f8res ved hj\u00e6lp af kvadratet ExecuteGroogyScript. Dens indstillinger pr\u00e6senteres nedenfor.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Der er to m\u00e5der at indl\u00e6se scriptet i denne firkant p\u00e5. Den f\u00f8rste er ved at uploade en fil med scriptet. Den anden er ved at inds\u00e6tte scriptet i scriptBody. S\u00e5 vidt jeg ved underst\u00f8tter firkanten executeScript flere programmeringssprog \u2014 et af dem er groovy. Jeg m\u00e5 skuffe Java-udviklere \u2014 det er ikke muligt at skrive scripts i s\u00e5danne firkanter med Java. For dem, der virkelig \u00f8nsker det \u2014 skal man oprette sin egen brugerdefinerede firkant og tilf\u00f8je den til NIFI-systemet. Hele denne proces involverer ret langvarige forberedelser, som vi ikke vil besk\u00e6ftige os med i denne artikel. Jeg har valgt sproget groovy. Nedenfor pr\u00e6senteres et testscript, der blot opdaterer id'et inkrementelt i SOAP-beskeden. Det er vigtigt at bem\u00e6rke, at man tager filen fra flowFile, opdaterer den, og husker at l\u00e6gge den tilbage, n\u00e5r den er opdateret. Det skal ogs\u00e5 bem\u00e6rkes, at ikke alle biblioteker er tilg\u00e6ngelige. Det kan ske, at du alligevel skal importere et af bibliotekerne. En ulempe er ogs\u00e5, at scriptet i denne firkant er ret sv\u00e6rt at debugge. Der er en m\u00e5de at tilslutte sig NIFI JVM'en og starte debug-processen. Personligt har jeg k\u00f8rt en lokal applikation og simuleret modtagelsen af en fil fra en session. Jeg har ogs\u00e5 udf\u00f8rt debugging lokalt. Fejlen, der opst\u00e5r ved indl\u00e6sning af scriptet, er ret nemme at finde p\u00e5 Google og bliver registreret af 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(\"Fejl under behandlingen af validate.groovy\", e)\n    session.transfer(flowFile, REL_FAILURE)\n}<\/code><\/pre>\n<p><\/p>\n<p>Faktisk slutter tilpasningen af firkanten her. Den opdaterede fil overf\u00f8res til firkanten, der h\u00e5ndterer sendingen af filen til serveren. Nedenfor vises indstillingerne for denne firkant.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi beskriver metoden, hvormed SOAP-beskeden vil blive sendt. Vi angiver hvorhen. Derudover skal vi angive, at dette netop er SOAP.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2013 Kort oversigt over praktiske muligheder\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi tilf\u00f8jer nogle egenskaber som v\u00e6rtsadresse og handling (soapAction). Vi gemmer, kontrollerer. For mere om, hvordan man sender SOAP-anmodninger, kan du se her. <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">her<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Vi har gennemg\u00e5et flere m\u00e5der at bruge NIFI-processerne p\u00e5. Hvordan de interagerer, og hvilken reel nytte de har. De n\u00e6vnte eksempler er testeksempler og adskiller sig lidt fra det, der faktisk bruges i produktion. Jeg h\u00e5ber, at denne artikel vil v\u00e6re til lidt hj\u00e6lp for udviklere. Tak for opm\u00e6rksomheden. Hvis der er nogle sp\u00f8rgsm\u00e5l, s\u00e5 skriv. Jeg vil g\u00f8re mit bedste for at svare.<\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 \u2014 En kort gennemgang af mulighederne i praksis | ProHoster","description":"Introduktion Det er sket, at jeg p\u00e5 mit nuv\u00e6rende arbejdssted er blevet introduceret til denne teknologi. Jeg vil starte med en lille baggrundshistorie.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}