Este va a ser la primera de una serie de entradas dedicadas al ecosistemas de Kafka,  y de cómo podemos usarlo para escalar aplicaciones web.

A lo largo de la serie veremos lo siguiente:

  1. ¿Qué es Apache Kafka?
  2. Cómo instalar y configurar el Oracle Java Development Kit.
  3. Cómo instalar y configurar en modo clúster el Apache Zookeeper.
  4. Cómo instalar y configurar en modo clúster el Apache Kafka.
  5. Operaciones habituales en Apache Zookeeper.
  6. Operaciones habituales en Apache Kafka.
  7. Cómo monitorizar Zookeeper desde el PRTG.
  8. Cómo monitorizar Apache Kafka con el PRTG.
  9. Mejoras de rendiemiento en Apache Kafka y valores óptimos de los sensores.
  10. Problemas frecuentes en la instalación, configuración y uso de un clúster Kafka.

Todos los ficheros de configuración de esta serie de posts estan publicados en gitlab.

Según la Wikipedia,

La escalabilidad es la propiedad deseable de un sistema, una red o un proceso, que indica su habilidad para reaccionar y adaptarse sin perder calidad, o bien manejar el crecimiento continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande sin perder calidad en los servicios ofrecidos. En general, también se podría definir como la capacidad del sistema informático de cambiar su tamaño o configuración para adaptarse a las circunstancias cambiantes.

Antes de ver cómo nos puede ayudar Kafka a mejorar la escalabilidad de nuestro sistema, veamos qué es y cómo funciona. Kafka es un sistema de almacenamiento distribuido, particionado y replicado basado en el patrón publish/subscribe. Sus tres características principales son las siguientes:

  • Permite publicar y suscribirse a flujos de registros (streams), de forma similar a una cola de mensajes.
  • Es tolerante a fallos.
  • Permite procesar los flujos de registros a medida que ocurren.

De éstas características nos centraremos en la primera, es decir, la de usar Kafka como una flujo de registros. Kafka se ejecuta como un clúster en uno o más servidores, los cuales almacenan los registros (mensajes) en colas (topics). Cada mensaje consta de una clave, una marca temporal y un valor. Kafka consta de 4 API’s, cada una de ellas con una funcionalidad diferente.

  • La API de Producer permite que una aplicación publique un mensaje a uno o más topics de Kafka.
  • El API de Consumer permite que una aplicación se suscriba a uno o más topics y procese el flujo de mensajes que previamente los Producers han creado en esos topics.
  • El API de Streams permite que una aplicación actúe como un procesador de streams, consumiendo una secuencia de entrada de uno o más topics y produciendo una secuencia de salida a uno o más topics de salida, transformando efectivamente los streams de entrada a los flujos de salida.
  • La API de Connector permite crear y ejecutar productores reutilizables o consumidores que conectan topics de Kafka a aplicaciones o sistemas de datos existentes. Por ejemplo, un conector a una base de datos relacional puede capturar cada cambio en una tabla.

Es decir, centrandonos en las dos primeras API’s,  tenemos una serie de procesos, Producers, que generan mensajes que se organizan en topics dentro de los brokers. Estos brokers publican sus colas para que otros procesos, Consumers, los procesen. Kafka tiene una dependencia de Apache Zookeeper. Zookeeper ofrece un servicio para la coordinación de procesos distribuidos altamente confiable que da soluciones a varios problemas de coordinación para grandes sistemas distribuidos. Entre los servicios que proporciona Zookeeper podemos destacar los siguientes,

  • Compartir configuraciones comunes (podría verse como un sistema de almacenamiento key/value distribuido).
  • Administrar la pertenencia o no al clúster (por ejemplo, ver qué brokers están conectados al clúster y cuáles no).
  • Ayuda en las elecciones (servicios de Quorum).
  • Compartir locks del sistema.

Para ver todos los servicios que ofrece Zookeeper podemos visitar esta web. Así que en definitiva este es el esquema de la arquitectura que nos quedaría para un clúster kafka. Tenemos N procesos producers que nos generarán mensajes en los brokers, que al funcionar como un clúster pueden ser de 1 a N nodos, a los que los consumers se conectaran para procesar dichos mensajes. Aunque lo veremos en futuros posts, el procesamiento de las colas se hace en base a la lectura por parte de los consumers de las colas, que se referencian por offsets.

arc

Pero en realidad ¿qué quiere decir que kafka funcione en modo clúster? y ¿qué ventajas nos proporciona esto?. Pues básicamente las ventajas de cualquier clúster, es decir, para los clientes el clúster es visto como un todo, de forma que a priori no necesitamos conocer los detalles de la implementación interna, sencillamente nos conectamos al sistema y punto. Si internamente éste está formado por 1 o 100 computadoras, al cliente no le importa en absoluto. Además, kafka ofrece capacidad de replica y de particionado, como veremos más adelante, con lo cuál, nos ofrece seguridad en la persistencia de los datos en caso de caída de algún nodo.

Una vez vistos los conceptos básicos, veremos como instalar y configurar kafka así como sus dependencias.

One thought on “ Apache Kafka ”

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 )

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 )

Google+ photo

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

Conectando a %s