Instalación de Apache Kafka

De ChuWiki


Descarga de Apache Kafka[editar]

Apache Kafka puede descargarse desde la página oficial. Basta bajarse los binarios y aunque comente Scala, como la propia página indica, sólo es importante si programas en Scala y quieres que sea la misma versión que tú uses. Si utilizas Java u otro lenguaje de programación, puedes bajarte la versión estable más moderna.

El fichero es un tgz, por lo que puedes desempaquetarlo en el directorio que quieras. En linux los comandos serían

$ tar -xzf kafka_2.13-3.6.1.tgz
$ cd kafka_2.13-3.6.1

Desde windows puedes hacerlo directamente con la opción "Extraer todo" desde el menú del explorador de ficheros. Si tienes un Windows más antiguo sin esta opción, puedes usar una aplicación estilo 7zip.

Arranque de Apache Kafka[editar]

Apache Kafka necesita Zookeeper o KRaft para correr. Afortunadamente, ambas opciones vienen con la instalación y podemos elegir cualquiera de las dos sin necesidad de descargar nada más.

Tradicionalmente Kafka usaba Zookeeper, pero se ha ido migrando a KRaft. Tenemos disponibles ambas opciones, pero KRaft está llamado a sustituir a Zookeeper. Los motivos son dos

  • KRaft está embebido en Kafka, mientras que Zookeper es una aplicación separada que hay que arrancar por separado y antes que Kafka, con su configuración.
  • KRaft es más rápido y eficiente que Zookeper.

Así que arrancaremos Apache Kakfa usando KRaft.

Primero debemos crear un identificador único para el cluster de Apache Kafka. Se puede hacer con el comando

$ bin/kafka-storage.sh random-uuid

o en Windows

C:\kafka-home\> bin\windows\kafka-storage.bat random-uuid

que nos dará una cadena como esta

MK4HoGGsR5-t5vRUbL2EAw

Si con Windows te sale un error "La línea escrita es demasiado larga.", prueba a instarlar Kafka en un path más cerca del directorio raíz C:\ (o D:\, el que uses) y con nombres de directorios cortos. Puedes quitar también el número de versión del directorio donde tienes instalado Kafka.

Una vez generado el identificador aleatorio, debemos indicar a KRaft que inicialice los directorios donde Kafka guardará los datos de los mensajes. Esto se hace con el siguiente comando

$ bin/kafka-storage.sh format -t MK4HoGGsR5-t5vRUbL2EAw -c config/kraft/server.properties

o en Windows

C:\kafka-home\> bin\windows\kafka-storage.bat format -t MK4HoGGsR5-t5vRUbL2EAw -c config\kraft\server.properties

Esto coge el fichero server.properties de Kafka con la configuración para KRaft que viene en la instalación y busca cual es el directorio donde se van a dejar los Log de Kafka y crea en él los ficheros iniciales. En Kafka los log son los mensajes de nuestra aplicación que circulan por Kafka, no el log tradicional que entendemos en cualquier aplicación.

Y una vez tenemos esto, ya solo nos queda arrancar el servidor de Kafka con

$ bin/kafka-server-start.sh config/kraft/server.properties

o desde windows

C:\kafka-home\> bin\windows\kafka-server-start.bat config\kraft\server.properties

y con esto tenemos arrancado el servido Kafka listo para su uso.

Crear un Topic en Apache Kafka[editar]

Vamos ahora a probar que la instalación funciona. La instalación viene con scripts de linux y windows que nos permiten crear un Topic, enviar mensajes y consumirlos. Usaremos esos scripts para probarlo, puesto que es la forma más inmediata.

Para la creación del Topic, usaremos el siguiente comando en linux

$ bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

o en windows

C:\kafka-home\> bin\windows\kafka-topics.bat --create --topic quickstart-events --bootstrap-server localhost:9092

Esto crea un topic de nombre "quickstart-events" en nuestro servidor Apache Kafka que está en localhost:9092.

Arrancar un productor de Apache Kafka[editar]

Un productor es el que escribe mensajes en un Topic de Apache Kafka. Vamos a escribir algunos mensajes en el Topic que acabamos de crear. Para ello, el comando linux es

$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
Evento 1
Evento 2
<Ctrl-C>

o en windows

C:\kafka-home\> bin\kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
Evento 1
Evento 2
<Ctrl-C>

Una vez arrancado el comando, podemos escribir texto. Cada línea será un mensaje que se envíe al topic. Cuando terminemos, pulsamos <Ctrl-C>.

Arrancar un consumidor de Apache Kafka[editar]

Ahora arrancamos un consumidor de Apache Kafka que esté pendiente de ese Topic que acabamos de crear. El comando linux sería el siguiente

$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
Evento 1
Evento 2

o en windows

C:\kafka-home\> bin\windows\kafka-console-consumer.bat --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
Evento 1 
Evento 2

La opción --from-begining indica que queremos leer todos los mensajes escritos antes de que arrancaramos el consumidor. Por ello, la salida de estos comandos deberían ser los mensajes (líneas de texto) que escribimos. Si no ponemos esta opción, no leeremos los mensajes antiguos, solo veremoes los que se escriban a partir de ese momento.

Puedes probar arrancado producto y consumidor en dos ventana de comandos distintas, a la vez.