{"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\/it\/blog\/novosti-interneta\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introduzione<\/h3>\n<p><\/p>\n<p>A lavoro, mi \u00e8 capitato di dover utilizzare questa tecnologia. Iniziamo con una breve introduzione. Durante una riunione, ci \u00e8 stato comunicato che dovevamo creare un'integrazione con <em>un sistema noto<\/em>. \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 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 SOAP \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e&#8230;<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>Compito<\/h3>\n<p><\/p>\n<p>Creare 3 servizi. Il primo \u00e8 il Servizio di aggiornamento del database. Questo servizio, all'arrivo di nuovi dati da un sistema esterno, aggiorna i dati nel database e genera un file in formato CSV, per la sua trasmissione al sistema successivo. Viene chiamato l'endpoint del secondo servizio - il Servizio di trasporto tramite FTP, che riceve il file trasmesso, lo convalida e lo archivia nello storage tramite FTP. Il terzo servizio - il Servizio di trasmissione dei dati al consumatore, lavora in modo asincrono con i primi due. Riceve una richiesta da un sistema esterno per ottenere il file di cui sopra, prende il file di risposta pronto, lo modifica (aggiornando i campi id, description, linkToFile) e invia la risposta come messaggio SOAP. Quindi, in generale, la situazione \u00e8 la seguente: i primi due servizi iniziano il loro lavoro solo quando arrivano dati per l'aggiornamento. Il terzo servizio lavora continuamente poich\u00e9 ci sono molti consumatori di informazioni, circa 1000 richieste di dati al minuto. I servizi sono sempre disponibili e le loro istanze si trovano in ambienti diversi, come test, demo, pre-produzione e produzione. Di seguito \u00e8 riportato un diagramma di funzionamento di questi servizi. Aggiungo subito che alcuni dettagli sono stati semplificati per evitare complessit\u00e0 eccessive.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">Approfondimento tecnico<\/h3>\n<p><\/p>\n<p>Nella pianificazione della soluzione, inizialmente abbiamo deciso di creare un'applicazione in Java utilizzando il framework Spring, con un bilanciatore Nginx, un database Postgres e altre tecnologie. Poich\u00e9 il tempo a disposizione per sviluppare la soluzione tecnica ci permetteva di considerare altre possibile approcci, abbiamo rivolto la nostra attenzione alla tecnologia alla moda in determinati ambienti, Apache NIFI. Devo dire che questa tecnologia ci ha permesso di notare questi 3 servizi. In questo articolo descriver\u00f2 lo sviluppo del servizio di trasporto file e del servizio di trasmissione dati al consumatore; per\u00f2, se l'articolo sar\u00e0 ben accolto, scriver\u00f2 anche del servizio di aggiornamento dei dati nel database.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">Cos'\u00e8?<\/h3>\n<p><\/p>\n<p>NIFI \u00e8 un'architettura distribuita per il caricamento e l'elaborazione rapida dei dati, con un'ampia gamma di plugin per fonti e trasformazioni, versionamento delle configurazioni e molto altro. Un bel vantaggio \u00e8 che \u00e8 molto semplice da usare. I processi banali, come getFile, sendHttpRequest e altri, possono essere rappresentati come riquadri. Ogni riquadro rappresenta un processo, la cui interazione pu\u00f2 essere vista nell'immagine sottostante. Maggiori dettagli sulla documentazione riguardante l'interazione e la configurazione dei processi sono scritti <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">qui<\/a><\/noindex> , per chi parla russo \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">qui<\/a><\/noindex>. Nella documentazione \u00e8 spiegato benissimo come estrarre e avviare NIFI, e come creare processi, che sono appunto i riquadri<br \/>\nL'idea di scrivere un articolo \u00e8 nata dopo prolungate ricerche e la strutturazione delle informazioni ottenute in qualcosa di coerente, oltre al desiderio di rendere un po' pi\u00f9 facile la vita ai futuri sviluppatori.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Esempio<\/h3>\n<p><\/p>\n<p>Viene esaminato un esempio di come interagiscono i quadrati tra loro. Lo schema generale \u00e8 piuttosto semplice: riceviamo una richiesta HTTP (teoricamente con un file nel corpo della richiesta. Per dimostrare le capacit\u00e0 di NIFI, in questo esempio la richiesta avvia il processo di acquisizione del file dal F\u0425 locale), successivamente inviamo indietro una risposta che conferma che la richiesta \u00e8 stata ricevuta, mentre viene avviato in parallelo il processo di acquisizione del file dal F\u0425 e il processo di trasferimento tramite FTP nel F\u0425. \u00c8 importante sottolineare che i processi interagiscono tra loro tramite la cosiddetta flowFile. Questa \u00e8 l'entit\u00e0 di base in NIFI che contiene attributi e contenuti. Il contenuto \u00e8 rappresentato dai dati del file del flusso. In altre parole, se ricevi un file da un quadrato e lo trasferisci a un altro, il contenuto sar\u00e0 il tuo file.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Come puoi notare, in questa immagine \u00e8 rappresentato il processo generale. HandleHttpRequest accetta le richieste, ReplaceText genera il corpo della risposta, HandleHttpResponse restituisce la risposta. FetchFile ottiene il file dallo storage e lo passa al quadrato PutSftp, che inserisce il file sull'FTP all'indirizzo specificato. Ora approfondiamo questo processo. <\/p>\n<p><\/p>\n<p>In questo caso, la richiesta \u00e8 l'inizio di tutto. Diamo un'occhiata alle sue impostazioni di configurazione. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nQui tutto \u00e8 piuttosto banale, tranne per StandartHttpContextMap \u2014 un servizio che permette di inviare e ricevere richieste. Maggiori dettagli, anche con esempi, possono essere consultati qui \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">qui<\/a><\/noindex><\/p>\n<p>Successivamente, esaminiamo le impostazioni di configurazione di ReplaceText. \u00c8 importante prestare attenzione a ReplacementValue \u2014 ci\u00f2 che sar\u00e0 restituito all'utente come risposta. In settings, \u00e8 possibile regolare il livello di logging, i log possono essere visionati in {\u043a\u0443\u0434\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438 nifi}\/nifi-1.9.2\/logs, dove ci sono anche parametri di failure\/success \u2014 sulla base di questi parametri, si pu\u00f2 regolare l'intero processo. Cio\u00e8, in caso di elaborazione del testo riuscita, verr\u00e0 avviato il processo di invio della risposta all'utente, mentre in caso contrario semplicemente registreremo il processo non riuscito. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nelle propriet\u00e0 di HandleHttpResponse non c'\u00e8 nulla di particolarmente interessante, tranne lo stato in caso di creazione riuscita della risposta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Abbiamo chiarito la questione della richiesta e della risposta \u2014 procediamo ora a ottenere un file e posizionarlo sul server FTP. FetchFile \u2014 acquisisce un file dal percorso specificato nelle impostazioni e lo passa al processo successivo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E poi il quadrato PutSftp inserisce il file nello storage. Possiamo vedere le opzioni di configurazione di seguito.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c8 importante notare che ogni quadrato \u00e8 un processo separato che deve essere avviato. Abbiamo esaminato il caso pi\u00f9 semplice che non richiede alcuna personalizzazione complessa. Adesso considereremo un processo leggermente pi\u00f9 complicato, in cui scriveremo un po' su Groovy. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Esempio pi\u00f9 complesso<\/h3>\n<p><\/p>\n<p>Il servizio di trasferimento dati al consumatore \u00e8 diventato un po' pi\u00f9 complicato a causa del processo di modifica del messaggio SOAP. Il processo generale \u00e8 rappresentato nell'immagine qui sotto.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L'idea qui non \u00e8 particolarmente complessa: abbiamo ricevuto una richiesta dal consumatore riguardo ai dati, abbiamo inviato una risposta che conferma la ricezione del messaggio, abbiamo avviato il processo di ricezione del file di risposta, quindi lo abbiamo modificato con una logica specifica, dopo di che abbiamo inviato il file al consumatore sotto forma di messaggio SOAP al server. <\/p>\n<p><\/p>\n<p>Non credo sia necessario descrivere nuovamente i quadrati che abbiamo visto sopra \u2014 passiamo direttamente ai nuovi. Se devi modificare un file e i normali quadrati come ReplaceText non sono adatti, dovrai scrivere il tuo script. Puoi farlo utilizzando il quadrato ExecuteGroogyScript. Le sue impostazioni sono riportate di seguito.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ci sono due modi per caricare uno script in questo quadrato. Il primo \u00e8 caricare un file con lo script. Il secondo consiste nell'incollare lo script in scriptBody. Per quanto ne so, il quadrato executeScript supporta diversi linguaggi di programmazione, uno dei quali \u00e8 Groovy. Deluder\u00f2 gli sviluppatori Java: non \u00e8 possibile scrivere script in questi quadrati utilizzando Java. Per coloro che ne hanno davvero voglia, \u00e8 necessario creare un proprio quadrato personalizzato e aggiungerlo al sistema NIFI. Tutta questa operazione richiede diversi passaggi complessi, di cui non ci occuperemo in questo articolo. Ho scelto il linguaggio Groovy. Di seguito \u00e8 fornito uno script di test che aggiorna in modo incrementale l'id nel messaggio SOAP. \u00c8 importante notare che si prende un file da flowFile, lo si aggiorna e non si deve dimenticare di rimetterlo l\u00ec, una volta aggiornato. Vale anche la pena sottolineare che non tutte le librerie sono collegate. Potrebbe succedere che dovrete comunque importare una delle librerie. Un altro svantaggio \u00e8 che lo script in questo quadrato \u00e8 piuttosto difficile da fare debugging. Esiste un modo per connettersi alla JVM NIFI e avviare il processo di debug. Personalmente, ho eseguito un'applicazione locale e ho simulato il recupero di un file dalla sessione. Ho anche fatto debugging localmente. Gli errori che si verificano durante il caricamento dello script si possono facilmente cercare online e NIFI li registra nel log.<\/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>La personalizzazione di questo quadrato finisce qui. Il file aggiornato viene poi inviato al quadrato che si occupa dell'invio del file al server. Di seguito sono riportate le impostazioni di questo quadrato.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Descriviamo il metodo che verr\u00e0 utilizzato per inviare il messaggio SOAP. Indichiamo dove. \u00c8 necessario specificare che si tratta di un messaggio SOAP.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Panoramica delle funzionalit\u00e0 in pratica\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aggiungiamo diverse propriet\u00e0 come l'host e l'azione (soapAction). Salviamo e controlliamo. Per ulteriori dettagli su come inviare richieste SOAP, \u00e8 possibile consultare. <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">qui<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Abbiamo esaminato diverse applicazioni dei processi NIFI. Come interagiscono e quali sono i reali vantaggi che ne derivano. Gli esempi esaminati sono testuali e differiscono leggermente da quelli utilizzati in scenari reali. Spero che questo articolo possa essere utile per gli sviluppatori. Grazie per l'attenzione. Se avete domande, non esitate a scrivere. Cercher\u00f2 di rispondere.<\/p>\n<p>Fonte: <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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - 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. \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\" \/>\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\/it\/blog\/novosti-interneta\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/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 Sintesi delle funzionalit\u00e0 in pratica | ProHoster","description":"Introduzione \u00c8 accaduto che nel mio attuale lavoro ho dovuto familiarizzare con questa tecnologia. Inizier\u00f2 con una piccola introduzione. Durante una riunione, al nostro team \u00e8 stato detto che dovevamo creare un'integrazione con un noto sistema. Per integrazione si intendeva che questo noto sistema ci avrebbe inviato richieste via HTTP a un endpoint specifico, e noi, strano ma vero, avremmo inviato","canonical_url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}