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
Crea un alias o elige una ruta la cuál sea rápida de acceder.