🤓 [APACHE KAFKA] - ¿Qué es Apache Kafka? 🔍 ¿Cómo instalar Apache Kafka en Ubuntu? ✅

Enviado por LT DATA el Dom, 31/01/2021 - 11:44

🤓 [APACHE KAFKA] - ¿Qué es Apache Kafka? 🔍 ¿Cómo instalar Apache Kafka en Ubuntu? ✅

En esta entrada os enseñaré que es Apache Kafka y como instalarlo en Ubuntu 18.04

¿Qué es Apache Kafka?

Apache Kafka es un software de código abierto, distribuido y con licencia Apache 2.0, que te permite almacenar, leer y analizar datos. Ser de código abierto significa que es esencialmente de uso gratuito. Tiene una gran red de usuarios y desarrolladores que contribuyen a las actualizaciones, desarrollando nuevas funciones y ofreciendo soporte para nuevos usuarios. Fue creado en LinkedIn, donde jugó un papel muy importante en el análisis de las conexiones entre sus usuarios, con el fin de construir redes entre profesionales. En 2011 se le otorgó el estado de código abierto, y fue integrado en la Fundación Apache.


Kafka es un sistema de mensajes basado en el modelo publicador/subscritor, permitiendo el intercambio de datos entre procesos, aplicaciones y servidores en tiempo real. Está diseñado para ejecutarse en un entorno "distribuido", lo que significa que, en vez de ejecutarse en el ordenador de una persona, se ejecuta en uno o varios servidores, aprovechando la potencia de procesamiento adicional y la capacidad de almacenamiento que esto aporta.

Para comenzar a trabajar con Apache Kafka, será necesario conocer estos elementos clave: 

  • Cluster: grupo de nodos en los cuales se está ejecutando kafka de forma conjunta.
  • Mensaje: dato que se envía a kafka y que se almacena en un topic.
  • Topics: Categorías en las que se clasifican los mensajes.
  • Productores: Clientes conectados que publican mensajes.
  • Consumidores: Clientes conectados suscritos a los topics que consumen los mensajes.

Las características principales de Apache Kafka: 

  • Es persistente.
  • Es escalable, por lo que se pueden añadir más servidores para aumentar su rendimiento.
  • Tolerante a fallos, ya que aún que se caiga algún nodo, este se puede recuperar sin haber perdido el servicio.
Apache Kafka

¿Qué son los topics?

Ya hemos dicho anteriormente, que son las categorías en las que se clasifican los mensajes. Pero, ¿Qué quiere decir esto?. Para realizar una clasificación lógica se podía pensar en el esquema de una tabla relacional. Por ejemplo, una tienda tendrá un topic en el que almacenará los clientes, otro en el que almacene las ventas y otro, por ejemplo, en el que almacene la información de tiendas. De esa manera, cuando necesites ver, por ejemplo, las ventas, solo tendrás que leer de un topic. Un topic se divide en particiones, estando estas ordenadas e identificadas mediante lo que llamamos offset. Cada offset constituye una secuencia inmutable de registros. Proporciona conectadores a fuentes de datos: HDFS, JDBC, S3, FTP, Elasticsearch. Pero a esto mejor le dedicaremos un vídeo en exclusiva, el cual os dejaré aquí arriba ala derecha cuando esté realizado. 

Gracias a su arquitectura consigue

  • Baja latencia.
  • Escalabalidad horizontal, es decir, poder añadirle más nodos en función de su uso.

Nos permite

  • Construir flujos de datos en tiempo real entre sistemas y aplicaciones.
  • Construir aplicaciones que reaccionan a datos en tiempo real.
Apache Kafka 2


¿Para qué se utiliza Apache Kafka?

Para seguir siendo competitivas, las empresas dependen cada vez más del análisis de datos en tiempo real, lo que les permite obtener conocimientos y tiempos de respuesta más rápidos. La información en tiempo real permite a las empresas u organizaciones hacer predicciones sobre lo que deberían almacenar, publicitar o sacar de los estantes, basándose en la información más actualizada posible. Tradicionalmente, los datos se han procesado en modo "batch", normalmente por la noche, no permitiéndote analizar hasta la mañana siguiente que es lo que ha pasado en tu tienda el día anterior. Siendo esto una limitación

Debido a su naturaleza distribuida y la forma simplificada en que administra los datos entrantes, Kafka es capaz de operar muy rápidamente: los grandes clústeres pueden monitorear y reaccionar a millones de cambios en un conjunto de datos cada segundo. Esto significa que es posible comenzar a trabajar y reaccionar ante la transmisión de datos en tiempo real. Kafka se diseñó originalmente para rastrear el comportamiento de los visitantes de Linkedin. Al analizar los datos del flujo de clics (cómo el usuario navega por el sitio y qué funcionalidad usa) de cada sesión, se puede lograr una mayor comprensión del comportamiento del usuario. Esto permite predecir qué artículos de noticias o productos a la venta pueden interesar a un visitante.

Desde entonces, Kafka se ha vuelto ampliamente utilizado y es una parte integral de grandes empresas como Spotify, Netflix, Uber, y Paypal, que lo utilizan para procesar datos de transmisión y comprender el comportamiento del cliente o del sistema.


¿Cómo actúa Apache Kafka?

Kafka ingesta datos, que se puede leer de una gran cantidad de fuentes, y la organiza en topics. Como ejemplo muy simple, una de estas fuentes de datos podría ser un registro de transacciones donde una tienda de deporte registra cada venta. Kafka procesaría este flujo de información y crearía topics, que podrían ser "número de bicicletas vendidas" o "número de ventas entre las 13:00 y las 14:00", que podría analizar cualquier persona que necesite información sobre los datos. Esto puede parecer similar a cómo una base de datos convencional te permite almacenar u ordenar información, pero en el caso de Kafka sería adecuado para una cadena nacional de tiendas de deporte que procesa miles de ventas de bicicletas por minuto. Esto se logra utilizando una función conocida como Productor, que es una interfaz entre las aplicaciones (por ejemplo, el software que monitorea la base de datos de transacciones estructurada pero sin clasificar de las tiendas de deporte) y los topics. A menudo, este flujo de datos se utilizará para llenar Data Lakes.

Otra interfaz, conocida como Consumidor, permite que se lean los datos de los topics y que la información almacenada en ellos se transmita a otras aplicaciones que puedan necesitarla, por ejemplo, el sistema de la tienda de deportes para renovar el stock agotado o descartar artículos obsoletos. Cuando se combinan sus componentes con los demás elementos comunes de un marco de análisis de Big Data, Kafka funciona formando el core por el que los datos pasan a través de aplicaciones de entrada y captura, motores de procesamiento de datos y Data lake de almacenamiento.

Apache Kafka 3


¿Cómo instalar Apache Kafka en Ubuntu 18.04?

Será necesario anteriormente instalar zookeeper al igual que Java, ya que es una herramienta necesaria para su correcto funcionamiento.

Para ello ejecutaremos los siguientes comandos. Empezamos instalando Zookeper

> sudo apt-get install zookeeper

A continuación descargaremos Apache Kafka en su versión 2.3.0

> wget http://www-us.apache.org/dist/kafka/2.3.0/kafka_2.12-2.3.0.tgz

Descomprimimos le fichero descargado

> tar xzf kafka_2.12-2.3.0.tgz

Lo movemos a la carpeta donde queramos que esté, en mi caso /usr/local/kafka

> sudo mv kafka_2.12-2.3.0 /usr/local/kafka


Crearemos un archivo systemd para zookeeper, el cual nos permitirá encenderlo, apagarlo y consultar su estado a través del comando systemctl

> sudo nano /etc/systemd/system/zookeeper.service

[Unit]
Description=Apache Zookeeper server
Documentation=http://zookeeper.apache.org
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
ExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties
ExecStop=/usr/local/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

Hacemos lo mismo para Kafka

> sudo nano /etc/systemd/system/kafka.service

Atentos aquí en el código, ya que tendréis que cambiar donde escribo versión java, por la ruta dónde esté vuestra versión de Java, en mi caso será la 1.8

[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
Requires=zookeeper.service

[Service]
Type=simple
Environment="JAVA_HOME=TU_VERSION_DE_JAVA"
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target

Por último arrancaremos zookeeper y apache Apache Kafka, los cuales ya quedarán correctamente funcionando

> sudo systemctl start zookeeper

> sudo systemctl start kafka

Os dejo un vídeo con el ejemplo práctico