{"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\/fr\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introduction<\/h3>\n<p><\/p>\n<p>Il se trouve qu'\u00e0 mon poste actuel, j'ai d\u00fb me familiariser avec cette technologie. Je vais commencer par un bref historique. Lors d'une r\u00e9union, notre \u00e9quipe a \u00e9t\u00e9 inform\u00e9e qu'il fallait cr\u00e9er une int\u00e9gration avec <em>un syst\u00e8me bien connu<\/em>. L'int\u00e9gration signifiait que ce syst\u00e8me connu nous enverrait des requ\u00eates via HTTP \u00e0 un point de terminaison sp\u00e9cifique, et nous, curieusement, devions renvoyer des r\u00e9ponses sous forme de message SOAP. Cela semble simple et trivial. Il en d\u00e9coule que nous devons\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>La t\u00e2che<\/h3>\n<p><\/p>\n<p>Cr\u00e9er 3 services. Le premier d'entre eux est le Service de mise \u00e0 jour de la base de donn\u00e9es. Ce service, lorsqu'il re\u00e7oit de nouvelles donn\u00e9es d'un syst\u00e8me externe, met \u00e0 jour les donn\u00e9es dans la base et g\u00e9n\u00e8re un fichier au format CSV, pour le transmettre au syst\u00e8me suivant. Il appelle l'endpoint du deuxi\u00e8me service \u2014 le Service de transport via FTP, qui re\u00e7oit le fichier transmis, le valide et le stocke dans un espace de stockage via FTP. Le troisi\u00e8me service \u2014 le Service de transmission de donn\u00e9es \u00e0 l'utilisateur, fonctionne de mani\u00e8re asynchrone avec les deux premiers. Il re\u00e7oit une demande d'un syst\u00e8me externe pour le fichier dont il \u00e9tait question pr\u00e9c\u00e9demment, prend le fichier pr\u00eat, le modifie (met \u00e0 jour les champs id, description, linkToFile) et envoie la r\u00e9ponse sous forme de message SOAP. En gros, voici comment cela fonctionne : les deux premiers services commencent leur travail uniquement lorsque des donn\u00e9es pour la mise \u00e0 jour arrivent. Le troisi\u00e8me service fonctionne en permanence car il y a de nombreux consommateurs d'informations, environ 1000 demandes de donn\u00e9es par minute. Les services sont toujours disponibles et leurs instances se trouvent dans diff\u00e9rents environnements tels que test, d\u00e9mo, pr\u00e9production et production. Ci-dessous, un sch\u00e9ma de fonctionnement de ces services. Je pr\u00e9cise que certains d\u00e9tails ont \u00e9t\u00e9 simplifi\u00e9s pour \u00e9viter des complications inutiles.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">Approfondissement technique<\/h3>\n<p><\/p>\n<p>Lors de la planification de la solution, nous avons d'abord d\u00e9cid\u00e9 de cr\u00e9er des applications en Java en utilisant le framework Spring, avec Nginx comme \u00e9quilibreur de charge, une base de donn\u00e9es Postgres et d'autres \u00e9l\u00e9ments techniques et moins techniques. Comme le temps accord\u00e9 \u00e0 l'\u00e9laboration de la solution technique permettait d'envisager d'autres approches pour r\u00e9soudre ce probl\u00e8me, notre attention s'est tourn\u00e9e vers la technologie \u00e0 la mode dans certains cercles, Apache NIFI. Je dois dire tout de suite que cette technologie nous a permis de remarquer ces 3 services. Cet article d\u00e9crira le d\u00e9veloppement du service de transport de fichiers et du service de transmission de donn\u00e9es au consommateur, mais si l'article est bien re\u00e7u, j'\u00e9crirai sur le service de mise \u00e0 jour des donn\u00e9es dans la base de donn\u00e9es.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">Qu'est-ce que c'est<\/h3>\n<p><\/p>\n<p>NIFI est une architecture distribu\u00e9e pour le chargement et le traitement des donn\u00e9es de mani\u00e8re rapide et parall\u00e8le, offrant un grand nombre de plugins pour les sources et les transformations, le versionnage des configurations et bien plus encore. Un avantage agr\u00e9able est qu'il est tr\u00e8s simple \u00e0 utiliser. Les processus triviaux, tels que getFile, sendHttpRequest et d'autres, peuvent \u00eatre repr\u00e9sent\u00e9s sous forme de carr\u00e9s. Chaque carr\u00e9 repr\u00e9sente un certain processus, dont l'interaction peut \u00eatre visualis\u00e9e sur l'image ci-dessous. Une documentation plus d\u00e9taill\u00e9e sur l'interaction et la configuration des processus est \u00e9crite <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">ici<\/a><\/noindex> , pour ceux qui parlent russe \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">ici<\/a><\/noindex>. La documentation d\u00e9crit tr\u00e8s bien comment d\u00e9compresser et d\u00e9marrer NIFI, ainsi que comment cr\u00e9er des processus, qui sont aussi des carr\u00e9s.<br \/>\nL'id\u00e9e d'\u00e9crire cet article est n\u00e9e apr\u00e8s de longues recherches et la structuration des informations re\u00e7ues en quelque chose de coh\u00e9rent, ainsi que le d\u00e9sir de rendre un peu la vie plus facile pour les futurs d\u00e9veloppeurs.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Exemple<\/h3>\n<p><\/p>\n<p>Nous avons examin\u00e9 un exemple de l'interaction entre les carr\u00e9s. Le sch\u00e9ma g\u00e9n\u00e9ral est assez simple : nous recevons une requ\u00eate HTTP (en th\u00e9orie avec un fichier dans le corps de la requ\u00eate. Pour d\u00e9montrer les capacit\u00e9s de NIFI, dans cet exemple, la requ\u00eate lance le processus d'obtention d'un fichier depuis le FX local), puis nous envoyons une r\u00e9ponse indiquant que la requ\u00eate a \u00e9t\u00e9 re\u00e7ue, tout en lan\u00e7ant en parall\u00e8le le processus d'obtention du fichier depuis le FX, puis le processus de transfert via FTP vers le FX. Il convient de pr\u00e9ciser que les processus interagissent entre eux gr\u00e2ce \u00e0 ce qu'on appelle un flowFile. C'est une entit\u00e9 de base dans NIFI, qui stocke des attributs et du contenu. Le contenu repr\u00e9sente les donn\u00e9es sous forme de fichier de flux. En gros, si vous obtenez un fichier d'un carr\u00e9 et le transf\u00e9rez \u00e0 un autre, le contenu sera votre fichier.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Comme vous pouvez le constater, ce diagramme montre le processus global. HandleHttpRequest re\u00e7oit les requ\u00eates, ReplaceText g\u00e9n\u00e8re le corps de la r\u00e9ponse, HandleHttpResponse renvoie la r\u00e9ponse. FetchFile obtient un fichier de l'entrep\u00f4t de fichiers et le transmet au carr\u00e9 PutSftp, qui d\u00e9pose ce fichier sur FTP \u00e0 l'adresse sp\u00e9cifi\u00e9e. Prenons maintenant un peu plus de d\u00e9tails sur ce processus. <\/p>\n<p><\/p>\n<p>Dans ce cas, la request est le d\u00e9but de tout. Examinons ses param\u00e8tres de configuration. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nIci, tout est assez trivial, \u00e0 l'exception de StandartHttpContextMap, qui est un service permettant d'envoyer et de recevoir des requ\u00eates. Pour plus de d\u00e9tails et m\u00eame des exemples, vous pouvez consulter \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">ici<\/a><\/noindex><\/p>\n<p>Passons maintenant aux param\u00e8tres de configuration du carr\u00e9 ReplaceText. Il faut faire attention \u00e0 ReplacementValue \u2014 c'est ce qui sera renvoy\u00e9 \u00e0 l'utilisateur sous forme de r\u00e9ponse. Dans settings, vous pouvez r\u00e9gler le niveau de journalisation, les journaux peuvent \u00eatre consult\u00e9s {o\u00f9 nous avons d\u00e9compress\u00e9 nifi} \/nifi-1.9.2\/logs, o\u00f9 il y a aussi des param\u00e8tres failure\/success \u2014 sur la base de ces param\u00e8tres, vous pouvez r\u00e9guler le processus dans son ensemble. Autrement dit, en cas de traitement r\u00e9ussi du texte, le processus d'envoi de la r\u00e9ponse \u00e0 l'utilisateur sera d\u00e9clench\u00e9, sinon, nous journaliserons simplement le processus \u00e9chou\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dans les propri\u00e9t\u00e9s de HandleHttpResponse, il n'y a rien d'int\u00e9ressant \u00e0 part le statut en cas de cr\u00e9ation r\u00e9ussie de la r\u00e9ponse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons compris la demande et la r\u00e9ponse \u2014 passons maintenant \u00e0 l'obtention du fichier et \u00e0 son placement sur le serveur FTP. FetchFile obtient le fichier selon le chemin sp\u00e9cifi\u00e9 dans les param\u00e8tres et le transmet au processus suivant. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le carr\u00e9 PutSftp place le fichier dans le stockage. Nous pouvons voir les param\u00e8tres de configuration ci-dessous.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il convient de noter que chaque carr\u00e9 repr\u00e9sente un processus distinct qui doit \u00eatre ex\u00e9cut\u00e9. Nous avons examin\u00e9 l'exemple le plus simple qui ne n\u00e9cessite aucune personnalisation complexe. Passons maintenant \u00e0 un processus un peu plus compliqu\u00e9, o\u00f9 nous \u00e9crirons l\u00e9g\u00e8rement en Groovy. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Un exemple plus complexe<\/h3>\n<p><\/p>\n<p>Le service de transfert de donn\u00e9es au consommateur s'est av\u00e9r\u00e9 l\u00e9g\u00e8rement plus complexe en raison du processus de modification du message SOAP. Le processus g\u00e9n\u00e9ral est illustr\u00e9 ci-dessous.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L'id\u00e9e ici n'est pas particuli\u00e8rement compliqu\u00e9e : nous avons re\u00e7u une demande du consommateur concernant des donn\u00e9es, nous avons envoy\u00e9 une r\u00e9ponse indiquant que nous avons re\u00e7u le message, lanc\u00e9 le processus d'obtention du fichier de r\u00e9ponse, puis l'avons modifi\u00e9 avec une certaine logique, avant de transmettre le fichier au consommateur sous forme de message SOAP sur le serveur. <\/p>\n<p><\/p>\n<p>Je pense qu'il n'est pas n\u00e9cessaire de d\u00e9crire \u00e0 nouveau les carr\u00e9s que nous avons vus ci-dessus \u2014 passons directement \u00e0 de nouveaux. Si vous devez modifier un fichier et que les carr\u00e9s standard comme ReplaceText ne conviennent pas, vous devrez \u00e9crire votre propre script. Cela peut \u00eatre fait \u00e0 l'aide du carr\u00e9 ExecuteGroovyScript. Ses param\u00e8tres sont pr\u00e9sent\u00e9s ci-dessous.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il existe deux options pour charger le script dans ce carr\u00e9. La premi\u00e8re consiste \u00e0 t\u00e9l\u00e9charger un fichier contenant le script. La deuxi\u00e8me consiste \u00e0 ins\u00e9rer le script dans scriptBody. \u00c0 ma connaissance, le carr\u00e9 executeScript prend en charge plusieurs langages de programmation, dont groovy. Je vais d\u00e9cevoir les d\u00e9veloppeurs Java : il n'est pas possible d'\u00e9crire des scripts en Java dans de tels carr\u00e9s. Pour ceux qui le souhaitent vraiment, il faut cr\u00e9er son propre carr\u00e9 personnalis\u00e9 et l'introduire dans le syst\u00e8me NIFI. Toute cette op\u00e9ration est accompagn\u00e9e de nombreuses danses rituelles, que nous n'aborderons pas dans cet article. J'ai choisi le langage groovy. Voici un script test qui met simplement \u00e0 jour de mani\u00e8re incr\u00e9mentielle l'id dans le message SOAP. Il est important de noter que vous prenez le fichier du flowFile, le mettez \u00e0 jour, et n'oubliez pas de le remettre \u00e0 sa place apr\u00e8s modification. Il convient \u00e9galement de mentionner que toutes les biblioth\u00e8ques ne sont pas connect\u00e9es. Il se peut que vous deviez importer l'une des biblioth\u00e8ques. Un autre inconv\u00e9nient est que le script dans ce carr\u00e9 est assez difficile \u00e0 d\u00e9boguer. Il existe une m\u00e9thode pour se connecter \u00e0 la JVM NIFI et commencer le processus de d\u00e9bogage. Personnellement, j'ai lanc\u00e9 l'application localement et j'ai simul\u00e9 la r\u00e9ception du fichier de la session. Le d\u00e9bogage a \u00e9galement \u00e9t\u00e9 effectu\u00e9 localement. Les erreurs qui apparaissent lors du chargement du script sont assez faciles \u00e0 rechercher sur Google et NIFI les consigne dans le 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(\"Erreur lors du traitement de validate.groovy\", e)\n    session.transfer(flowFile, REL_FAILURE)\n}<\/code><\/pre>\n<p><\/p>\n<p>Cela marque la fin de la personnalisation du carr\u00e9. Ensuite, le fichier mis \u00e0 jour est transf\u00e9r\u00e9 dans le carr\u00e9 responsable de l'envoi du fichier au serveur. Voici les param\u00e8tres de ce carr\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous d\u00e9crivons la m\u00e9thode par laquelle le message SOAP sera transmis. Nous indiquons o\u00f9. Ensuite, il faut pr\u00e9ciser qu'il s'agit bien d'un message SOAP.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI \u2014 Aper\u00e7u des fonctionnalit\u00e9s en pratique\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous ajoutons plusieurs propri\u00e9t\u00e9s telles que l'h\u00f4te et l'action (soapAction). Nous enregistrons et v\u00e9rifions. Pour plus de d\u00e9tails sur l'envoi de requ\u00eates SOAP, vous pouvez consulter <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">ici<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Nous avons explor\u00e9 plusieurs options d'utilisation des processus NIFI. Comment ils interagissent et quel en est le v\u00e9ritable b\u00e9n\u00e9fice. Les exemples examin\u00e9s sont des tests et diff\u00e8rent un peu de ce qui se passe r\u00e9ellement en production. J'esp\u00e8re que cet article sera un peu utile aux d\u00e9veloppeurs. Merci pour votre attention. Si vous avez des questions, n'h\u00e9sitez pas \u00e0 \u00e9crire. Je ferai de mon mieux pour r\u00e9pondre.<\/p>\n<p>Source : <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 - 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\/fr\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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 Aper\u00e7u concis des fonctionnalit\u00e9s en pratique | ProHoster","description":"Introduction Il se trouve que dans mon emploi actuel, j'ai d\u00fb me familiariser avec cette technologie. Je vais commencer par une petite histoire.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}