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 :
- Introducción
- Conceptos Básicos donde se trataron : Zookeeper, Broker, Clúster, Mensaje, Esquema, Topic, Partición y Offset
- Conceptos Básicos para Desarrollo donde se trataron : Connect, Streams, Productor, Consumidor y Grupo de Consumidores
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/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!