{"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\/es\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","title":{"rendered":"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Introducci\u00f3n<\/h3>\n<p><\/p>\n<p>Resulta que en mi trabajo actual tuve que familiarizarme con esta tecnolog\u00eda. Comenzar\u00e9 con una breve historia. <em>un sistema conocido<\/em>. La integraci\u00f3n implicaba que este conocido sistema nos enviar\u00eda solicitudes a trav\u00e9s de HTTP a un endpoint espec\u00edfico, y nosotros, curiosamente, enviar\u00edamos respuestas en forma de mensaje SOAP. Parecer\u00eda todo simple y trivial. De esto se deduce que es necesario...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3>Tarea<\/h3>\n<p><\/p>\n<p>Crear 3 servicios. El primero de ellos es el Servicio de Actualizaci\u00f3n de la Base de Datos. Este servicio, al recibir nuevos datos de un sistema externo, actualiza la base de datos y genera un archivo en formato CSV para pasarlo al siguiente sistema. Se invoca el endpoint del segundo servicio: el Servicio de Transporte a trav\u00e9s de FTP, que recibe el archivo enviado, lo valida y lo coloca en el almacenamiento de archivos a trav\u00e9s de FTP. El tercer servicio, el Servicio de Transferencia de Datos al Consumidor, funciona de manera as\u00edncrona con los dos primeros. Este acepta solicitudes de un sistema externo para obtener el archivo mencionado anteriormente, toma el archivo de respuesta listo, lo modifica (actualiza los campos id, description, linkToFile) y env\u00eda la respuesta en forma de mensaje SOAP. En resumen, la situaci\u00f3n es la siguiente: los primeros dos servicios inician su trabajo solo cuando llegan datos para su actualizaci\u00f3n. El tercer servicio funciona continuamente ya que hay muchos consumidores de informaci\u00f3n, alrededor de 1000 solicitudes para recibir datos por minuto. Los servicios est\u00e1n disponibles de manera continua y sus instancias se encuentran en diferentes entornos, como test, demo, preproducci\u00f3n y producci\u00f3n. A continuaci\u00f3n se presenta el esquema de funcionamiento de estos servicios. Cabe aclarar que algunos detalles han sido simplificados para evitar complicaciones innecesarias.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/1edca5d5e917d8ac55ac96e892e816dd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"tehnicheskoe-uglublenie\">Profundizaci\u00f3n t\u00e9cnica<\/h3>\n<p><\/p>\n<p>Al planificar la soluci\u00f3n del problema, inicialmente decidimos desarrollar aplicaciones en Java utilizando el framework Spring, con Nginx como balanceador, una base de datos Postgres y otras tecnolog\u00edas, tanto t\u00e9cnicas como no tan t\u00e9cnicas. Dado que el tiempo para desarrollar la soluci\u00f3n t\u00e9cnica permit\u00eda considerar otros enfoques, nos fijamos en la popular tecnolog\u00eda Apache NIFI en ciertos c\u00edrculos. Debo decir que esta tecnolog\u00eda nos permiti\u00f3 identificar estos 3 servicios. Este art\u00edculo describir\u00e1 el desarrollo del servicio de transporte de archivos y del servicio de transmisi\u00f3n de datos al consumidor; sin embargo, si el art\u00edculo resulta interesante, escribir\u00e9 sobre el servicio de actualizaci\u00f3n de datos en la base de datos.<\/p>\n<p><\/p>\n<h3 id=\"chto-eto-takoe\">\u00bfQu\u00e9 es esto?<\/h3>\n<p><\/p>\n<p>NIFI es una arquitectura distribuida para la carga y procesamiento r\u00e1pido de datos, con una gran cantidad de complementos para fuentes y transformaciones, versionado de configuraciones y mucho m\u00e1s. Un agradable beneficio es que es muy f\u00e1cil de usar. Procesos triviales, como getFile, sendHttpRequest y otros, se pueden representar en forma de cuadrados. Cada cuadrado representa un proceso, cuya interacci\u00f3n se puede visualizar en la imagen de abajo. En la documentaci\u00f3n hay una excelente descripci\u00f3n de c\u00f3mo interactuar y configurar los procesos. <noindex><a rel=\"nofollow\" href=\"https:\/\/nifi.apache.org\/docs.html\">aqu\u00ed<\/a><\/noindex> , para aquellos que hablan ruso \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.arenadata.io\/ads\/UserNIFI\/index.html\">aqu\u00ed<\/a><\/noindex>. La documentaci\u00f3n explica muy bien c\u00f3mo descomprimir y ejecutar NIFI, as\u00ed como c\u00f3mo crear procesos, los cuales son cuadrados.<br \/>\nLa idea de escribir este art\u00edculo surgi\u00f3 despu\u00e9s de una larga b\u00fasqueda y estructuraci\u00f3n de la informaci\u00f3n obtenida en algo coherente, as\u00ed como el deseo de facilitar un poco la vida a los futuros desarrolladores.<\/p>\n<p><\/p>\n<h3 id=\"primer\">Ejemplo<\/h3>\n<p><\/p>\n<p>Se ha considerado un ejemplo de c\u00f3mo interact\u00faan los cuadrados entre s\u00ed. El esquema general es bastante simple: recibimos una solicitud HTTP (te\u00f3ricamente con un archivo en el cuerpo de la solicitud. Para demostrar las capacidades de NIFI, en este ejemplo la solicitud inicia el proceso de obtenci\u00f3n de un archivo desde el FX local), luego enviamos de vuelta una respuesta indicando que se ha recibido la solicitud, mientras se inicia el proceso de obtenci\u00f3n del archivo desde el FX y posteriormente se mueve a trav\u00e9s de FTP al FX. Cabe aclarar que los procesos interact\u00faan entre s\u00ed mediante lo que se denomina flowFile. Esta es la entidad b\u00e1sica en NIFI que almacena atributos y contenido. El contenido son los datos que se presentan en el archivo de flujo. Es decir, en t\u00e9rminos simples, si recibes un archivo de un cuadrado y lo transmites a otro, el contenido ser\u00e1 tu archivo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/2649a29dcc9155ae7734db44fc6d3f9a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Como puedes notar, en esta imagen se ilustra el proceso general. HandleHttpRequest recibe solicitudes, ReplaceText genera el cuerpo de respuesta, y HandleHttpResponse devuelve la respuesta. FetchFile obtiene un archivo del almacenamiento de archivos y lo pasa al cuadrado PutSftp, que coloca este archivo en FTP, en la direcci\u00f3n especificada. Ahora veamos este proceso en m\u00e1s detalle. <\/p>\n<p><\/p>\n<p>En este caso, la solicitud es el comienzo de todo. Revisemos sus par\u00e1metros de configuraci\u00f3n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/cf93a09a10ed9aebaae2c10b93619658.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAqu\u00ed todo es bastante trivial, excepto por StandartHttpContextMap, que es un servicio que permite enviar y recibir solicitudes. Puedes ver m\u00e1s detalles, incluso con ejemplos \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/ddewaele.github.io\/http-communication-with-apache-nifi\/\">aqu\u00ed<\/a><\/noindex><\/p>\n<p>A continuaci\u00f3n, veamos los par\u00e1metros de configuraci\u00f3n del cuadrado ReplaceText. Es importante prestar atenci\u00f3n a ReplacementValue, que es lo que se devolver\u00e1 al usuario como respuesta. En settings se puede ajustar el nivel de registro, los registros se pueden ver en {d\u00f3nde descomprimimos nifi}\/nifi-1.9.2\/logs, donde tambi\u00e9n hay par\u00e1metros failure\/success; basado en estos par\u00e1metros se puede regular el proceso en general. Es decir, en caso de un procesamiento exitoso del texto, se llamar\u00e1 al proceso de env\u00edo de respuesta al usuario; de lo contrario, simplemente registraremos el proceso no exitoso. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/97341fd7f6ea34a219a16c2c732a8062.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En las propiedades de HandleHttpResponse no hay nada particularmente interesante excepto el estado en caso de que la respuesta se genere con \u00e9xito. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/6082c84f81274927fdfbd20378cc252c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con la solicitud y respuesta aclaradas, pasemos a la obtenci\u00f3n del archivo y su colocaci\u00f3n en el servidor FTP. FetchFile recibe el archivo seg\u00fan la ruta especificada en la configuraci\u00f3n y lo pasa al siguiente proceso. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/d1368879e13a223404a53ab623ae4079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Y luego el cuadrado PutSftp coloca el archivo en el almacenamiento de archivos. Los par\u00e1metros de configuraci\u00f3n se pueden ver a continuaci\u00f3n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/c22648f39bb0ad4e7209911e614d3edf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es importante tener en cuenta que cada cuadrado es un proceso separado que debe ser iniciado. Hemos considerado el ejemplo m\u00e1s simple que no requiere ninguna personalizaci\u00f3n complicada. A continuaci\u00f3n, examinaremos un proceso un poco m\u00e1s complejo, donde escribiremos un poco en Groovy. <\/p>\n<p><\/p>\n<h3 id=\"bolee-slozhnyy-primer\">Un ejemplo m\u00e1s complicado<\/h3>\n<p><\/p>\n<p>El servicio de transmisi\u00f3n de datos al consumidor result\u00f3 ser un poco m\u00e1s complicado debido al proceso de modificaci\u00f3n del mensaje SOAP. El proceso general se presenta en la figura a continuaci\u00f3n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/c48aa08c030cc252f9e53ce877329701.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqu\u00ed la idea tampoco es muy compleja: recibimos una solicitud del consumidor, indicando que necesita datos, enviamos una respuesta confirmando que hemos recibido el mensaje, iniciamos el proceso de obtenci\u00f3n del archivo de respuesta, luego lo editamos seg\u00fan una l\u00f3gica determinada y, despu\u00e9s, transferimos el archivo al consumidor en forma de mensaje SOAP al servidor. <\/p>\n<p><\/p>\n<p>Creo que no es necesario describir de nuevo los cuadrados que vimos arriba; pasemos directamente a los nuevos. Si necesitas editar alg\u00fan archivo y los cuadrados comunes como ReplaceText no son adecuados, tendr\u00e1s que escribir tu propio script. Esto se puede hacer con el cuadrado ExecuteGroovyScript. Sus configuraciones se presentan a continuaci\u00f3n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/42d6691cf608b1620774426eae7b7027.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hay dos opciones para cargar el script en este cuadrado. La primera es mediante la carga de un archivo con el script. La segunda es insertando el script en scriptBody. Hasta donde s\u00e9, el cuadrado executeScript admite varios lenguajes de programaci\u00f3n, uno de ellos es groovy. Decepcionar\u00e9 a los desarrolladores de Java: no se pueden escribir scripts en estos cuadrados en Java. Para aquellos que realmente lo desean, deber\u00e1n crear su propio cuadrado personalizado y integrarlo en el sistema NIFI. Todo este proceso implica un considerable esfuerzo, del cual no nos ocuparemos en este art\u00edculo. Eleg\u00ed el lenguaje groovy. A continuaci\u00f3n, se presenta un script de prueba que simplemente actualiza incrementalmente el id en el mensaje SOAP. Es importante destacar que toma el archivo de flowFile, lo actualiza y no hay que olvidar devolverlo actualizado. Tambi\u00e9n es importante mencionar que no todas las bibliotecas est\u00e1n conectadas. Puede suceder que a\u00fan as\u00ed tenga que importar una de las librer\u00edas. Otro inconveniente es que depurar el script en este cuadrado es bastante complicado. Existe una forma de conectarse a la JVM de NIFI y comenzar el proceso de depuraci\u00f3n. Personalmente, ejecut\u00e9 una aplicaci\u00f3n localmente e imit\u00e9 la recepci\u00f3n de un archivo de sesi\u00f3n. Tambi\u00e9n realic\u00e9 la depuraci\u00f3n localmente. Los errores que surgen al cargar el script son bastante f\u00e1ciles de buscar en Google y NIFI los escribe en el registro.<\/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 durant la procesi\u00f3n de validate.groovy\", e)\n    session.transfer(flowFile, REL_FAILURE)\n}<\/code><\/pre>\n<p><\/p>\n<p>De hecho, aqu\u00ed termina la personalizaci\u00f3n del cuadrado. Luego, el archivo actualizado se env\u00eda al cuadrado que se encarga de enviar el archivo al servidor. A continuaci\u00f3n, se presentan las configuraciones de este cuadrado.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/706c53d8deaf3d1ef47bd337e639197a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Describimos el m\u00e9todo por el cual se transmitir\u00e1 el mensaje SOAP. Especificamos a d\u00f3nde. A continuaci\u00f3n, hay que indicar que se trata de un mensaje SOAP.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Apache NIFI: Resumen breve de las capacidades en la pr\u00e1ctica\" src=\"\/wp-content\/uploads\/2019\/08\/7206bc2a1c66a0204c0589daf35fd328.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Agregamos varias propiedades como host y acci\u00f3n (soapAction). Guardamos, comprobamos. Para m\u00e1s detalles sobre c\u00f3mo enviar solicitudes SOAP, puedes consultar. <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/49457764\/nifi-how-to-use-invokehttp-processor-with-soap\/49565048\">aqu\u00ed<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Hemos revisado varias opciones de uso de procesos NIFI. C\u00f3mo interact\u00faan y cu\u00e1l es su beneficio real. Los ejemplos considerados son pruebas y difieren un poco de lo que realmente se utiliza en producci\u00f3n. Espero que este art\u00edculo sea algo \u00fatil para los desarrolladores. Gracias por su atenci\u00f3n. Si hay alguna pregunta, no duden en preguntar. Intentar\u00e9 responder.<\/p>\n<p>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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 Breve rese\u00f1a de sus capacidades en la pr\u00e1ctica | ProHoster","description":"Introducci\u00f3n. Resulta que en mi trabajo actual tuve que familiarizarme con esta tecnolog\u00eda. Comenzar\u00e9 con una breve historia.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/apache-nifi-kratkij-obzor-vozmozhnostej-na-praktike","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/37567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=37567"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37567\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/28196"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=37567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=37567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=37567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}