Running a cluster with Apache Nifi and Docker

Running a cluster with Apache Nifi and Docker

Sobre Apache NiFi hemos hablado mucho, ya sea en ejemplos de #DataStreaming ejecutados en RealTime o bien, en la construcción de Data Pipeline más simples.

En todos los casos anteriores, nuestro Apache NiFi, era “Single node”. El post de hoy es lanzarlo mediante su opción de Cluster y mediante Docker. Veamos:

Preparando el docker-compose.yml

Lo primero será construir nuestro “docker-compose.yml” con todo aquello requerido. Como por ejemplo añadiendo un ZooKeeper para la gestión de la información entre los nodos de forma automatizada y, luego, la configuración de Apache NiFi.

version: "3"
services:
  zookeeper:
    hostname: zookeeper
    container_name: zookeeper
    image: 'bitnami/zookeeper:latest'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  nifi:
    image: apache/nifi:latest
    ports:
      - 8080 # Unsecured HTTP Web Port
    environment:
      - NIFI_WEB_HTTP_PORT=8080
      - NIFI_CLUSTER_IS_NODE=true
      - NIFI_CLUSTER_NODE_PROTOCOL_PORT=8082
      - NIFI_ZK_CONNECT_STRING=zookeeper:2181
      - NIFI_ELECTION_MAX_WAIT=1 min

Podemos ver que contaremos con un ZooKeeper, como decíamos, y que éste se lanzará sin publicación de IP y será un recurso compartido entre los nodos de Apache NiFi. Las comunicaciones entre nodos y ZooKeeper se realizarán por el puerto 2181 de forma interna tal y como se especifica en: NIFI_ZK_CONNECT_STRING=zookeeper:2181.

Por lo que se refiere a Apache NiFi, tendrá el puerto 8082 como puerto de Cluster y para el Dashboard el 8080. Para éste último, el Dashboard, no le haremos el matching de puertos, será Docker quien automáticamente le asigne un puerto específico para cada nodo.

Uno de los puntos más interesante e importante es la confiración de elección de Master: NIFI_ELECTION_MAX_WAIT=1 min ya que, durante el proceso de arranque, el Cluster de Apache NiFi deberá elegir cual de los nodos es el “PRIMARY & COORDINATOR”.

Lanzando el Cluster de Apache Nifi en Docker

Una vez realizadas todas las configuraciones en el fichero “docker-compose.yml” procederemos a ejecutarlo mediante:

docker-compose up --scale nifi=2 -d

En caso que nos tengamos las imágenes del ZooKeeper o de Apache NiFi, se descargaran automáticamente y, en pocos minutos, tendremos el servicio completamente operativo. Anteriormente fijamos el periodo de elección de Apache NiFi en un minuto, así que después de un minuto como máximo, podremos acceder a cualquiera de los 2 nodos.

Vía command de “docker ps” o “docker-composite ps”, podremos observar el nuevo mapeo de puertos para poder acceder al Dashboard. Por ejemplo en nuestro caso fueron el 32768 y el 32769. Abrimos un navegador y vamos a la URL: localhost:32768/nifi/

Apache NiFi Dashboard

Seguramente, depende lo rápido que seamos con nuestro navegador, podremos ver por pantalla el proceso de elección del Master y si contamos con la ayuda de Portainer, entonces tendremos información detallada del nuevo Stack lanzado:

Portainer & Apache NiFi Cluster

Si queremos lanzar más nodos, simplemente modificaremos el valor de “–scale” cuando ejecutemos el “docker-compose.yml”, por ejemplo:

docker-compose up --scale nifi=4 -d

Autor: Joakim Vivas

comments powered by Disqus