Saltar al contenido principal

Servicios

Estos servicios te servirán para la mayoría de los workers.

Zookeeper

Zookeeper es un servicio centralizado para coordinar aplicaciones distribuidas. Proporciona servicios de sincronización, configuración y nombrado, lo que lo hace esencial para sistemas que requieren alta disponibilidad y escalabilidad.

Propósito

Zookeeper se utiliza para gestionar la configuración y el estado de los servicios en un entorno distribuido, asegurando que todos los nodos tengan acceso a la misma información.

Características

  • Coordinación de servicios: Facilita la comunicación entre diferentes servicios en un clúster.
  • Persistencia de datos: Almacena datos de configuración de manera persistente.
  • Alta disponibilidad: Diseñado para ser tolerante a fallos y asegurar que los servicios estén siempre disponibles.

Arquitectura

Zookeeper utiliza un modelo de árbol jerárquico para almacenar datos, similar a un sistema de archivos. Los nodos en este árbol se llaman znodes, y cada uno puede contener datos y otros nodos.

Uso en Kafka

Zookeeper es fundamental para Kafka, ya que gestiona la configuración del clúster y la coordinación de los brokers. Sin Zookeeper, Kafka no puede funcionar correctamente.

Comandos útiles

  • Iniciar Zookeeper: docker-compose up zookeeper
  • Ver estado: docker exec -it <zookeeper_container_id> /opt/bitnami/zookeeper/bin/zkServer.sh status

Conclusión

Zookeeper es una herramienta esencial para la gestión de servicios distribuidos, especialmente en arquitecturas que utilizan Kafka.

Pasos a seguir

Crear una red

docker network create copan_network

Crea un directorio y coloca el docker-compose.yml

services:
zookeeper:
image: bitnami/zookeeper:3.9.1
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
ports:
- "2181:2181"
networks:
- copan_network
healthcheck:
test: ["CMD", "/opt/bitnami/zookeeper/bin/zkServer.sh", "status"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s

kafka:
image: bitnami/kafka:3.6.0
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,PLAINTEXT_HOST://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:9093
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
- ALLOW_PLAINTEXT_LISTENER=yes
ports:
- "9092:9092"
- "9093:9093"
depends_on:
zookeeper:
condition: service_healthy
networks:
- copan_network
healthcheck:
test:
[
"CMD",
"kafka-topics.sh",
"--bootstrap-server",
"localhost:9092",
"--list",
]
interval: 10s
timeout: 5s
retries: 5
start_period: 40s

mongo:
image: mongo:jammy
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- "${HOME}/.dckr/mongodb:/data/db"
ports:
- "27017:27017"
networks:
- copan_network

postgres:
image: postgres:17
environment:
POSTGRES_USER: YOUR_DB_USER
POSTGRES_PASSWORD: YOUR_DB_PASSWORD
POSTGRES_DB: YOUR_DB
volumes:
- "${HOME}/.dckr/postgres:/var/lib/postgresql/data"
ports:
- "5432:5432"
networks:
- copan_network

kafka-ui:
image: provectuslabs/kafka-ui:latest
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
- KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
ports:
- "8081:8080"
depends_on:
zookeeper:
condition: service_healthy
kafka:
condition: service_healthy
networks:
- copan_network

redis:
image: redis:7.2.4
ports:
- "6379:6379"
depends_on:
zookeeper:
condition: service_healthy
kafka:
condition: service_healthy
networks:
- copan_network

networks:
copan_network:
driver: bridge
tip

Crea un alias o elige una ruta la cuál sea rápida de acceder.