miércoles, 14 de febrero de 2018

BIGDATA - KAFKA - Introducción y Comandos Básicos para Topics

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).

De este modo si todas las instancias de consumidores tienen el mismo Id. de Grupo funciona como un Sistema de Colas (Queue), mientras que si cada instancia tiene un Id. de Grupo distinto funciona como un Sistema Publish-Suscribe.

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



Imágenes Dockers

Estoy aprendiendo bastante sobre el tema de docker y docker swarm , gestión de Stacks, Servicios, Containers, Volumenes, .. y sus configurac...