Saltar al contenido

Apache Kafka · Parte 2

intermedio4 min de lectura

Apache Kafka en Docker

Configura un entorno local de Apache Kafka, ZooKeeper y Kafdrop mediante Docker Compose.

  • Apache Kafka
  • DevOps
  • Docker
Ver código del proyecto

Hoy os traigo una propuesta simple pero muy eficiente para desplegar apache kafka en nuestro entorno de desarrollo y porque no en un servidor modesto en la nube para realizar pruebas de conceptos.

Hoy voy a mostrarles como he utilizado apache kafka y docker en mi dia a dia, para validar posibles propuestas de soluciones para aplicarlas en mis trabajos relacionados con Data Engineer

Requisitos

Pues comenzemos primero es necesario comprender que existen muchas imágenes de docker que ofrecen un empaquetado de apache kafka, estas son las que he usado en mis pruebas de conceptos:

  • wurstmeister/kafka
  • confluentinc/cp-kafka
  • bitnami/kafka

Ambas son muy buenas y útiles, en nuestro caso de uso estaremos usando 🐳 bitnami/kafka

Pasos a seguir usando Docker Compose

touch .env
vim .env

DOCKER_GATEWAY_HOST=<ip_addres>
VERSION=latest

📌 al usar el comando docker compose up si en la misma carpeta se encuentra definido nuestro fichero .env de forma automatica cargara las variables de entorno definidas

En este paso crearemos nuestro docker-compose para orquestar nuestros contenedores de apache kafka y apache zookeeper.


touch docker-compose.yaml

Nuestro archivo de definición de docker-compose, está compuesto por apache zookeeper, apache kafka y como valor agregado un cliente UI llamado kafdrop

version: "3.9"
services:
  zookeeper:
    image: 'bitnami/zookeeper:${VERSION}'
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:${VERSION}'
    ports:
      - '9092:9092'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://${DOCKER_GATEWAY_HOST}:9092
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    depends_on:
      - zookeeper

  kafdrop:
    image: obsidiandynamics/kafdrop
    restart: always
    ports:
      - "9001:9000"
    environment:
      KAFKA_BROKERCONNECT: "kafka:9092"
    depends_on:
      - kafka


Las variables de entorno utilizadas para nuetro nodo de kafka describe el comportamiento que presentara el mismo.

  • KAFKA_BROKER_ID super importante esta variable ya que identifica a nuestro nodo con un valor distintivo dentro del cluster
  • KAFKA_CFG_ADVERTISED_LISTENERS permite el acceso de sistemas externos a kafka sin que se encuentren nuestra red interna de docker o local.

Luego 🛵 nuestro comando docker compose up y accedemos en nuestro navegador http:<ip_address>:9001 y podemos observar nuestra instancia de kafdrop

Salida de Docker Compose con los contenedores de Kafka, ZooKeeper y Kafdrop iniciados
Los tres servicios del entorno local iniciados con Docker Compose
Interfaz web de Kafdrop conectada a un clúster local de Apache Kafka
Kafdrop permite inspeccionar el clúster de Apache Kafka desde el navegador

En próximos tutoriales estaremos abordando temas de seguridad como el acceso mediante usuario y contraseñas, y agregaremos un caso de uso simple de un producer y un consumer.

Recursos