Apache Kafka: Guía de Comandos Básicos

Última actualización: 22/08/2021

En este artículo vamos a aprender los comandos básicos de Apache Kafka y cómo ejecutar un pequeño clúster para nuestros proyectos Big Data. También aprenderemos a producir y consumir mensajes y a observar los topics con la terminal.

Comandos Apache Kafka

Instalación de Apache Kafka

A continuación, voy a explicar cómo realizar la instalación de Apache Kafka de una forma sencilla en Linux. Para instalarlo en un sistema Windows, lo haremos de una forma similar.

De esta forma, podremos tener disponible rápidamente una instalación local sobre la que desarrollar y hacer las pruebas que necesitemos, generalmente en la fase de desarrollo.

A continuación los pasos y los comandos para Apache Kafka:

1. El primer paso consiste en descargar Apache Kafka. La última versión disponible la podemos encontrar en su web.

2. Después, debemos extraer el fichero descargado, que viene comprimido con extensión tgz. Podemos usar el siguiente comando, que nos creará un nuevo directorio con el nombre del fichero:

tar xvf kafka_x.x.x.x.tgz

3. Cambiamos al directorio bin que acabamos de descomprimir. Este directorio contiene todos los ejecutables shell que vamos a necesitar en Apache Kafka.

cd kafka_x.x.x.x/bin

Instalación de Zookeeper

Apache Kafka usa Zookeeper para almacenar metadatos del clúster, detalles de los consumidores y coordinar los brokers. Antes de ejecutar Kafka necesitamos tener instalado y en ejecución un clúster de Zookeeper.

Zookeeper viene incluido con nuestra descarga de Kafka. A continuación, lo que vamos a hacer es ejecutarlo en nuestro sistema local con la configuración por defecto.

Arrancamos el servidor de Zookeeper con el ejecutable “zookeeper-server-start.sh”. Le pasamos como parámetro el fichero de configuración “zookeeper.properties” que se encuentra en el directorio config de la instalación de Kafka.

Este fichero contiene las propiedades por defecto del servidor de Zookeeper, que ejecuta en el puerto 2181

./zookeeper-server-start.sh ../config/zookeeper.properties

Zookeeper debería desplegar correctamente en el puerto indicado. Podemos verificar que aparece este puerto indicado en la última línea del log que muestra nuestra terminal.

Ejecución de Apache Kafka

Una vez que tenemos Zookeeper ejecutando, podemos arrancar un broker de Kafka en otra terminal indicándole su fichero de configuración por defecto.

./kafka-server-start.sh ../config/server.properties

Si queremos realizar alguna configuración particular para nuestro broker de kafka, debemos abrir el fichero de configuración en el directorio config llamado server.properties.

Los valores de configuración más importantes en este fichero son los siguientes:

  • broker.id: Este es el id del broker. Debe ser un entero único para cada broker. Si esto no es así, nos dará un error al ejecutar.
  • Listeners: IP y puerto del broker.
  • Log.dirs: Directorio donde se almacenarán los ficheros de log.
  • zookeeper.connect: Es la cadena de conexión de Zookeeper. En el caso de que Zookeeper ejecute en el mismo host y con el puerto por defecto será localhost:2181.

Podemos ejecutar varios brokers haciendo copias de este fichero de configuración y modificando los valores broker.id, listeners y log.dir.

Consola en Apache Kafka (CLI)

Kafka Topics

Para poder publicar mensajes, vamos a crear un topic de prueba con nombre “testtopic” y configurarlo con dos particiones y un factor de replicación de 1. También, indicamos al script el host y el puerto donde se encuentra nuestro Zookeeper.

Estos son los dos parámetros más importantes al crear un topic en Kafka ya que tendrán un gran impacto en el rendimiento del sistema. Si las particiones o el factor de replicación se incrementan en el futuro, podemos tener una bajada de rendimiento temporal.

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic testtopic

Debemos crear los topics con el número de particiones correcto, de forma que dejemos capacidad de escalado en el futuro. Para ello, tendremos que tener en cuenta el número máximo de consumidores que vamos a tener para el topic que estemos creando. Si es posible le asignaremos a cada uno una partición.

El factor de replicación nunca debería estar a 1 en sistemas de producción. Lo recomendado es un factor de replicación de 3.

También podemos acceder a los detalles del topic con el siguiente comando:

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic testtopic  Topic:testtopic PartitionCount:2 ReplicationFactor:1 Configs:   Topic: testtopic Partition: 0 Leader: 0 Replicas: 0 Isr: 0   Topic: testtopic Partition: 1 Leader: 0 Replicas: 0 Isr: 0

Este comando nos muestra el número de particiones, las réplicas y el líder. Esta información es muy útil en un entorno real, con un clúster.

Podemos listar todos los topics creados de la siguiente forma:

./kafka-topics.sh --list --zookeeper localhost:2181

Consumidor y Productor de Consola

Una vez creado el topic, podemos ejecutar consumidores en una terminal para poder ver los mensajes que se están publicando. Si dejamos el mismo nombre del grupo en varios consumidores pertenecerán al mismo grupo de consumidores.

A este comando, le tendremos que indicar al menos un bootstrap server, un topic del que va a leer y el grupo de consumidores al que pertenece.

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic --group grupo1

Para publicar mensajes en nuestro topic desde la consola, podemos usar el siguiente comando. Le tenemos que indicar la lista de brokers y el nombre del topic.

./kafka-console-producer.sh --broker-list localhost:9092 --topic testtopic

El productor de consola puede tomar un fichero o la entrada estándar para producir mensajes a Kafka. Por defecto, cada línea será enviada como un mensaje.

Los mensajes publicados nos aparecerán en los consumidores que tengamos escuchando ese topic. Si tenemos varios con el mismo grupo, los mensajes serán consumidos en round robin.

Para obtener los detalles de los consumidores y el offset de cada partición, accedemos con este comando:

./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group grupo1 --describe  
GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                     HOST            CLIENT-ID  
grupo1          testtopic       0          -               0               -               consumer-1-94ab985c-c54f-49ba-ab34-c6eb12590d3b /127.0.0.1      consumer-1   
grupo1          testtopic       1          -               0               -               consumer-1-94ab985c-c54f-49ba-ab34-c6eb12590d3b /127.0.0.1      consumer-1 

Todos estos comandos de Apache Kafka también se pueden ejecutar sin argumentos para que nos muestren información de ayuda con documentación en más detalle

Siguientes Pasos

Si quieres aprender Apache Kafka a fondo y convertirte en experto, no dudes en invertir en tu formación a largo plazo. Para ello, te dejo mi propio curso en español en el que aprenderás desde cero: con partes teóricas y partes prácticas. Es un curso fundamental para quien desee implementar sistemas escalables de procesamiento de datos en tiempo real.

¡Aquí abajo tienes un enlace con el cupón!

Comienza con Kafka: Curso de Apache Kafka desde Cero

Curso Apache Kafka

Deja una respuesta