Apache Kafka es un broker de mensajería distribuida diseñado para manejar altos volúmenes de datos con eficiencia en tiempo real. Un cluster de kafka no solamente es altamente escalable y resilente, si no que también ha demostrado tener un rendimiento mucho mas alto que las plataformas convencionales como ActiveMQ o RabbitMQ. Generalmente es usado como un sistema de mensajería pub/sub (ya haré un post sobre esto luego) muchas organizaciones lo utilizan para agregación de logs ya que ofrece almacenamiento persistente para los mensajes que publica.

En este post explico como instalarlo en Ubuntu 14.04, pero podría de forma muy similar instalarse en cualquier sistema operativo basado en debian.

Instalación

Primero hay que crearle un usuario, para ello usamos los siguientes comandos (uno a la vez en la terminal)

#agregar el usuario
useradd kafka -m
#crear un password para ese usuario
passwd kafka
#agregar kafka a la lista de sudoers
adduser kafka sudo
#logearse al usuario recien creado
su - kafka

Si aun no lo tienen, instalen java

sudo apt-get install default-jre

Instalar zookeeper, si lo se… que tedio, pero sin esto no vivimos lo prometo.

Apache ZooKeeper es un servicio open source construido para coordinar y sincronizar la configuración de la información de los nodos que pertenecen a un sistema distribuido. Un cluster de Kafka depende de ZooKeeper para realizar, entre otras cosas, operaciones como detectar nodos fallando y elegir nuevos lideres (nodos master).

sudo apt-get install zookeeperd

Para combrobar que zookeeper esta corriendo podemos hacerle un telnet

telnet localhost 2181

Cuando la sesión telnet inicie escribimos ruok, y ZooKeeper debe contestarnos imok y terminar la sesión de telnet (un truco poco conocido 😎 ).

Ahora vamos a lo bueno. Hay que descargar y descomprimir los binarios de kafka. Para obtener la ultima versión podemos visitar la sección de descargas oficial y pinchar el primer enlace en la lista que pone “Binary downloads” a menos que planeen usar Scala, entonces tendrán que usar la versión que concuerde con su versión de Scala.

https://kafka.apache.org/downloads

Ahora hacemos el directorio para almacenar los binarios.

mkdir -p ~/Descargas

Ahora descargamos los binarios con wget aquí para la versión 2.11 (revisen si es la ultima en el link de arriba)

wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz

Ahora hacemos un directorio para Kafka

mkdir -p ~/kafka && cd ~/kafka

Y extraemos los binarios en ese directorio

tar -xvzf ~/Descargas/kafka.tgz --strip 1

Ahora hay que configurarlo, y para eso necesitamos un editor de texto yo uso nano porque la vida es muy corta para aprender a usa vi (dicen que en este siglo la gente usa atom…)

nano ~/kafka/config/server.properties

Como por default kafka no permite borrar topics y a nosotros nos gusta ignorar las recomendaciones agregamos esto al final del archivo

delete.topic.enable = true

Porque borrar es importante a veces 😎 . Ahora Guardamos y cerramos (ctrl+o, ctrl+x).

Finalmente! estamos listos para correr nuestro Apache Kafka y para eso usamos el comando nohup y las propiedades que acabamos de configurar

nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &

Y listo! Kafka ahora esta escuchando en el puerto 9092. 

Cuando era niño y el profesor no enseñaba a hacer divisiones, nos decía que si no hacíamos la prueba de la división la tarea estaba incompleta…. En este caso si no comprobamos que kafka esta ejecutándose correctamente no estamos completos en la tarea de instalarlo. Para ello, ponemos el siguiente comando en la terminal:

echo "Hola Mundo" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TopicoPrueba > /dev/null

Como “TopicoPrueba” no existe kafka lo crea automáticamente y produce el mensaje “Hola Mundo” ahora para consumir ese mensaje, usamos el kafka-console-consumer.sh  con el parametro –from-beginning asi:

~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning

Les dije que ZooKeeper nos iba a servir! Este comando usa ZooKeeper para encontrar los nodos disponibles con el tópico que creamos y consumir el mensaje que le estamos indicando. Si no hubo ningún problema con la configuración deberíamos ver un output “Hola Mundo” en la terminal.

Y así de “fácil” ya tenemos instalado ZooKeeper en nuestro sistema operativo 🙂

 

Categorized in:

Tagged in:

, ,