Get it on Google Play
Tu partner Freelance para tus proyectos IT

Instalación de un cluster de Apache Kafka paso a paso

09-09-2020

En el vídeo de hoy montamos un cluster de Apache Kafka paso a paso y hemos empezando explicando algunos conceptos sobre clusters:

  • Nodo: Es un equipo(servidor) que se encarga de ejecutar el software. En este caso, instancias de Apache Kafka.
  • Partición: Cuando hablamos de colas, bases de datos, clusters, etc. el concepto de partición se refiere a dividir el trabajo o datos. Por ejemplo, en el caso de una cola de mensajes, si tuviéramos 10 mensajes y dos particiones tendríamos 5 mensajes en una partición y 5 mensajes en otra partición. En el caso que nos ocupa, evidentemente, cada partición va en un nodo diferente para dividir la la carga de trabajo y espacio.
  • Replica: En el caso que nos ocupa, una replica se refiere a tener copias de particiones. El objetivo es que en caso de fallada de un servidor no perder los datos.
  • Alta disponibilidad: El concepto de ‘Alta disponibilidad’ se refiere a la capacidad de un sistema para dar servicio a una gran carga de trabajo. En este caso se consigue a base de tener particiones para repartir la carga de trabajo y espacio en disco.
  • Tolerancia a fallos: Se refiere a la capacidad que tiene el sistema de seguir funcionando o reponerse después de una fallada. En este caso se consigue a base de tener replicas de las particiones.

Naturalmente, a mas nodos, particiones y replicas mas alta disponibilidad y tolerancia a fallos tendrá el sistema. Ahora que ya tenemos claros los conceptos sobre clusters vamos a ver como instalamos todo el sistema:

Instalación de todos los nodos del cluster

Hemos creado tres nodos en nuestro cluster donde el primero tiene que ejecutar una instancia de Zookeeper(Gestor del cluster) y los otros dos tendrán instancia de Apache Kafka. Todas las máquinas las hemos creado como contenedores con Ubuntu. Para las tres hemos usado el mismo comando:

sudo docker run -it ubuntu:latest

Seguidamente hemos usado los siguientes comandos para instalar las dependencias y descargar y descomprimir Apache Kafka(Todas las máquina igual independientement de si ejecutan Zookeeper o Kafka):

apt update && apt install -y nano openjdk-8-jdk wget

wget http://apache.uvigo.es/kafka/2.6.0/kafka_2.13-2.6.0.tgz && tar zxvf  kafka_2.13-2.6.0.tgz

Configuramos y arrancamos Zookeper en la primera máquina

Editamos el fichero de configuración ‘zookeeper.properties’ que está dentro de la carpeta ‘config’ y modificamos la propiedad:

dataDir=/zookeeper-data

Básicamente se trata de cambiar la carpeta de los datos para que no los borre regularmente porque por defecto están en una carpeta temporal. El siguiente paso es arrancar Zookeeper:

/kafka_2.13-2.6.0/bin/zookeeper-server-start.sh /kafka_2.13-2.6.0/config/zookeeper.properties

Configuramos y arrancamos Kafka en el resto de máquinas

El proceso es el mismo, editamos la configuración del fichero ‘server.properties’ que está en la carpeta ‘config’. En este caso las siguientes propiedades:

# Entero que identifica el nodo, debe ser distinto en cada nodo
broker.id=1

# Carpeta donde se guardan los logs, lo mismo que en Zookeeper
log.dirs=/kafka-logs

# Host y puerto donde está escuchando ZooKeeper
zookeeper.connect=172.17.0.4:2181  

# Host y puerto donde está escuchando esta instancia de Apache, normalmente no hace falta especificar
listeners=PLAINTEXT://<hostip>:9092

Y ya solo nos queda arrancar Kafka:

/kafka_2.13-2.6.0/bin/kafka-server-start.sh /kafka_2.13-2.6.0/config/server.properties

Trabajar con el cluster

Ya tenemos nuestro cluster funcionando y ya podemos empezar a crear tópics, publicar y consumir mensajes. Podemos conectarnos a cualquier nodo de Apache Kafka que todos deberian deveolver siempre la misma información(Para eso es un cluster):

# Crear un topic con una replica(replication factor 2) y dos particiones
./kafka-topics.sh --create --bootstrap-server 172.17.0.5:9092 --replication-factor 2 --partitions 2 --topic test-cluster

# Leer la lista de topics(Para comprobar que se ha creado correctamente)
kafka-topics.sh --list --bootstrap-server 172.17.0.6:9092

# Nos abrimos una consola como productor de mensajes
kafka-console-producer.sh --broker-list 172.17.0.5:9092 --topic test-cluster

# Nos abrimos una consola como consumidor de mensajes
kafka-console-consumer.sh --bootstrap-server 172.17.0.6:9092 --topic test-cluster –from-beginning

Como veis, hoy en día es muy sencillo gestionar un cluster y los conceptos son muy parecidos en distintas tecnologías. Nada de andar reinventando la rueda para tener alta disponibilidad y tolerancia a fallos.

Kafka Cluster

Kafka Cluster

Si te ha servido, por favor comparte
 

Leave a Reply