En una publicación anterior aborde el tema de la ingestión de datos masivos usando la herramienta Flume (consúltala aquí). Siguiendo con el tema de la ingestión de datos, en este post voy a introducir el uso de Kafka para la ingestión en Tiempo Real sobre Data Lakes construidos en plataformas Big Data, como puede ser Hadoop HDFS.
En el mundo actual, las aplicaciones generan constantemente información en tiempo real, y esta información necesita formas fáciles de enrutarse de manera confiable y rápida a múltiples tipos de receptores. La mayoría de las veces, las aplicaciones que producen información y las aplicaciones que consumen esta información están separadas y son inaccesibles entre sí. Esto, a veces, lleva a un nuevo desarrollo de los productores o consumidores de información para proporcionar un punto de integración entre ellos. Por lo tanto, se requiere un mecanismo que permita una integración transparente de información entre productores y consumidores que evite cualquier tipo de reescritura de una aplicación en cada extremo.
En el mundo actual, las aplicaciones generan constantemente información en tiempo real, y esta información necesita formas fáciles de enrutarse de manera confiable y rápida a múltiples tipos de receptores. La mayoría de las veces, las aplicaciones que producen información y las aplicaciones que consumen esta información están separadas y son inaccesibles entre sí. Esto, a veces, lleva a un nuevo desarrollo de los productores o consumidores de información para proporcionar un punto de integración entre ellos. Por lo tanto, se requiere un mecanismo que permita una integración transparente de información entre productores y consumidores que evite cualquier tipo de reescritura de una aplicación en cada extremo.
En la era actual de Big Data, el
primer desafío es recopilar los datos, ya que se trata de una cantidad masiva de
datos, y el segundo desafío es analizarlos. Este análisis generalmente incluye
el siguiente tipo de datos y mucho más:
·
Datos de comportamiento del usuario
·
Trazabilidad del rendimiento de aplicaciones
·
Datos de actividad en forma de logs
·
Mensajes de eventos
La publicación de mensajes es un
mecanismo para conectar varias aplicaciones con la ayuda de mensajes que se
enrutan entre ellos, por ejemplo, mediante un intermediario de mensajes como
Kafka. Kafka es una solución a los problemas en tiempo real de cualquier
solución de software, es decir, para tratar volúmenes de información en tiempo
real y enrutarlos a múltiples consumidores rápidamente. Kafka proporciona una
integración fluida entre la información de los productores y los consumidores
sin bloquear a los productores de la información y sin permitirles saber
quiénes son los consumidores finales.
Kafka también soporta la carga paralela
de datos en sistemas Hadoop sobre plataformas Big Data.
El siguiente diagrama muestra un
escenario típico de agregación y análisis de Big Data respaldado por el sistema
de mensajería Apache Kafka:
Configuración de un Cluster Kafka Single-Node Single-Broker
Para la siguiente discusión
suponemos que previamente hemos construido e instalado Kafka en una sola
máquina. Ahora es el momento de configurar un clúster Kafka basado en un único
agente (single node – single bróker), como se muestra en el siguiente diagrama:
Inicio del servidor ZooKeeper
Kafka proporciona el archivo de
configuración de ZooKeeper predeterminado y simple que se utiliza para iniciar
una única instancia local de ZooKeeper. Aquí, ZooKeeper sirve como la interfaz
de coordinación entre el broker de Kafka y los consumidores. La descripción
general de Hadoop que se ofrece en la Wiki de Hadoop es la siguiente (http://wiki.apache.org/hadoop/
ZooKeeper / ProjectDescription):
"ZooKeeper (http://zookeeper.apache.org)
permite que los procesos distribuidos se coordinen entre sí a través de un
espacio de nombre jerárquico compartido de registros de datos (znodes), muy
parecido a un sistema de archivos.
Las principales diferencias entre ZooKeeper y los sistemas de archivos
estándar son que cada znode puede tener datos asociados y los znodes están
limitados a la cantidad de datos que pueden tener. ZooKeeper se ha diseñado
para almacenar datos de coordinación: información de estado, configuración,
información de ubicación, etc. "
Primero, inicia ZooKeeper con el siguiente comando:
Deberías obtener una salida como la que se muestra en la
siguiente captura de pantalla:
Las propiedades importantes definidas en zookeeper.properties se muestran en el
siguiente código:
Por defecto, el servidor
ZooKeeper escuchará en *: 2181 / tcp. Para obtener información detallada sobre
cómo configurar múltiples servidores de ZooKeeper, visita http://zookeeper.apache.org/.
Inicio del agente Kafka
Ahora inicia el broker Kafka usando el siguiente comando:
Ahora deberías ver una salida como la que se muestra en la
siguiente captura de pantalla:
server.properties
define las siguientes propiedades importantes requeridas para
el agente de Kafka:
Para obtener una lista completa
de las propiedades de broker de Kafka, visite http://kafka.apache.org/documentation.html#brokerconfigs.
Creación de un topic de Kafka
Kafka proporciona una
utilidad de línea de comandos para crear topics
en el servidor de Kafka. Vamos a crear un topic
llamado kafkatopic con una única
partición y solo una réplica usando esta utilidad:
Deberías obtener una salida como la
que se muestra en la siguiente captura de pantalla:
La utilidad mencionada
anteriormente creará un topic y
mostrará el mensaje de creación exitoso como se muestra en la captura de
pantalla anterior.
Inicio de un productor para enviar mensajes
Kafka proporciona a los usuarios un cliente productor de línea de
comandos que acepta entradas de la línea de comandos y las publica como un
mensaje al clúster de Kafka. De manera predeterminada,
cada nueva línea introducida se considera como un mensaje nuevo. Se usa el
siguiente comando para iniciar el productor basado en consola para enviar los
mensajes:
Deberías ver una salida como la
que se muestra en la siguiente captura de pantalla:
Al iniciar el cliente de la línea
de comandos del productor, se requieren los siguientes parámetros:
·
broker-list
·
topic
broker-list especifica los intermediarios que se conectarán como <node_address: port>, es decir, localhost: 9092. El tema Kafkatopic es un topic que se creó en la sección de Creación un topic de Kafka. El nombre del topic es obligatorio para enviar un mensaje a un grupo específico
de consumidores.
Ahora escriba el siguiente
mensaje, This is single broker, y
presiona Enter. Deberías ver una
salida como la que se muestra en la siguiente captura de pantalla:
Prueba algunos mensajes más.
Inicio de un consumidor para consumir mensajes
En la ejecución del comando
anterior, debes obtener una salida como la que se muestra en la siguiente
captura de pantalla:
Las propiedades predeterminadas
para el consumidor se definen en consumer.properties.
Las propiedades importantes son:
Ejecutando los cuatro componentes
(zookeeper, broker, productor y consumidor) en diferentes terminales,
podrás introducir mensajes desde el terminal del productor y verlos aparecer en
el terminal del consumidor suscrito.
Se puede ver la información de uso
para las herramientas de línea de comandos tanto del productor como del
consumidor ejecutando el comando sin argumentos.
0 comentarios:
Publicar un comentario
Gracias por participar en esta página.
Click to see the code!
To insert emoticon you must added at least one space before the code.