1. INTRODUCCIÓN
Kafka es un sistema de mensajería (Publish-Subscribe)
de alto rendimiento, escalable y tolerante a fallos diseñado para ingerir
datos a gran velocidad.
1.1. Conceptos
- Kafka mantiene los mensajes en categorías llamadas Topics.
- · Los productores publican mensajes en un Topic Kafka.
- · Los consumidores se suscriben a los Topics y reciben los mensajes publicados en estos Topics.
- · Kafka se ejecuta como un cluster de uno o más servidores, cada una de los cuales se llama Broker.
1.2. Estilo de Mensajería
Los sistemas de mensajería tradicionales tienen
2 modelos: Queues (P2P) y Topics (Publish-Suscribe).
En una cola (Queue) cada mensaje va a un
consumidor, mientras que en un Tópico (Topic) se hace emite cada mensaje a
todos los consumidores (broadcast).
Kafka ofrece una abstracción que permite
contemplar ambos modelos:
El 'Consumer
group':
Los consumidores se identifican con un identificador de grupo de consumidores o 'Consumer Group ID', cada mensaje publicado a un Topic en Kafka es enviado a una
única instancia dentro del mismo grupo. Esto implica que puede existir varios consumidores de un mismo grupo ejecutándose en paralelo y subscritos al mismo Tópico, sin que se procese un mismo mensaje a la vez por dos o más consumidores, lo que permite un procesamiento más rápido de los mensajes enviados a Kafka (crecimiento horizontal).
1.3. Anatomía de Tópicos: Particiones
· En Kafka los Tópicos se organizan en particiones, que son secuencias de mensajes ordenados e inmutables.
Los mensajes en una partición tienen asignado un número secuencial llamado 'offset' que identifica cada mensaje en una partición (esto permite que el rendimiento sea constante).
· Las particiones se distribuyen sobre los servidores del clúster
Kafka, de modo que cada Servidor se encarga de manejar los datos y peticiones a
una parte de las particiones.
·
Las particiones se replican
a un número configurable de servidores para tolerancia a fallos (recomendado 3
mínimo).
· Las particiones permiten que el tamaño de un Tópico sea mayor que
la capacidad de un Servidor, cada partición individual debe caber en el
servidor que lo almacena, pero un tópico está formado por varias particiones.
·
Cada partición tiene un Servidor que actúa como Líder (leader) y servidores que actúan
como Seguidores (followers).
·
El leader maneja todas las peticiones de lectura y escritura para
una partición mientras que los followers replican al leader pasivamente.
·
Si el líder falla uno de los seguidores automáticamente se
convierte en el nuevo líder.
·
Cada Servidor actúa como líder para algunas de las particiones y
como seguidor para otras de modo que la carga se balancea correctamente en el clúster.
·
El clúster Kafka mantiene todos los datos publicados (sean
consumidos o no) por un tiempo configurable.
1.4. Sincronización entre Clusters
Un Cluster Kafka no está pensado para
estar distribuido entre datacenters, el soporte para escenarios
multi-datacenter en Kafka se da a través del mirroring entre clusters.
Esta característica permite que el
cluster mirror actúe como consumidor del cluster fuente.
2. Mantenimiento y comandos para Topics
Es necesario saber la ruta del zookeeper de kafka que se define al añadir
el módulo de kafka en Cloudera o la solución BigData que se esté utilizando. Supongamos que la ruta relativa definida es: /kafka
y que se esté usando el puesto por defecto: 2181. En caso contrario habrá que poner los valores correspondientes.
2.1. Crear un Topic
kafka-topics --create --zookeeper [ZOOKEEPER-HOST]:2181/kafka --replication-factor 2 --partitions 2 --topic [TOPIC_NAME]
2.2. Modificar un Topic
kafka-topics --zookeeper [ZOOKEEPER-HOST]:2181/kafka --alter --partitions 4 --topic [TOPIC_NAME]
2.3. Eliminar un Topic
kafka-topics --delete --zookeeper [ZOOKEEPER-HOST]:2181/kafka --topic [TOPIC_NAME]
Si el
topic se queda como marcado para eliminación. Para eliminarlo por completo hay
que hacer lo siguiente :
1. Parar los brokers de kafka.
2. Borrar los datos de topics del disco, normalmente
están en la carpeta siguiente (hay que eliminar lo que corresponda a nuestro
topic):
a.
/var/local/kafka/data
3. Ó Borrar los topics de zookeeper, para
ello:
a.
Ejecutar : zookeeper-shell.sh [ZOOKEEPER-HOST]:2181/kafka)
El comando debe estar en una ruta asimilar a la siguiente:
/opt/cloudera/parcels/KAFKA-2.2.0-1.2.2.0.p0.68/lib/kafka/bin/
b.
Borrar
los topics de la siquiente ruta:
rmr
/kafka/brokers/topics/[TOPIC_NAME] ó /brokers/topics/ [TOPIC_NAME]
c.
Comprobar y borrar también los directorios:
/kafka/config/topics/[TOPIC_NAME] ó /config/topics/[TOPIC_NAME]
/kafka/admin/delete_topics/[TOPIC_NAME] ó /admin/delete_topics/[TOPIC_NAME]
d. Comprobar con : ls [RUTA]
2.4. Listar Topics
kafka-topics --list --zookeeper [ZOOKEEPER-HOST]:2181/kafka
2.5. Enviar mensajes a un Topic
kafka-console-producer --broker-list [SERVER1:9092,SERVER2:9092,...]
--topic [TOPIC_NAME]
>Mensaje1
>Mensaje2
>Crtl^C (salir)
Esto nos
permitirá enviar mensajes de prueba para probar nuestros consumidores.
2.6. Recibir mensajes de un Topic
kafka-console-consumer --zookeeper [ZOOKEEPER-HOST]:2181/kafka --topic [TOPIC_NAME] [--from-beginning]
Mensaje1
Mensaje2
2.7. Consultar descripción de un topic
kafka-topics --describe --zookeeper [ZOOKEEPER-HOST]:2181/kafka --topic [TOPIC_NAME]
2.8. Consultar lista de brokers
zookeeper-shell.sh [zookeeper_address] <<< "ls /brokers/ids"
2.9. Eliminar mesanjes de un Topic de Kafka
kafka-topics --zookeeper [zookeeper_address] --alter --topic [TOPIC_NAME] --config retention.ms=1000
kafka-topics --zookeeper [zookeeper_address] --alter --topic [TOPIC_NAME] --delete-config retention.ms
No hay comentarios:
Publicar un comentario