Primeros pasos con Apache Kafka en Español !


Apache Kafka es una plataforma distribuida de Streaming utilizada para construir plataformas de procesamiento en tiempo real y permite las siguientes operaciones:

  • Publicar y suscribirse a flujos de información
  • Guardar flujos de información en un modo tolerante a fallas
  • Procesar los flujos de información en tiempo real

Paso 1: Descargando Apache Kafka

Para utilizar apache Kafka debemos descargar el archivo binario del sitio https://kafka.apache.org/downloads, seleccionar la versión deseada (para este ejemplo utilizaremos la versión 0.11.0.1) y en la sección Binary downloads descargar la versión de acuerdo a la versión de Scala con la que contamos en nuestro equipo(Nota, esto solo importa si utilizas Scala, si no lo haces no importa la versión que selecciones).

Una vez que se descargó el archivo correctamente debemos descomprimir el archivo y acceder al folder utilizando los siguientes comandos:

tar -xzf kafka_2.12-0.11.0.1.tgz
cd kafka_2.12-0.11.0.1

Paso 2: Iniciando el servidor

Una vez que nos encontramos en el folder el siguiente paso es iniciar los servidores, digo servidores porque para iniciar Kafka es necesario utilizar Zookeeper. Es posible descargar un zookeeper diferente, pero al descargar el binario de kafka este incluye un zookeeper. Nota este zookeeper será una instancia con un solo nodo, así es que no es conveniente utilizarlo de este modo en ambientes productivos.

Para iniciar zookeeper es necesario ejecutar el siguiente comando:

bin/zookeeper-server-start.sh config/zookeeper.properties

El siguiente paso es iniciar el servidor de Kafka

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

Una vez ejecutados los pasos anteriores tendremos un servidor de Kafka funcionando y listo para utilizarse.

Paso 3: Creando topics a utilizar

Una vez que tenemos el servidor de Kafka funcionando el siguiente paso antes de enviar y recibir mensajes es crear un topic, Un topic es una categoría de mensajes y será utilizado para almacenar los mensajes de una aplicación que pertenecen al mismo contexto. Para crear un topic ejecutaremos el siguiente comando:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

Analizando el comando anterior:

  • bin/kafka-topics.sh : Es el script sh que se utilizará para crear un topic en kafka
  • –create : Indica la operación a realizar, en este caso queremos crear un topic de kafka
  • –zookeeper : Como se puede observar no se utilizará la url de kafka para crear el topic, en su lugar utilizaremos la de zookeeper.
  • –replication-factor 1 : Con un replication factor N indicaremos que nuestro server soportará N-1 caídas antes de perder algún registro. En este caso solo contamos con un nodo en nuestro cluster así que si este cluster se cae perderemos la información almacenada.
  • –partitions 1 : Por cada topic, Kafka mantiene un log particionado, cada partición es una ordenada e inmutable secuencia de registros. De este modo los mensajes tienen asignado un número secuencial llamado offset que identifica a cada mensaje dentro de una partición.

Paso 4: Enviar y recibir mensajes

Una vez que contamos con el servidor y el topic que utilizaremos, el siguiente paso será empezar a enviar y recibir mensajes, para esto necesitaremos de dos componentes, un consumer y un producer, a continuación se presenta como ejecutar cada uno de ellos:

Consumer:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test

Con el comando anterior seremos capaces de crear un consumer para el topic que creamos, ahora analicemos el comando:

  • bin/kafka-console-consumer.sh : Script sh que permite leer mensajes de Kafka
  • –bootstrap-server : Servidor de Kafka de donde se leerán los mensajes, puede recibir más de uno
  • –topic : Topic del cual deseamos enviar y recibir mensajes

Producer:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

Con el comando anterior seremos capaces de crear un producer para enviar mensajes a los topic de Kafka, ahora analicemos el comando:

  • bin/kafka-console-producer.sh : Script sh que permite enviar mensajes a Kafka
  • –broker-list : Lista de servidores de Kafka que recibirán los mensajes, puede recibir más de uno
  • –topic : Topic al cual se depositarán los mensajes leidos

Paso 4: Viendo todo junto

A continuación se presenta como se ve todo junto funcionando:

Captura de pantalla 2017-10-04 a las 4.00.54 p.m..png

Casos de uso para Kafka

A continuación se presentan algunos casos de uso para Apache Kafka:

  • Messaging: Kafka funciona muy bien al reemplazar sistemas de mensajes. Estos sistemas de mensajes son utilizados para desacoplar procesos de los productores de los datos, generar un buffer de mensajes que aún no se procesarán (Cuando la demanda de trabajo es más que la capacidad de procesamiento), etc. En comparación con los sistemas de mensajes actuales, Kafka cuenta con un mejor throughput(rendimiento), replicación, tolerancia a fallas y está construido en base a particiones lo cual lo hace una muy buena solución para el procesamiento de trabajo a gran escala.
  •  Web site activity tracking (Monitoreo de la actividad de los usuarios en un sitio web): Este es el caso de uso por el que Kafka fue creado originalmente, de este modo los sitios web publican en topics en tiempo real la actividad en el sitio, las interacciones de los usuarios, las búsquedas, etc.
  • Stream processing(Procesamiento de flujos):El procesamiento de datos en diferentes pasos es un uso común de Kafka, leer datos de un sitio, colocarlos en un topic, leerlo en tiempo real y realizar procesamiento, transformaciones, agregaciones, etc. Una herramienta muy común para integrarla con esto es apache Storm, para saber más sobre esto te recomendamos nuestro post Procesamiento en tiempo real de Tweets utilizando Apache Storm en español.

Estos son solo algunos casos de estudio, existe un artículo que entra en más detalles sobre esto en el siguiente enlace The Log: What every software engineer should know about real-time data’s unifying abstraction.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

3 Comentarios »

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s