Aprendiendo Apache Kafka (Parte 4) : Instalación, Configuración y Ejemplo Práctico Básico

Publicado por Víctor Madrid el

Arquitectura de SolucionesKafka

En este cuarto artículo de la serie "Aprendiendo Apache Kafka" se va a detallar cómo realizar la instalación de la plataforma, una configuración básica y un primer ejemplo práctico basado en dicha configuración.

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

El ejemplo práctico consistirá en :

  • Arrancar el Zookeeper
  • Arrancar un broker (nodo)
  • Definir un topic (tema) con una única partición y SIN replicación
  • Utilizar un productor "por línea de comandos"
  • Utilizar un consumidor "por línea de comandos"
  • Enviar un mensaje desde el productor y que se visualice desde el consumidor

Este artículo esta divido en 6 partes:

  • 1. Instalación : Detalles sobre los requerimientos necesarios y los pasos a realizar para su correcta instalación.
  • 2. Configuración Básica: Detalles sobre la configuración requerida para la realización del ejercicio práctico, además de servir como guía para localizar los diferentes elementos de configuración.
  • 3. Ejecución: Detalles sobre las acciones necesarias para el arranque y utilización de los diferentes elementos.
  • 4. Gestión de Topics: Detalles sobre el uso de la herramienta encargada del control de los topics.
  • 5. Ejemplo Práctico: Implementación del ejercicio práctico que deberá cumplir los objetivos marcados.
  • 6. Conclusiones: Opinión sobre los resultados obtenidos.

1. Instalación

En este apartado se va a enseñar a realizar la instalación de la plataforma

Importante
Se requiere tener instalado una versión de Java acorde con la versión descargada de la plataforma.
Se aconseja utilizar Java 8

Estos son los pasos a realizar :

Descargar la última versión de Apache Kafka desde la página web

https://kafka.apache.org

https://kafka.apache.org/downloads

Descomprimir el fichero descargado en el directorio elegido

  • El directorio elegido pasará a ser el directorio de instalación
  • Este directorio se referenciará como KAFKA_HOME
  • Entorno Unix : Todos los ejecutables .sh se encuentran bajo el directorio %KAFKA_HOME%\bin
  • Entorno Windows : Todos los ejecutables .bat se encuentran bajo el directorio %KAFKA_HOME%\bin\windows Ejemplo de directorio de instalación: "C:\Software\apache-kafka\kafka_2.11-1.1.1"

[Opcional] Crear la variable de entorno : KAFKA_HOME

Esta variable deberá hacer referencia a la ruta/directorio de instalación

Nombre : KAFKA_HOME

Valor (ejemplo)  : C:\Software\apache-kafka\kafka_2.11-1.1.1

Añadir la variable de entorno KAFKA_HOME al Path

  • Si los scripts que se van a ejecutar son los de Windows se referenciarán desde %KAFKA_HOME%\bin\windows
  • Truco : Crear una variable de entorno específica para Windows KAFKA_HOME_WIN

2. Configuración Básica

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 un Kafka Broker

2.1. Configuración de Apache Zookeper

Zookeper 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/zookeeper")

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

dataDir=C:/apache-kafka/zookeeper  
clientPort=2181  

2.2. Configuración de un Kafka Broker

Kafka Broker 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\server.properties

Este fichero tiene las siguientes propiedades de configuración :

  • El puerto por defecto es el 9092 (se se puede cambiar cuando hay un clúster)
  • Cambiar el identificador del broker (propiedad "broker.id" )
  • Por defecto tiene el valor 0
  • Descomentar y cambiar la referencia al listener (propiedad "listeners")
  • Por defecto tiene el valor "PLAINTEXT://:9092"
  • Cambiar el directorio de logs (propiedad "log.dirs")
  • Modificar “log.dirs=/tmp/kafka-logs” por “log.dirs=C:/apache-kafka/kafka-logs/broker_0” (Se conseja poner algún indicador del tipo de broker que lo genera)
  • En este ejemplo se reaprovecha el directorio creado con el Zookeeper para guardar su información
  • Revisar la configuración a la conexión de Zookeeper
  • Este aspecto hay que tenerlo en cuenta si se cambia el puerto, la máquina, etc.
IMPORTANTE : Se aconseja tener un fichero de configuración independiente para cada uno de los broker utilizados en el clúster

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

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

3. 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 en cuenta 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 un Kafka Broker
Importante
Todos los elementos se inicializarán desde una consola independiente

3.1. Ejecución de Apache Zookeper

Nota : Requiere facilitarle el fichero de configuración

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

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

En este caso se está 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 , revisar las trazas mostradas.

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

3.2. Ejecución de un Kafka Broker / Server

Nota 1 : Requiere tener ejecutado previamente Zookeeper
Nota 2 : Requiere facilitarle el fichero de configuración

Para iniciar un "Broker" hay que ejecutar el siguiente comando :

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

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

Se pueden utilizar los siguientes parámetros opcionales :

  • -daemon : habilita el modo "daemon" y algunas de sus funcionalidades (loggc,etc.)
  • *--override property=value *: permite sobreescribir las propiedades del fichero de configuración

O bien puede ser necesario modificar el script para cambiar algo de su ejecución como : KAFKALOG4JOPTS,  KAFKAHEAPOPTS, etc.

Para verificar que se ha arrancado sin problemas , revisar las trazas mostradas.
* Se puede ver el id del Broker * Se puede ver la ruta de las meta properties

Opcional : Se puede verificar la creación de la carpeta de trabajo indicada en el fichero de configuración (Por ejemplo : C:/apache-kafka/kafka-logs/example).

4. Gestión de Topics

Ayuda : Para la gestión de topics se proporciona el siguiente comando/herramienta: kafka-topics
Recordar que 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 en cuenta que los scritps se localizarían en "\bin\windows"(KAFKAHOME>\bin\windows)

Nota : Requiere tener ejecutado previamente Zookeeper

Las acciones que se pueden realizar con este comando / herramienta son :

4.1. Listar todos los topics

Muestra todos los topics que se encuentran dados de alta en Zookeeper

%KAFKA_HOME%\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181

En este caso se esta utilizando la versión de Windows.

Los parámetros utilizados son :

  • --list: Indica que la acción a realizar es el listado de topics
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara

4.2. Crear un topic

Permite crear un topic con una configuración específica

KAFKA_HOME\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 100 --topic demo  

En este caso se esta¡á utilizando la versión de Windows.

Los parámetros utilizados son :

  • --create: Indica que la acción a realizar es la creación
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara
  • --replication-factor : Si Kafka se está ejecutando en un clúster, esto determina en cuántos brokers se replicará una partición (En este caso 1)
  • --partitions : Define cuántas particiones habrá en un topic (En este caso 100)
  • --topic : Establece el nombre del topic (En este caso "demo")

4.3. Borrar un topic

Permite borrar un topic

KAFKA_HOME\bin\windows\kafka-topics.bat --delete --zookeeper localhost:2181 --topic demo  

En este caso se esta utilizando la versión de Windows.

Para que el borrado sea "real" tiene que tener la siguiente propiedad activa : delete.topic.enable=true

Los parámetros utilizados son :

  • --delete: Indica que la acción a realizar es la eliminación
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara
  • --topic : Establece el nombre del topic (En este caso "demo")

4.4. Ver información del detalle de un topic

Permite ver la información detallada sobre el uso y configuración de un topic.

KAFKA_HOME\bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic demo  

En este caso se esta utilizando la versión de Windows.

Los parámetros utilizados son :

  • --describe : Indica que la acción a realizar es la descripción
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara
  • --topic : Establece el nombre del topic (En este caso "demo")

Información que se muestra :

  • Leader : es el nodo responsable de todas las lecturas y escrituras de una proporción
  • Replicas : Lista de nodos que replican el mensaje para esta partición independiente de si es leader o incluso si están activa
  • ISR : Conjunto de "in-sync" réplicas

4.5. Modificar un topic

Existe la posibilidad de tener que modificar la configuración de un topic, para ellos existe el parámetro --alter.

Para ello hay que tener claro una serie de normas :

  • Se pueden añadir particiones (y las particiones actuales no cambian) pero NO se pueden eliminar
  • No se puede cambiar el factor de replicación
  • Se le pueden pasar otros parámetros de configuración con --config
  • Se le pueden eliminar ciertos parámetros de configuración con --deleteconfig

5. Ejemplo Práctico

Nota  : Se requiere tener instalado previamente Apache Kafka

En este apartado se va a detallar la realización de un ejemplo práctico mediante el uso de un productor y un consumidor por consola, es decir, mediante el uso de la línea de comandos.

Estos son los pasos a seguir :

Paso 1 : Arrancar Apache Zookeper

Seguir las instrucciones que aparecen en el apartado "Ejecución de Apache Zookeper".

Se verificará por consola que se ha arrancado correctamente.

Paso 2 : Arrancar un Kafka Broker

Seguir las instrucciones que aparecen en el apartado "Ejecución de un Kafka Broker / Server"

Se verificará por consola que se ha arrancado correctamente.

Paso 3 : Crear el Topic

Se ha establecido como nombre : "topic-basic-test"

Este apartado se divide en varios subpasos:

Paso 3.1 : Verificar que el topic no existe previamente

Comprobar si existe un topic con nombre : "topic-basic-test"

Hay que ejecutar el siguiente comando :

%KAFKA_HOME%\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181

En este caso se está utilizando la versión de Windows.

Los parámetros utilizados son :

  • --list: Indica que la acción a realizar es el listado
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara

Verificar que NO aparece en el listado.

Paso 3.2 : Crear un topic con una partición y SIN replicación

Hay que ejecutar el siguiente comando :

%KAFKA_HOME%\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topic-basic-test

En este caso se está utilizando la versión de Windows.

Los parámetros utilizados son :

  • --create: Indica que la acción a realizar es la creación
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara
  • --topic : Establece el nombre del topic (En este caso "topic-basic-test")
  • --replication-factor : Si Kafka se está ejecutando en un clúster, esto determina en cuántos brokers se replicará una partición (En este caso 1)
  • --partitions : Define cuántas particiones habrá en un topic (En este caso 1)

Verificar que se ha creado correctamente.

Paso 3.3 : Verificar que el topic existe en el ámbito de Zookeeper

Comprobar si existe un topic con nombre : "topic-basic-test"

Hay que ejecutar el siguiente comando :

%KAFKA_HOME%\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181

En este caso se está utilizando la versión de Windows.

Los parámetros utilizados son :

  • --list: Indica que la acción a realizar es el listado
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara

Nota : Se muestran los Pasos 3, 4 y 5

Verificar que aparece en el listado

**Paso 3.4 : Verificar los detalles del topic creado

Hay que ejecutar el siguiente comando :

%KAFKA_HOME%\bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic topic-basic-test 

En este caso se está utilizando la versión de Windows.

Los parámetros utilizados son :

  • --describe : Indica que la acción a realizar es la descripción
  • --zookeeper : Establece la dirección del Zookeeper con la que trabajara
  • --topic : Establece el nombre del topic (En este caso "topic-basic-test")

Se puede verificar que el topic indica que su Broker leader es el que tiene el id igual a 0 y que la partición leader también en la 0 (además de ser una única partición), por otro lado, al ser el único broker y no tener replicación se indica que la réplica se encuentra en el mismo broker y que el valor ISR también es 0.

Verificar que aparece la información solicitada.

Paso 4 : Arrancar un consumidor por consola

Hay que ejecutar el siguiente comando :

%KAFKA_HOME%\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic topic-basic-test

En este caso se está utilizando la versión de Windows.

Los parámetros utilizados son :

  • --bootstrap-server : Establece la dirección de los Brokers con los que trabajara
  • --topic : Establece el nombre del topic (En este caso "topic-basic-test")
  • --from-beginning : Mostrará el contenido del topic desde el inicio de los datos recibidos en el topic

Verificar que se encuentra a la espera de recibir los mensajes.

Paso 5 : Arrancar un productor por consola

Hay que ejecutar el siguiente comando :

%KAFKA_HOME%\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic topic-basic-test 

En este caso se está utilizando la versión de Windows.

Los parámetros utilizados son :

  • --broker-list : Establece la lista de Brokers con los que trabajara
  • --topic : Establece el nombre del topic (En este caso "topic-basic-test")

Verificar que se encuentra a la espera de enviar mensajes los mensajes

Paso 6 : Enviar un mensaje del productor al consumidor

Escribir desde la consola del productor "Esto es una Prueba 1" y enviar.

Verificar que se muestra el mensaje desde la consola del consumidor

Escribir desde la consola del productor "Esto es una Prueba 2" y enviar.

Verificar que se muestra el mensaje desde la consola del consumidor

6. Conclusiones

Con este artículo se puede ver lo fácil que es instalar la plataforma y que con relativa poca configuración se puede empezar a utilizar muy rápidamente. Por lo tanto, nos podemos hacer una idea de la "relativa" facilidad para montar infraestructuras más complejas como las que veremos en los siguientes artículos (varios nodos, con o sin partición, con o sin replicación, etc.).

Con el ejemplos que se ha realizado, se ha podido ver en funcionamiento los conceptos más importantes de la plataforma : Zookeeper, Broker, Topic , Productor y Consumidor. Esto es algo que ayuda a comprender mejor las características y funcionamientos que ya se detallaron en la parte teórica en los anteriores artículos pero desde un punto de vista inicial debido a la sencillez del ejercicio práctico.

Y de momento sólo hemos calentado motores ;-)

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

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