Stack Apache Kafka + Zookeeper ejecutando Data Pipeline en Cluster de Apache NiFi

Stack Apache Kafka + Zookeeper ejecutando Data Pipeline en Cluster de Apache NiFi

Hoy venimos con un artículo de lujo en el que construiremos un Stack entero con:

Bien, tanto de Apache Kafka como de Apache NiFi hemos hablado un montón, pero hoy el artículo está totalmente focalizado a tenerlo como chuleta para lanzar un Docker Compose con un Stack totalmente funcional y en pocos minutos.

Docker Compose para un Stack de “Apache Kafka + Zookeeper + Apache NiFi”

Para controlar, tanto Apache Kafka como la funcionalidad del Cluster de Apache NiFi, utilizaremos Apache Zookeeper.

Aquí podéis encontrar el fichero de Docker Compose, aunque, a continuación vamos a explicarlo:

version: '2'

services:
  zookeeper:
    image: 'bitnami/zookeeper:3'
    ports:
      - '2181:2181'
    volumes:
      - 'zookeeper_data:/bitnami'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:2'
    ports:
      - '9092:9092'
    volumes:
      - 'kafka_data:/bitnami'
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper
  nifi:
    image: apache/nifi:latest
    ports:
      - 8080 # Unsecured HTTP Web Port
    volumes:
      - 'apache-nifi_data:/apache/nifi'
    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
    depends_on:
      - zookeeper
  kafka-manager:
    image: hlebalbau/kafka-manager:stable
    ports:
      - '9000:9000'
    environment:
      - ZK_HOSTS=zookeeper:2181
    depends_on:
      - zookeeper
    volumes:
      - 'kafka-manager_data:/hlebalbau/kafka-manager'
  mongo:
    image: mongo:latest
    ports:
      - '27017:27017'
    volumes:
      - 'mongo_data:/mongo'

volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local
  apache-nifi_data:
    driver: local
  kafka-manager_data:
    driver: local
  mongo_data:
    driver: local

Configuración de Apache Kafka + Zookeeper

Para Apache Zookeeper utilizaremos la imagen de bitnami/zookeeper:3:

zookeeper:
  image: 'bitnami/zookeeper:3'
  ports:
    - '2181:2181'
  volumes:
    - 'zookeeper_data:/bitnami'
  environment:
    - ALLOW_ANONYMOUS_LOGIN=yes

Y para Apache Kafka la de bitnami/kafka:2 y como detalle, pondremos en environment la relación con Zookeeper KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181y su dependencia también con Zookeeper:

kafka:
  image: 'bitnami/kafka:2'
  ports:
    - '9092:9092'
  volumes:
    - 'kafka_data:/bitnami'
  environment:
    - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
    - ALLOW_PLAINTEXT_LISTENER=yes
  depends_on:
    - zookeeper

Si todo va bien, cuando el docker-compose termine, tendremos unos cuantos contenedores en marcha, como:

Stack Kafka, Portainer

Kafka Manager, gestionando “Brokers” y “Topics”

Kafka Manager es una interesante herramienta para la gestión de un Cluster de Apache Kafka. Por ejemplo, podremos gestionar tanto Brokers como Topics.

Kafka Manager, Cluster

Por ejemplo, podremos tener una monitorización en tiempo real de volúmenes, dentro de los Topics o Brokers podremos ver qué se está consumiendo como, redefinir particiones en caso de necesidad, etc…

Kafka Manager, Topic List

Review

Para Apache NiFi, mi recomendación, es seguir el post de La Biblia de Apache NiFi ya que es una herramienta con un sin fín de posibilidades y, para poder montarlo en Cluster, es interesante otro artículo.

Igualmente, tenemos otros artículos que nos pueden ser de utilidad en caso de querer ejemplos, como es por ejemplo la Pipeline de Twitter:

Apache NiFi, Get Twitter

O bien, el caso Real de ING Bank que utiliza la plataforma para capturar las transacciones online que están realizando sus clientes, rápidamente, para que estén disponibles para sus equipos de Customer Support:

Apache NiFi, ING Data Model Conceptual

En definitiva, tener un Stack con “Apache Kafka + Zookeeper + Apache NiFi” puede ser de mucha utilidad para nuestro día a día.

Autor: Joakim Vivas

comments powered by Disqus