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.
Contenidos
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 Apache 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