{"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\/ro\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introducere<\/h3>\n<p><\/p>\n<p>A\u0219a s-a \u00eent\u00e2mplat c\u0103 la locul meu de munc\u0103 actual am fost nevoit s\u0103 m\u0103 familiarizez cu aceast\u0103 tehnologie. Voi \u00eencepe cu o mic\u0103 introducere. La o \u00eent\u00e2lnire recent\u0103, echipa noastr\u0103 a fost informat\u0103 c\u0103 trebuie s\u0103 cre\u0103m o integrare cu <em>o sistem cunoscut<\/em>. Integrarea implica faptul c\u0103 acest sistem cunoscut ne va trimite cereri prin HTTP c\u0103tre un anumit endpoint, iar noi, ciudat dar adev\u0103rat, vom trimite \u00eenapoi r\u0103spunsuri sub forma unui mesaj SOAP. Pare totul simplu \u0219i trivial. Din aceasta rezult\u0103 c\u0103 trebuie\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>Sarcin\u0103<\/h3>\n<p><\/p>\n<p>S\u0103 cre\u0103m 3 servicii. Primul dintre ele \u2014 Serviciul de actualizare a bazei de date. Acest serviciu, atunci c\u00e2nd prime\u0219te date noi dintr-un sistem extern, actualizeaz\u0103 datele \u00een baza de date \u0219i genereaz\u0103 un fi\u0219ier \u00een format CSV, pentru a-l trimite sistemului urm\u0103tor. Se apeleaz\u0103 endpoint-ul celui de-al doilea serviciu \u2014 Serviciul de transport prin FTP, care prime\u0219te fi\u0219ierul trimis, \u00eel valideaz\u0103 \u0219i \u00eel stocheaz\u0103 \u00een spa\u021biul de fi\u0219iere prin FTP. Al treilea serviciu \u2014 Serviciul de transmitere a datelor c\u0103tre consumator, func\u021bioneaz\u0103 asincron cu primele dou\u0103. Acesta prime\u0219te o cerere din partea unui sistem extern, pentru a ob\u021bine fi\u0219ierul despre care s-a vorbit mai sus, ia fi\u0219ierul de r\u0103spuns gata, \u00eel modific\u0103 (actualizeaz\u0103 c\u00e2mpurile id, description, linkToFile) \u0219i trimite un r\u0103spuns sub form\u0103 de mesaj SOAP. A\u0219adar, pe scurt, imaginea este urm\u0103toarea: primele dou\u0103 servicii \u00ee\u0219i \u00eencep activitatea doar atunci c\u00e2nd au venit date pentru actualizare. Al treilea serviciu func\u021bioneaz\u0103 constant, deoarece exist\u0103 mul\u021bi consumatori de informa\u021bii, aproximativ 1000 de cereri pentru a ob\u021bine date pe minut. Serviciile sunt disponibile tot timpul \u0219i instan\u021bele lor sunt plasate \u00een medii diferite, cum ar fi test, demo, preprod \u0219i prod. Mai jos este prezentat\u0103 schema de func\u021bionare a acestor servicii. Voi explica imediat c\u0103 unele detalii au fost simplificate pentru a evita complexitatea excesiv\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">\u00centreprindere tehnic\u0103<\/h3>\n<p><\/p>\n<p>\u00cen planificarea solu\u021biei, am decis mai \u00eent\u00e2i s\u0103 dezvolt\u0103m aplica\u021bii pe Java, folosind frameworkul Spring, cu un balancer Nginx, o baz\u0103 de date Postgres \u0219i alte tehnologii variate. Av\u00e2nd \u00een vedere c\u0103 timpul alocat dezvolt\u0103rii solu\u021biei tehnice permitea explorarea altor abord\u0103ri pentru aceast\u0103 sarcin\u0103, ne-am \u00eendreptat aten\u021bia c\u0103tre tehnologia modern\u0103 Apache NIFI, popular\u0103 \u00een anumite cercuri. Voi men\u021biona c\u0103 aceast\u0103 tehnologie ne-a ajutat s\u0103 identific\u0103m cele 3 servicii. \u00cen acest articol, va fi descris\u0103 dezvoltarea serviciului de transport al fi\u0219ierului \u0219i a serviciului de livrare a datelor c\u0103tre consumatori; totu\u0219i, dac\u0103 articolul va avea succes, voi scrie \u0219i despre serviciul de actualizare a datelor \u00een baza de date.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">Ce este asta<\/h3>\n<p><\/p>\n<p>NIFI este o arhitectur\u0103 distribuit\u0103 pentru \u00eenc\u0103rcarea rapid\u0103 \u0219i procesarea datelor \u00een paralel, av\u00e2nd un num\u0103r mare de pluginuri pentru surse \u0219i transform\u0103ri, versionarea configura\u021biilor \u0219i multe altele. Un avantaj pl\u0103cut este c\u0103 este foarte u\u0219or de utilizat. Procesele triviale, cum ar fi getFile, sendHttpRequest \u0219i altele, pot fi reprezentate sub form\u0103 de p\u0103trate. Fiecare p\u0103trat reprezint\u0103 un anumit proces, al c\u0103rui interac\u021biune poate fi observat\u0103 \u00een imaginea de mai jos. Documenta\u021bia detaliat\u0103 despre interac\u021biunea \u0219i configurarea proceselor este scris\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">aici<\/a><\/noindex> , pentru cei care vorbesc rus\u0103 \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">aici<\/a><\/noindex>. Documenta\u021bia explic\u0103 excelent cum s\u0103 dezarhivezi \u0219i s\u0103 porne\u0219ti NIFI, precum \u0219i cum s\u0103 creezi procese, adic\u0103 p\u0103tratele<br \/>\nIdeea de a scrie acest articol s-a n\u0103scut dup\u0103 o c\u0103utare \u00eendelungat\u0103 \u0219i structurarea informa\u021biilor ob\u021binute \u00eentr-o form\u0103 coerent\u0103, precum \u0219i dorin\u021ba de a u\u0219ura pu\u021bin via\u021ba dezvoltatorilor viitori.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Exemplu<\/h3>\n<p><\/p>\n<p>Un exemplu de interac\u021biune \u00eentre modulele de tip p\u0103trat a fost discutat. Schema general\u0103 este destul de simpl\u0103: primim o solicitare HTTP (teoretic cu un fi\u0219ier \u00een corpul cererii. Pentru a demonstra capabilit\u0103\u021bile NIFI, \u00een acest exemplu, cererea ini\u021biaz\u0103 un proces de ob\u021binere a fi\u0219ierului din FS local), apoi trimitem un r\u0103spuns de confirmare c\u0103 cererea a fost primit\u0103, iar \u00een paralel se demareaz\u0103 procesul de ob\u021binere a fi\u0219ierului din FS \u0219i ulterior procesul de mutare a acestuia prin FTP \u00een FS. Este important de men\u021bionat c\u0103 procesele interac\u021bioneaz\u0103 \u00eentre ele prin intermediul a\u0219a-numitului flowFile. Aceasta este baza entit\u0103\u021bii \u00een NIFI, care stocheaz\u0103 atributele \u0219i con\u021binutul. Con\u021binutul reprezint\u0103 datele care sunt prezentate sub form\u0103 de fi\u0219ier de flux. Cu alte cuvinte, dac\u0103 a\u021bi ob\u021binut un fi\u0219ier dintr-un mod p\u0103trat \u0219i \u00eel transfera\u021bi \u00eentr-altul, con\u021binutul va fi fi\u0219ierul dumneavoastr\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dup\u0103 cum pute\u021bi observa, aceast\u0103 imagine ilustreaz\u0103 procesul general. HandleHttpRequest - prime\u0219te cererile, ReplaceText - genereaz\u0103 corpul r\u0103spunsului, HandleHttpResponse - returneaz\u0103 r\u0103spunsul. FetchFile - ob\u021bine fi\u0219ierul din stocarea de fi\u0219iere \u0219i \u00eel transfer\u0103 modulului PutSftp - care plaseaz\u0103 acest fi\u0219ier pe FTP, la adresa specificat\u0103. Acum, s\u0103 discut\u0103m mai \u00een detaliu despre acest proces. <\/p>\n<p><\/p>\n<p>\u00cen acest caz, request-ul reprezint\u0103 punctul de plecare. S\u0103 examin\u0103m parametrii s\u0103i de configurare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAici totul este destul de simplu, cu excep\u021bia StandartHttpContextMap - este un serviciu care permite trimiterea \u0219i primirea cererilor. Mai multe detalii \u0219i exemple pot fi vizualizate aici - <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">aici<\/a><\/noindex><\/p>\n<p>\u00cen continuare, s\u0103 examin\u0103m parametrii de configurare ai modulului ReplaceText. Este important s\u0103 ne concentr\u0103m asupra ReplacementValue - acesta este ceea ce va reveni utilizatorului sub form\u0103 de r\u0103spuns. \u00cen settings, se poate ajusta nivelul de logging, iar logurile pot fi consultate {unde am desf\u0103\u0219urat nifi}\/nifi-1.9.2\/logs, acolo exist\u0103 \u0219i parametrii failure\/success - baz\u00e2ndu-ne pe ace\u0219ti parametri, putem controla procesul \u00een ansamblu. Adic\u0103, \u00een cazul \u00een care procesarea textului a fost de succes, se va ini\u021bia procesul de trimitere a r\u0103spunsului utilizatorului, iar \u00een caz contrar, vom \u00eenregistra doar un proces e\u0219uat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen propriet\u0103\u021bile HandleHttpResponse, nu exist\u0103 nimic special de men\u021bionat, \u00een afar\u0103 de statusul la crearea cu succes a r\u0103spunsului. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am discutat despre cereri \u0219i r\u0103spunsuri - s\u0103 trecem mai departe la ob\u021binerea fi\u0219ierului \u0219i plasarea acestuia pe serverul FTP. FetchFile - ob\u021bine fi\u0219ierul de la calea specificat\u0103 \u00een set\u0103ri \u0219i \u00eel trimite la procesul urm\u0103tor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i apoi, p\u0103tratul PutSftp - plaseaz\u0103 fi\u0219ierul \u00een stocarea de fi\u0219iere. Parametrii de configurare \u00eei putem vedea mai jos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Este important de men\u021bionat c\u0103 fiecare p\u0103trat reprezint\u0103 un proces distinct, care trebuie s\u0103 fie ini\u021biat. Am discutat despre cel mai simplu exemplu, care nu necesit\u0103 personaliz\u0103ri complexe. \u00cen continuare, vom analiza un proces pu\u021bin mai complicat, unde vom scrie pu\u021bin pe groovy. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Un exemplu mai complex<\/h3>\n<p><\/p>\n<p>Serviciul de transfer de date c\u0103tre consumator s-a dovedit a fi pu\u021bin mai complicat datorit\u0103 procesului de modificare a mesajelor SOAP. Procesul general este ilustrat \u00een figura de mai jos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aici, ideea nu este foarte complicat\u0103: am primit o solicitare de la consumator, care avea nevoie de date, am trimis un r\u0103spuns c\u0103 am primit mesajul, am ini\u021biat procesul de ob\u021binere a fi\u0219ierului r\u0103spuns, apoi l-am editat conform unei logici specifice, dup\u0103 care am transmis fi\u0219ierul consumatorului sub forma unui mesaj SOAP pe server. <\/p>\n<p><\/p>\n<p>Cred c\u0103 nu are sens s\u0103 descriem din nou p\u0103tratele pe care le-am v\u0103zut mai sus - s\u0103 trecem direct la altele noi. Dac\u0103 este necesar s\u0103 edita\u021bi un fi\u0219ier \u0219i p\u0103tratele obi\u0219nuite, cum ar fi ReplaceText, nu se potrivesc, va trebui s\u0103 scrie\u021bi propriul script. Acest lucru se poate face folosind p\u0103tratul ExecuteGroogyScript. Set\u0103rile sale sunt prezentate mai jos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Exist\u0103 dou\u0103 op\u021biuni pentru \u00eenc\u0103rcarea scriptului \u00een acest bloc. Prima este prin \u00eenc\u0103rcarea fi\u0219ierului cu scriptul. A doua este prin inserarea scriptului \u00een scriptBody. Din c\u00e2te \u0219tiu, blocul executeScript suport\u0103 mai multe limbaje de programare \u2014 unul dintre ele este groovy. \u00cei voi dezam\u0103gi pe dezvoltatorii Java \u2014 nu se pot scrie scripturi \u00een astfel de blocuri folosind Java. Pentru cei care \u00ee\u0219i doresc foarte mult \u2014 trebuie s\u0103 crea\u021bi un bloc personalizat \u0219i s\u0103-l introduce\u021bi \u00een sistemul NIFI. \u00centreaga opera\u021biune vine cu ni\u0219te dansuri elaborate pe care nu le vom aborda \u00een cadrul acestui articol. Am ales limbajul groovy. Mai jos este un script de test care pur \u0219i simplu actualizeaz\u0103 incremental id-ul din mesajul SOAP. Este important de men\u021bionat c\u0103 lua\u021bi fi\u0219ierul din flowFile, \u00eel actualiza\u021bi, f\u0103r\u0103 a uita c\u0103 trebuie s\u0103-l pune\u021bi \u00eenapoi, actualizat. De asemenea, merit\u0103 men\u021bionat c\u0103 nu toate bibliotecile sunt conectate. Este posibil s\u0103 trebuiasc\u0103 s\u0103 importa\u021bi una dintre biblioteci. O alt\u0103 problem\u0103 este c\u0103 scriptul din acest bloc este destul de greu de debitat. Exist\u0103 o modalitate de a te conecta la JVM NIFI \u0219i de a \u00eencepe procesul de depanare. Personal, am rulat o aplica\u021bie local\u0103 \u0219i am simulat ob\u021binerea fi\u0219ierului din sesiune. Am f\u0103cut \u0219i depanare local. Erorile care apar la \u00eenc\u0103rcarea scriptului sunt destul de u\u0219or de c\u0103utat pe Google \u0219i sunt scrise de \u00eensu\u0219i NIFI \u00een jurnal.<\/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>Practic, aici se \u00eencheie personalizarea blocului. Ulterior, fi\u0219ierul actualizat este transmis c\u0103tre un bloc care se ocup\u0103 cu trimiterea fi\u0219ierului pe server. Mai jos sunt prezentate set\u0103rile acestui bloc.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Descriem metoda prin care va fi transmis mesajul SOAP. Specific\u0103m unde. Apoi, trebuie s\u0103 indic\u0103m c\u0103 este vorba despre un mesaj SOAP.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Prezentare general\u0103 a posibilit\u0103\u021bilor \u00een practic\u0103\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ad\u0103ug\u0103m c\u00e2teva propriet\u0103\u021bi precum host \u0219i action (soapAction). Salv\u0103m, verific\u0103m. Mai multe detalii despre cum s\u0103 trimitem cereri SOAP pot fi g\u0103site <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">aici<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Am analizat c\u00e2teva scenarii de utilizare a proceselor NIFI. Cum interac\u021bioneaz\u0103 \u0219i care este beneficiul real al acestora. Exemplele discutate sunt de test \u0219i se diferen\u021biaz\u0103 pu\u021bin de ceea ce se \u00eent\u00e2lne\u0219te \u00een produc\u021bie. Sper c\u0103 acest articol va fi pu\u021bin util dezvoltatorilor. Mul\u021bumesc pentru aten\u021bie. Dac\u0103 ave\u021bi \u00eentreb\u0103ri, nu ezita\u021bi s\u0103 scrie\u021bi. Voi \u00eencerca s\u0103 r\u0103spund.<\/p>\n<p>Sursa: <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.2.1 - 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\/ro\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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 O scurt\u0103 prezentare a capacit\u0103\u021bilor \u00een practic\u0103 | ProHoster","description":"Introducere A\u0219a s-a nimerit c\u0103 la locul meu actual de munc\u0103 a trebuit s\u0103 m\u0103 familiarizez cu aceast\u0103 tehnologie. O voi \u00eencepe cu o scurt\u0103 poveste de fundal.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}