Cómo funciona Apache Nifi: navegue en su flujo de datos, no se ahogue en él

Introducción

Eso es un flujo de agua loco. Al igual que su aplicación trata con un flujo de datos loco. Enrutar datos de un almacenamiento a otro, aplicar reglas de validación y abordar cuestiones de gobernanza de datos, la confiabilidad en un ecosistema de Big Data es difícil de lograr si lo hace todo usted mismo.

Buenas noticias, no tiene que crear su solución de flujo de datos desde cero: ¡Apache NiFi lo respalda!

Al final de este artículo, será un experto en NiFi, listo para construir su canal de datos.

Lo que cubriré en este artículo:

  • Qué es Apache NiFi, en qué situación debe usarlo y cuáles son los conceptos clave para comprender en NiFi.

Lo que no cubriré:

  • Instalación, implementación, monitoreo, seguridad y administración de un clúster NiFi.

Para su comodidad, aquí está la tabla de contenido, siéntase libre de ir directamente a donde lo lleve su curiosidad. Si es la primera vez que utiliza NiFi, se recomienda leer este artículo en el orden indicado.

Tabla de contenidos

  • I - ¿Qué es Apache NiFi?

    - Definición de NiFi

    - ¿Por qué usar NiFi?

  • II - Apache Nifi bajo el microscopio

    - FlowFile

    - procesador

    - Grupo de procesos

    - Conexión

    - Controlador de flujo

  • Conclusión y llamado a la acción

¿Qué es Apache NiFi?

En el sitio web del proyecto Apache Nifi, puede encontrar la siguiente definición:

Un sistema fácil de usar, potente y confiable para procesar y distribuir datos.

Analicemos las palabras clave allí.

Definición de NiFi

Procesar y distribuir datos

Esa es la esencia de Nifi. Mueve los datos por los sistemas y le brinda herramientas para procesar estos datos.

Nifi puede trabajar con una gran variedad de fuentes y formatos de datos. Usted toma datos de una fuente, los transforma y los envía a un receptor de datos diferente.

Fácil de usar

Procesadores - las cajas - enlazadas por conectores - las flechas crean un flujo . N iFi ofrece una experiencia de programación basada en flujo.

Nifi hace posible comprender, de un vistazo, un conjunto de operaciones de flujo de datos cuya implementación requeriría cientos de líneas de código fuente.

Considere la tubería a continuación:

Para traducir el flujo de datos anterior en NiFi, vaya a la interfaz gráfica de usuario de NiFi, arrastre y suelte tres componentes en el lienzo y

Eso es. Se necesitan dos minutos para construir.

Ahora, si escribe código para hacer lo mismo, es probable que tenga varios cientos de líneas para lograr un resultado similar.

No captura la esencia de la canalización a través del código como lo hace con un enfoque basado en flujo. Nifi es más expresivo para construir una canalización de datos; está diseñado para hacer eso .

Poderoso

NiFi proporciona muchos procesadoresfuera de la caja (293 en Nifi 1.9.2). Estás sobre los hombros de un gigante. Esos procesadores estándar manejan la gran mayoría de los casos de uso que puede encontrar.

NiFi es muy concurrente, sin embargo, sus componentes internos encapsulan la complejidad asociada. Los procesadores le ofrecen una abstracción de alto nivel que oculta la complejidad inherente de la programación paralela. Los procesadores se ejecutan simultáneamente y puede abarcar varios subprocesos de un procesador para hacer frente a la carga.

La concurrencia es una caja informática de Pandora que no desea abrir. NiFi protege convenientemente al constructor de tuberías de las complejidades de la concurrencia.

De confianza

La teoría que respalda a NiFi no es nueva; tiene sólidos anclajes teóricos. Es similar a modelos como SEDA.

Para un sistema de flujo de datos, uno de los principales temas a abordar es la confiabilidad. Desea asegurarse de que los datos enviados a algún lugar se reciban de manera efectiva.

NiFi logra un alto nivel de confiabilidad a través de múltiples mecanismos que realizan un seguimiento del estado del sistema en cualquier momento. Esos mecanismos se pueden configurar para que pueda realizar las compensaciones adecuadas entre la latencia y el rendimiento que requieren sus aplicaciones.

NiFi rastrea el historial de cada dato con sus características de linaje y procedencia. Permite saber qué transformación ocurre en cada dato.

La solución de linaje de datos propuesta por Apache Nifi demuestra ser una excelente herramienta para auditar una canalización de datos. Las características del linaje de datos son esenciales para reforzar la confianza en los grandes datos y los sistemas de inteligencia artificial en un contexto en el que actores transnacionales como la Unión Europea proponen pautas para respaldar el procesamiento de datos preciso.

¿Por qué usar Nifi?

Primero, quiero dejar en claro que no estoy aquí para evangelizar NiFi. Mi objetivo es brindarle suficientes elementos para que pueda tomar una decisión informada sobre la mejor manera de construir su canal de datos.

Es útil tener en cuenta las cuatro V del big data al dimensionar su solución.

  • Volumen : ¿a qué escala opera? En orden de magnitud, ¿está más cerca de unos pocos GigaBytes o cientos de PetaBytes?
  • Variedad : ¿cuántas fuentes de datos tiene? ¿Están estructurados sus datos? En caso afirmativo, ¿el esquema varía con frecuencia?
  • Velocidad : ¿Cuál es la frecuencia de los eventos que procesa? ¿Son pagos con tarjeta de crédito? ¿Es un informe de rendimiento diario enviado por un dispositivo de IoT?
  • Veracidad : ¿puedes confiar en los datos? Alternativamente, ¿necesita aplicar varias operaciones de limpieza antes de manipularlo?

NiFi ingiere sin problemas datos de múltiples fuentes de datos y proporciona mecanismos para manejar diferentes esquemas en los datos. Por lo tanto, brilla cuando hay una gran variedad de datos.

Nifi es particularmente valioso si los datos son de baja veracidad . Dado que proporciona múltiples procesadores para limpiar y formatear los datos.

Con sus opciones de configuración, Nifi puede abordar una amplia gama de situaciones de volumen / velocidad.

Una lista cada vez mayor de aplicaciones para soluciones de enrutamiento de datos

Las nuevas regulaciones, el auge del Internet de las cosas y el flujo de datos que genera enfatizan la relevancia de herramientas como Apache NiFi.

  • Los microservicios están de moda. En esos servicios débilmente acoplados, los datos son el contrato entre los servicios. Nifi es una forma sólida de enrutar datos entre esos servicios.
  • Internet de las Cosastrae una multitud de datos a la nube. La ingestión y validación de datos desde el borde a la nube plantea muchos desafíos nuevos que NiFi puede abordar de manera eficiente (principalmente a través de MiniFi, proyecto NiFi para dispositivos de borde)
  • Se establecen nuevas pautas y regulaciones para reajustar la economía de Big Data. En este contexto de aumento de la supervisión, es vital que las empresas tengan una visión general clara de su flujo de datos. El linaje de datos NiFi, por ejemplo, puede ser útil en el camino hacia el cumplimiento de las regulaciones.

Cerrar la brecha entre los expertos en big data y los demás

Como puede ver en la interfaz de usuario, un flujo de datos expresado en NiFi es excelente para comunicarse sobre su canalización de datos. Puede ayudar a los miembros de su organización a conocer mejor lo que sucede en la canalización de datos.

  • Un analista está preguntando por qué estos datos llegan aquí de esa manera. Siéntense juntos y caminen a través del flujo. En cinco minutos, le brinda a alguien una sólida comprensión de la canalización Extract Transform and Load -ETL- .
  • ¿Quiere recibir comentarios de sus compañeros sobre un nuevo flujo de gestión de errores que creó? NiFi toma una decisión de diseño para considerar las rutas de error tan probables como resultados válidos. Espere que la revisión de flujo sea más corta que una revisión de código tradicional.

¿Deberías usarlo? ¿Si no talvez?

NiFi se marca a sí mismo como fácil de usar. Aún así, es una plataforma de flujo de datos empresarial. Ofrece un conjunto completo de funciones de las que es posible que solo necesite un subconjunto reducido. Agregar una nueva herramienta a la pila no es benigno.

Si está comenzando desde cero y administra algunos datos de fuentes de datos confiables, es mejor que configure su canalización Extract Transform and Load - ETL . Tal vez todo lo que necesita sea una captura de datos modificados de una base de datos y algunos scripts de preparación de datos.

Por otro lado, si trabaja en un entorno con soluciones de big data existentes en uso (ya sea para almacenamiento, procesamiento o mensajería), NiFi se integra bien con ellas y es más probable que sea una ganancia rápida. Puede aprovechar los conectores listos para usar con esas otras soluciones de Big Data.

Es fácil entusiasmarse con las nuevas soluciones. Enumere sus requisitos y elija la solución que responda a sus necesidades de la manera más sencilla posible .

Ahora que hemos visto la imagen muy alta de Apache NiFi, echamos un vistazo a sus conceptos clave y analizamos sus aspectos internos.

Apache Nifi bajo el microscopio

“NiFi es programación de cajas y flechas” puede estar bien para comunicar el panorama general. Sin embargo, si tiene que operar con NiFi, es posible que desee comprender un poco más sobre cómo funciona.

En esta segunda parte, explico los conceptos críticos de Apache NiFi con esquemas. Este modelo de caja negra no será una caja negra para ti después.

Desembalaje de Apache NiFi

Cuando inicia NiFi, aterriza en su interfaz web. La interfaz de usuario web es el modelo en el que diseña y controla su canal de datos.

En Nifi, ensamblas procesadores unidos por conexiones . En el flujo de datos de muestra presentado anteriormente, hay tres procesadores.

La interfaz de usuario del lienzo NiFi es el marco en el que evoluciona el constructor de tuberías.

Entender la terminología de Nifi

Para expresar su flujo de datos en Nifi, primero debe dominar su idioma. No se preocupe, algunos términos son suficientes para comprender el concepto que hay detrás.

Las cajas negras se denominan procesadores e intercambian trozos de información denominados FlowFiles a través de colas que se denominan conexiones . Finalmente, FlowFile Controller es responsable de administrar los recursos entre esos componentes.

Echemos un vistazo a cómo funciona esto bajo el capó.

FlowFile

En NiFi, el FlowFilees el paquete de información que se mueve a través de los procesadores de la tubería.

Un FlowFile viene en dos partes:

  • Atributos , que son pares clave / valor. Por ejemplo, el nombre del archivo, la ruta del archivo y un identificador único son atributos estándar.
  • Contenido , una referencia al flujo de bytes componen el contenido de FlowFile.

FlowFile no contiene los datos en sí. Eso limitaría severamente el rendimiento de la tubería.

En cambio, un FlowFile contiene un puntero que hace referencia a los datos almacenados en algún lugar del almacenamiento local. Este lugar se llama Depósito de contenido .

Para acceder al contenido, FlowFile reclama el recurso del repositorio de contenido. El último mantiene un seguimiento del desplazamiento exacto del disco desde donde está el contenido y lo transmite de nuevo al FlowFile.

No todos los procesadores necesitan acceder al contenido del FlowFile para realizar sus operaciones; por ejemplo, agregar el contenido de dos FlowFiles no requiere cargar su contenido en la memoria.

Cuando un procesador modifica el contenido de un FlowFile, se conservan los datos anteriores. NiFi copia en escritura, modifica el contenido mientras lo copia en una nueva ubicación. La información original se deja intacta en el repositorio de contenido.

Ejemplo

Considere un procesador que comprime el contenido de un FlowFile. El contenido original permanece en el repositorio de contenido y se crea una nueva entrada para el contenido comprimido.

El repositorio de contenido finalmente devuelve la referencia al contenido comprimido. El FlowFile se actualiza para apuntar a los datos comprimidos.

El siguiente dibujo resume el ejemplo con un procesador que comprime el contenido de FlowFiles.

Fiabilidad

NiFi afirma ser confiable, ¿cómo es en la práctica?Los atributos de todos los FlowFiles actualmente en uso, así como la referencia a su contenido, se almacenan en el FlowFile Repository.

En cada paso de la canalización, una modificación a un Flowfile se registra primero en el Repositorio de FlowFile, en un registro de escritura anticipada, antes de que se realice.

Para cada FlowFile que existe actualmente en el sistema, el repositorio de FlowFile almacena:

  • Los atributos de FlowFile
  • Un puntero al contenido del FlowFile ubicado en el repositorio de FlowFile
  • El estado del FlowFile. Por ejemplo: a qué cola pertenece el Flowfile en este instante.

El repositorio FlowFile nos da el estado más actual del flujo; por lo tanto, es una herramienta poderosa para recuperarse de una interrupción.

NiFi proporciona otra herramienta para rastrear el historial completo de todos los FlowFiles en el flujo: el Repositorio de Procedencia.

Repositorio de procedencia

Cada vez que se modifica un FlowFile, NiFi toma una instantánea del FlowFile y su contexto en este punto. El nombre de esta instantánea en NiFi es un evento de procedencia . El repositorio de procedencia registra los eventos de procedencia.

La procedencia nos permite rastrear el linaje de los datos y construir la cadena de custodia completa para cada pieza de información procesada en NiFi.

Además de ofrecer el linaje completo de los datos, el repositorio de procedencia también ofrece reproducir los datos desde cualquier momento.

Espera, ¿cuál es la diferencia entre FlowFile Repository y Provenance Repository?

La idea detrás de FlowFile Repository y Provenance Repository es bastante similar, pero no abordan el mismo problema.

  • El repositorio de FlowFile es un registro que contiene solo el estado más reciente de los FlowFiles en uso en el sistema. Es la imagen más reciente del flujo y permite recuperarse rápidamente de una interrupción.
  • El repositorio de procedencia, por otro lado, es más exhaustivo ya que rastrea el ciclo de vida completo de cada FlowFile que ha estado en el flujo.

Si solo tiene la imagen más reciente del sistema con el repositorio de FlowFile, el repositorio de procedencia le brinda una colección de fotos: un video . Puede rebobinar a cualquier momento del pasado, investigar los datos y reproducir operaciones de un momento determinado. Proporciona un linaje completo de los datos.

Procesador FlowFile

Un procesador es una caja negra que realiza una operación. Los procesadores tienen acceso a los atributos y al contenido del FlowFile para realizar todo tipo de acciones. Le permiten realizar muchas operaciones en el ingreso de datos, tareas estándar de transformación / validación de datos y guardar estos datos en varios receptores de datos.

NiFi viene con muchos procesadores cuando lo instalas. Si no encuentra el perfecto para su caso de uso, aún es posible construir su propio procesador. Escribir procesadores personalizados está fuera del alcance de esta publicación de blog.

Los procesadores son abstracciones de alto nivel que cumplen una tarea. Esta abstracción es muy conveniente porque protege al constructor de la tubería de las dificultades inherentes de la programación concurrente y la implementación de mecanismos de manejo de errores.

Los procesadores exponen una interfaz con múltiples ajustes de configuración para ajustar su comportamiento.

Las propiedades de esos procesadores son el último vínculo entre NiFi y la realidad empresarial de los requisitos de su aplicación.

El diablo está en los detalles, y los constructores de oleoductos pasan la mayor parte de su tiempo ajustando esas propiedades para que coincidan con el comportamiento esperado.

Escalada

Para cada procesador, puede especificar la cantidad de tareas simultáneas que desea ejecutar simultáneamente. De esta manera, el controlador de flujo asigna más recursos a este procesador, aumentando su rendimiento. Los procesadores comparten hilos. Si un procesador solicita más subprocesos, otros procesadores tienen menos subprocesos disponibles para ejecutar. Los detalles sobre cómo el controlador de flujo asigna subprocesos están disponibles aquí.

Escala horizontal. Otra forma de escalar es aumentar la cantidad de nodos en su clúster NiFi. Los servidores en clúster permiten aumentar su capacidad de procesamiento utilizando hardware básico.

Grupo de proceso

Este es sencillo ahora que hemos visto qué son los procesadores.

Un grupo de procesadores junto con sus conexiones pueden formar un grupo de procesos. Agrega un puerto de entrada y un puerto de salida para que pueda recibir y enviar datos.

Los grupos de procesadores son una manera fácil de crear nuevos procesadores basados ​​en los existentes.

Conexiones

Las conexiones son las colas entre procesadores. Estas colas permiten que los procesadores interactúen a diferentes velocidades. Las conexiones pueden tener diferentes capacidades, ya que existen diferentes tamaños de tuberías de agua.

Debido a que los procesadores consumen y producen datos a diferentes velocidades según las operaciones que realizan, las conexiones actúan como búferes de FlowFiles.

Hay un límite en la cantidad de datos que puede haber en la conexión. Del mismo modo, cuando su tubería de agua está llena, ya no puede agregar agua o se desborda.

En NiFi puede establecer límites en la cantidad de FlowFiles y el tamaño de su contenido agregado que pasa por las conexiones.

¿Qué sucede cuando envía más datos de los que la conexión puede manejar?

Si el número de FlowFiles o la cantidad de datos supera el umbral definido, se aplica una contrapresión . El controlador de flujo no programará el procesador anterior para que se ejecute nuevamente hasta que haya espacio en la cola.

Digamos que tiene un límite de 10 000 FlowFiles entre dos procesadores. En algún momento, la conexión tiene 7 000 elementos. Está bien, ya que el límite es 10 000. P1 aún puede enviar datos a través de la conexión a P2 .

Ahora digamos que el procesador uno envía 4000 nuevos FlowFiles a la conexión.

7 0000 + 4000 = 11000 → Superamos el umbral de conexión de 10000 FlowFiles.

Los límites son límites suaves, lo que significa que pueden superarse. Sin embargo, una vez que lo estén, el procesador anterior, P1 , no se programará hasta que el conector vuelva a estar por debajo de su valor de umbral: 10 000 FlowFiles.

Este ejemplo simplificado ofrece un panorama general de cómo funciona la contrapresión.

Desea configurar los umbrales de conexión apropiados para el volumen y la velocidad de los datos a manejar. Tenga en cuenta el Four Vs .

La idea de exceder un límite puede parecer extraña. Cuando el número de FlowFiles o los datos asociados superan el umbral, se activa un mecanismo de intercambio.

Para otro ejemplo de contrapresión, este hilo de correo puede ayudar.

Priorizar FlowFiles

Los conectores en NiFi son altamente configurables. Puede elegir cómo priorizar FlowFiles en la cola para decidir cuál procesar a continuación.

Entre las posibilidades disponibles, se encuentra, por ejemplo, la orden Primero en entrar, primero en salir - FIFO. Sin embargo, incluso puede usar un atributo de su elección del FlowFile para priorizar los paquetes entrantes.

Controlador de flujo

El controlador de flujo es el pegamento que une todo. Asigna y administra subprocesos para procesadores. Es lo que ejecuta el flujo de datos.

Además, el controlador de flujo permite agregar servicios de controlador.

Estos servicios facilitan la gestión de recursos compartidos como conexiones de bases de datos o credenciales de proveedores de servicios en la nube. Los servicios de controlador son demonios. Se ejecutan en segundo plano y proporcionan configuración, recursos y parámetros para que los procesadores los ejecuten.

Por ejemplo, puede utilizar un servicio de proveedor de credenciales de AWS para que sus servicios puedan interactuar con los buckets de S3 sin tener que preocuparse por las credenciales en el nivel del procesador.

Al igual que con los procesadores, hay una multitud de servicios de controlador disponibles de fábrica.

Puede consultar este artículo para obtener más contenido sobre los servicios del controlador.

Conclusión y llamado a la acción

En el transcurso de este artículo, discutimos NiFi, una solución de flujo de datos empresarial. Ahora tiene una sólida comprensión de lo que hace NiFi y cómo puede aprovechar sus funciones de enrutamiento de datos para sus aplicaciones.

Si estás leyendo esto, ¡felicidades! Ahora sabe más sobre NiFi que el 99,99% de la población mundial.

La práctica hace la perfección. Dominas todos los conceptos necesarios para comenzar a construir tu propia canalización. Hazlo simple; haz que funcione primero.

Aquí hay una lista de recursos interesantes que recopilé además de mi experiencia laboral para escribir este artículo.

Recursos

La fotografía más grande

Debido a que el diseño de la canalización de datos en un ecosistema complejo requiere competencia en múltiples áreas, recomiendo encarecidamente el libro Designing Data-Intensive Applicationsde Martin Kleppmann. Cubre los fundamentos.

  • Una hoja de trucos con todas las referencias citadas en el libro de Martin está disponible en su repositorio de Github.

Esta hoja de trucos es un excelente lugar para comenzar si ya sabe qué tipo de tema le gustaría estudiar en profundidad y desea encontrar materiales de calidad.

Alternativas a Apache Nifi

Existen otras soluciones de flujo de datos.

Fuente abierta:

  • Streamsets es similar a NiFi; una buena comparación está disponible en este blog

La mayoría de los proveedores de nube existentes ofrecen soluciones de flujo de datos. Esas soluciones se integran fácilmente con otros productos que usa de este proveedor de nube. Al mismo tiempo, lo vincula sólidamente con un proveedor en particular.

  • Azure Data Factory, una solución de Microsoft
  • IBM tiene su InfoSphere DataStage
  • Amazon propone una herramienta llamada Data Pipeline
  • Google ofrece su Dataflow
  • Alibaba Cloud presenta un servicio DataWorks con características similares

Recursos relacionados con NiFi

  • La documentación oficial de Nifi y especialmente la sección Nifi In-depth son minas de oro.
  • Registrarse en la lista de correo de usuarios de Nifi también es una excelente manera de estar informado; por ejemplo, esta conversación explica la contrapresión.
  • Hortonworks, un gran proveedor de soluciones de datos, tiene una comunidad web llena de recursos interesantes y cómo-a para Apache Nifi.

    - Este artículo profundiza en los conectores, el uso del montón y la contrapresión.

    - Este comparte las mejores prácticas de dimensionamiento al implementar un clúster NiFi.

  • El blog de NiFi destila una gran cantidad de información sobre los patrones de uso de NiFi, así como consejos sobre cómo construir tuberías.
  • Explicación del patrón de verificación de reclamos
  • La teoría detrás de Apache Nifi no es nueva, Seda a la que se hace referencia en Nifi Doc es extremadamente relevante

    - Matt Welsh. Berkeley. SEDA: Una arquitectura para servicios de Internet escalables y bien acondicionados [en línea]. Recuperado: 21 de abril de 2019, de //www.mdw.la/papers/seda-sosp01.pdf