De manera que en el Lienzo principal solo veamos las cajas de los Process Group y quizás los puertos de entrada de ellos si tenemos ingesta por parte de MiniFi u otros Clústers de NiFi.
Una vez que creo mi Process Group y estoy dentro, cuando configuro Servicios de Control, su alcance es solo este Process Group. Es decir, todos los Processor que estan dentro de este grupo, pueden ver estos servicios, como por ejemplo, una conexión a una base de datos.
Para hacer esto, sobre el lienzo, llamo al menú contextual (botón secundario de pad o mouse) y aparece este menú con la opción de configurar.
Una vez en esta parte, vamos a configurar una conexión a una base de datos. En nuestro ejemplo, será contra una base de datos Oracle.
Para ello, seleccionamos un DBCPConnectionPool.
En este componente, vamos a tener que considerar hacer algunos temas adicionales en forma manual en cada uno de los nodos del Cluster. Lo primero, es bajar desde el sitio de Oracle el Driver JDBC para la versión de base de datos requerida, y para el JDK que tengamos usando con NiFi, en mi caso, es la versión 8.
Por lo tanto, vamos a bajar e instalar en la misma locación con permisos de lectura para el usuario de NiFi en Linux el driver. En mi caso, he creado en cada equipo el path /opt/nifi/driver y le cambié al usuario NiFi como owner del directorio nifi.
Allí copié el driver ojdbc8.jar.
Luego, como punto importante, es configurar la clase del driver que debe ejecutarse para la conexión, esto es fácil de encontrar en cada documentación de cada driver que usemos. En nuestro caso con Oracle es oracle.jdbc.OracleDriver.
El URL usado para conectar a la base de datos fue:
jdbc:oracle:thin:@<URL_SERVER_DB>:1521:<ORACLE_SID>
Por último debemos agregar el usuario y password de la base de datos para poder concretar la conexión a dicha base de datos.
Una vez terminado este paso, ya podemos sobre el lienzo de nuestro proyecto comenzar a delinear el flujo, en este caso, el que vamos a usar es el ExecuteSQL.
Este procesador, va a utilizar la conexión ya configurada, y luego vamos a completar el SQL que queremos configurar. Un detalle más que podemos configurar es poner que la cantidad Máxima de filas que devuelva por Flowfile en cada AVRO de salida, sea 1. De esta manera podemos tener solo un Row por FlowFile, en caso de que se requiera procesar fila a file. En otro caso, podemos poner muchos más y hacer un procesamiento masivo por cada flowfile. Esto es muy dependiente de nuestro caso de uso y también la experiencia de desarrollar flujos sobre NiFi.
Un detalle es que cada procesor en NiFi por defecto ejecuta en todos los nodos del cluster. Para las conexiones a Base de datos, API y otras plataformas, se recomienda como mejor práctica que solo un nodo sea el que acceda. Este nodo es el denominado "Primario". Este nodo es seleccionado mediante Zookeeper y puede cambiar en cualquier instante, ya sea por temas de tráfico o porque el nodo no responde. Es por ello, que no sabemos que nodo se trata puntualmente. Una vez que cambiamos la ejecución de este procesador en solo el nodo primario, este hará la conexión y luego, debe "distribuir" los datos al resto de los nodos.
Esta distribución de los datos al resto de los nodos, sea hace balanceando la carga en la cola de salida del procesador hacia el siguiente procesor en caso de éxito.
La selección que debemos hacer, es en la estrategia de balanceo en "Load Balance Strategy", debemos seleccionar "Round Robin" que es una distribución básica a cada nodo del resto del clúster.
La salida de los datos, que vamos a observar va a ser en formato AVRO.
Este formato es un JSON comprimido y con el esquema de lectura del JSON como parte de la carga en los metadatos. Por ejemplo, en el siguiente ejemplo, podemos ver la definición que trae.
Si cambiamos la vista en NiFi de "Original" a "Formated", nos presentará el dato formateado con la lectura del esquema.
No hay comentarios.:
Publicar un comentario