Aprendiendo Apache Kafka (Parte 5) : Configuración de múltiples Brokers

Publicado por Víctor Madrid el

Arquitectura de SolucionesKafkaApache Zookeeper

En este quinto artículo de la serie "Aprendiendo Apache Kafka" se va a explicar cómo realizar la configuración de múltiples brokers/nodos que será la base o el caso habitual que se tendrá a la hora de trabajar con esta plataforma.

Hay que recordar que un sistema con una arquitectura distribuida se compone de varias máquinas en ejecución, las cuales para facilitar el trabajo trabajan juntas en un clúster, por lo que para un usuario esto será como trabajar con un único nodo, es decir, una única máquina. Gracias a este enfoque se proporciona :

  • Alta escalabilidad horizontal
  • Tolerancia a fallos

En este caso, la plataforma Apache Kafka funciona de forma distribuida a la hora de almacenar, recibir y enviar los mensajes entre sus diferentes brokers/ nodos.

A modo de recordatorio pongo los enlaces a los artículos anteriores :

Este artículo esta dividido en 3 partes:

  • 1. Configuración: Detalles sobre la configuración requerida para la utilización de múltiples nodos/brokers.
  • 2. Ejecución: Detalles sobre las acciones necesarias para el arranque y utilización de los diferentes elementos descritos.
  • 3. Conclusiones: Opinión sobre los resultados obtenidos.

1. Configuración

Ayuda : Toda la configuración de Apache Kafka se encuentra en el directorio "config" de la ruta de instalación (%KAFKA_HOME%/config)

Se van a realizar las siguientes configuraciones:

  • Configuración de Apache ZooKeeper
  • Configuración de múltiples Kafka Brokers

1.1. Configuración de Apache ZooKeeper

ZooKeeper tiene un fichero de configuración específico en el directorio anterior, pero se puede hacer una copia y cambiarlo de ubicación y/o nombre para facilitar su uso con una configuración concreta.

El fichero por defecto es : %KAFKA_HOME%/config/zookeeper.properties

Este fichero tiene las siguientes propiedades de configuración:

  • El puerto por defecto es el 2181 (propiedad "clientPort")
  • El directorio de datos por defecto es "/tmp/data" (propiedad "dataDir")
  • Recordar cambiarlo si no queremos que se borre automáticamente cada cierto tiempo
  • Se aconseja modificar “dataDir=/tmp/zookeeper” por otra ruta para que se persista
  • En caso de Windows recordar establecer una ruta apropiada (Por ejemplo : "C:/apache-kafka/kafka2.11-1.1.1-cluster1/zookeeper")

Las propiedades básicas de configuración que se deberían modificar en caso de ser necesario son:

dataDir=C:/Software/apache-kafka/kafka_2.11-1.1.1-cluster_1/zookeeper  
clientPort=2181  

Nota: Tener en cuenta que el directorio de instalación es diferentes al realizado en el artículo anterior y por lo tanto hay que adaptar la propiedad "dataDir"

1.2. Configuración de múltiples Kafka Brokers

Cada Kafka Broker utilizado debería tener su propio fichero de configuración específico. La configuración de los brokers será similar pero cambiando ciertas propiedades específicas en cada uno de ellos.

El fichero de configuración por defecto es : %KAFKA_HOME%/config/server.properties

Para la realización de este artículo se utilizarán 4 brokers.

Para ello se generarán 4 copias del fichero de configuración por defecto "server.properties" con diferente nombre (lo que facilitará su mantenimiento):

  • server-0.properties
  • server-1.properties
  • server-2.properties
  • server-3.properties

Nota: Hay que tener en cuenta que el directorio de instalación es diferente al realizado en el artículo anterior y por lo tanto hay que adaptar la propiedad "log.dirs" en cada broker.

Para el fichero server-0.properties se modificarán las propiedades:

broker.id=0  
listeners=PLAINTEXT://:9092  
log.dirs=C:/Software/apache-kafka/kafka_2.11-1.1.1-cluster_1/logs/broker_0  
zookeeper.connect=localhost:2181  

Para el fichero server-1.properties se modificarán las propiedades:

broker.id=1  
listeners=PLAINTEXT://:9093  
log.dirs=C:/Software/apache-kafka/kafka_2.11-1.1.1-cluster_1/logs/broker_1  
zookeeper.connect=localhost:2181  

Para el fichero server-2.properties se modificarán las propiedades:

broker.id=2  
listeners=PLAINTEXT://:9094  
log.dirs=C:/Software/apache-kafka/kafka_2.11-1.1.1-cluster_1/logs/broker_2  
zookeeper.connect=localhost:2181  

Para el fichero server-3.properties se modificarán las propiedades:

broker.id=3  
listeners=PLAINTEXT://:9095  
log.dirs=C:/Software/apache-kafka/kafka_2.11-1.1.1-cluster_1/logs/broker_3  
zookeeper.connect=localhost:2181  

2. Ejecución

Ayuda : Todos los scripts de ejecución de Apache Kafka se encuentran en el directorio "bin" de la ruta de instalación (KAFKAHOME/bin), si hablamos de un entorno Windows hay que tener encuenta que los scritps se localizarían en "/bin/windows"(KAFKAHOME>/bin/windows)

Se van a realizar las siguientes ejecuciones :

  • Ejecución de Apache ZooKeeper
  • Ejecución de múltiples Kafka Brokers
Importante
Todos los elementos se inicializarán desde una consola independiente.
Para la realización del ejercicio práctico se ha eliminado previamente el directorio de trabajo utilizado en ejercicios prácticos anteriores (Por ejemplo : C:\apache-kafka)

2.1. Ejecución de Apache Zookeper

Nota: Requiere facilitarle el fichero de configuración.

Para iniciar "Apache ZooKeeper" hay que ejecutar el siguiente comando por consola:

%KAFKA_HOME%\bin\windows\zookeeper-server-start.bat ..\..\config\zookeeper.properties

En este caso se esta utilizando la versión de Windows y el fichero de configuración localizado en la ruta por defecto:

Para verificar que se ha arrancado sin problemas se puede hacer revisando las trazas mostradas (Por ejemplo : Verificar el puerto sobre el que esta escuchando).

Opcional: Se puede verificar la creación de la carpeta de trabajo indicada en el fichero de configuración: C:/apache-kafka/zookeeper

2.2. Ejecución de múltiples Kafka Brokers

Nota 1: Requiere tener ejecutado previamente ZooKeeper. Nota 2: Requiere facilitarle el fichero de configuración a cada uno de ellos. Nota 3: Cada uno de ellos se lanzará desde una consola independiente.

Para server-0.properties se ejecutará el comando:

%KAFKA_HOME%\bin\windows\kafka-server-start.bat ..\..\config\server-0.properties

Para server-1.properties se ejecutará el comando:

%KAFKA_HOME%\bin\windows\kafka-server-start.bat ..\..\config\server-1.properties

Para server-2.properties se ejecutará el comando:

%KAFKA_HOME%\bin\windows\kafka-server-start.bat ..\..\config\server-2.properties

Para server-3.properties se ejecutará el comando:

%KAFKA_HOME%\bin\windows\kafka-server-start.bat ..\..\config\server-3.properties

En los 4 casos se esta utilizando la versión de Windows, sus ficheros de configuración se encuentra localizados en la ruta por defecto y son específicos para cada uno de ellos.

Para verificar que se ha arrancado sin problemas se pueden revisar las trazas mostradas en cada uno de ellos (Por ejemplo : Verificar el id).

  • Ver el "id"
  • Ver la ruta de las "meta properties"
  • Etc.

Opcional: Se puede verificar la creación de cada carpeta de trabajo indicada en sus ficheros de configuración.

3. Conclusiones

En este artículo se ha podido ver lo fácil que es implementar la arquitectura distribuida en la plataforma a la hora de montar la infraestructura mediante un clúster de brokers (en nuestro caso con 4), donde únicamente hay que preparar los ficheros de configuración de cada uno de ellos porque lo que es la gestión, descubrimiento ,etc. se realiza automáticamente tras su arranque.

Todo esto tiene mucho más sentido si cada broker se encuentra en máquinas diferentes con discos duros independientes y dedicados (esto esta más relacionado con infraestructura, buenas prácticas y tuning pero hay que tenerlo en cuenta para entornos "altos").

Además, enseñando esta parte estaremos viendo la infraestructura que utilizaremos en los siguientes ejemplos prácticos.

¡Ojalá todas las veces fuera tan fácil montar un clúster!

Por cierto, no os podéis quejar ...este artículo me ha quedado cortito...jejeje ;-)

Si te ha gustado, ¡síguenos en Twitter para estar al día de nuevos posts!

Autor

Víctor Madrid

Líder Técnico de la Comunidad de Arquitectura de Soluciones en atSistemas. Aprendiz de mucho y maestro de nada. Técnico, artista y polifacético a partes iguales ;-)