La ejecución de apps, servicios web, apli­ca­cio­nes de servidor y otros sistemas similares puede plantear muchos desafíos a los pro­fe­sio­na­les: uno de los más ha­bi­tua­les es ga­ra­n­ti­zar una tra­n­s­mi­sión fluida y un pro­ce­sa­mie­n­to rápido y eficiente de los flujos de datos. Existe un software que facilita mucho ambas cosas: la apli­ca­ción de me­n­sa­je­ría y tra­n­s­mi­sión de Apache Kafka. Esta solución de código abierto, de­sa­rro­lla­da como servicio de cola de mensajes para la pla­ta­fo­r­ma de LinkedIn en sus inicios, ofrece en la ac­tua­li­dad un completo paquete para el al­ma­ce­na­mie­n­to, la tra­n­s­mi­sión y el pro­ce­sa­mie­n­to de datos.

¿Qué es Apache Kafka?

El software Apache Kafka es una apli­ca­ción mu­l­ti­pla­ta­fo­r­ma de código abierto de­sa­rro­lla­da por Apache Software Fou­n­da­tion y es­pe­cia­li­za­da en el pro­ce­sa­mie­n­to de flujos de datos. El proyecto original fue lanzado en 2011 por LinkedIn, la empresa re­s­po­n­sa­ble de la red social pro­fe­sio­nal del mismo nombre. Por aquel entonces, el objetivo era crear un sistema de cola de mensajes. Sin embargo, desde que se publicó con licencia libre (Apache 2.0), el software no ha dejado de evo­lu­cio­nar, pasando de ser una sencilla apli­ca­ción de cola de mensajes a co­n­ve­r­ti­r­se en una pla­ta­fo­r­ma de tra­n­s­mi­sión de alto re­n­di­mie­n­to y gran potencia utilizada por empresas tan conocidas como Netflix, Microsoft o Airbnb.

En 2014, los primeros de­sa­rro­lla­do­res del equipo de LinkedIn fundaron la empresa Confluent, que desde entonces ofrece la versión más completa de Apache Kafka bajo el nombre de Confluent Platform. Esta versión co­m­ple­me­n­ta el programa con muchas funciones adi­cio­na­les, de las cuales algunas también son de código abierto y otras, de pago.

¿Cuáles son las funciones básicas de Apache Kafka?

Ante todo, Apache Kafka ha sido diseñado para optimizar la tra­n­s­mi­sión y el pro­ce­sa­mie­n­to de los flujos de datos que se in­te­r­ca­m­bian entre la fuente y el receptor por conexión directa. Kafka actúa como una entidad de me­n­sa­je­ría entre el emisor y el receptor, so­l­ve­n­ta­n­do los in­co­n­ve­nie­n­tes más ha­bi­tua­les que conlleva este tipo de conexión.

Uno de los problemas más típicos que soluciona la pla­ta­fo­r­ma de Apache es la im­po­si­bi­li­dad de almacenar datos o mensajes en caché si el de­s­ti­na­ta­rio no está di­s­po­ni­ble (por ejemplo, si hay fallos en la red). Además, una cola de Kafka bien co­n­fi­gu­ra­da evita que el receptor se vea saturado por el emisor, como suele pasar cuando la in­fo­r­ma­ción enviada por conexión directa va más rápido de lo que puede recibirse y pro­ce­sar­se. El software de Kafka también responde bien cuando al receptor le llega el mensaje, pero se bloquea en el momento de pro­ce­sar­lo: con Apache Kafka, el emisor recibe un aviso de error que le informa del fallo, en lugar de asumir que se ha procesado el mensaje.

A di­fe­re­n­cia de los meros servicios de colas de mensajes, como las bases de datos, el software de Apache Kafka tolera los errores, lo que le permite procesar los mensajes o datos de forma continua. Esta ca­ra­c­te­rí­s­ti­ca de Apache Kafka, en co­m­bi­na­ción con su alta es­ca­la­bi­li­dad y su capacidad para di­s­tri­buir la in­fo­r­ma­ción a un número ilimitado de sistemas (registro de tra­n­sac­cio­nes di­s­tri­bui­das), lo convierte en una solución ideal para los servicios que deban asegurar un pro­ce­sa­mie­n­to y al­ma­ce­na­mie­n­to rápido de datos, así como una gran di­s­po­ni­bi­li­dad.

Las claves de la ar­qui­te­c­tu­ra de Apache Kafka

Apache Kafka se ejecuta como un clúster (red de or­de­na­do­res) en uno o más se­r­vi­do­res que pueden en­co­n­trar­se en centros de datos di­fe­re­n­tes. Los nodos o puntos de in­te­r­se­c­ción del clúster, de­no­mi­na­dos brokers, almacenan los flujos de datos entrantes, cla­si­fi­cá­n­do­los en los llamados topics. Los datos se dividen en pa­r­ti­cio­nes y se replican y di­s­tri­bu­yen en el clúster, re­ci­bie­n­do un sello de tiempo. De esta manera, la pla­ta­fo­r­ma de tra­n­s­mi­sión asegura una gran di­s­po­ni­bi­li­dad y un acceso de lectura rápido. Apache Kafka distingue los temas entre “normal topics” y “compacted topics”. Los mensajes de normal topics pueden borrarse una vez se ha excedido el período o el límite de al­ma­ce­na­mie­n­to, mientras que las entradas de compacted topics no están sujetas a li­mi­ta­cio­nes de tiempo ni espacio.

Las apli­ca­cio­nes que escriben datos en los clústeres de Kafka se denominan pro­du­c­to­res, mientras que las apli­ca­cio­nes que leen los datos de un clúster se llaman co­n­su­mi­do­res. El co­m­po­ne­n­te central al que acceden los pro­du­c­to­res y co­n­su­mi­do­res cuando procesan se­cue­n­cias de datos es una bi­blio­te­ca de Java llamada Kafka Streams. La ca­ra­c­te­rí­s­ti­ca de escritura tra­n­sac­cio­nal garantiza que los mensajes se tra­n­s­mi­tan solo una vez (sin du­pli­ca­ción), lo que también se conoce como “exactly-once delivery” (o “entrega una sola vez”).

Nota

La bi­blio­te­ca Kafka Streams de Java es la solución estándar re­co­me­n­da­da para el pro­ce­sa­mie­n­to de datos en clústeres de Kafka. No obstante, también es posible utilizar Apache Kafka con otros sistemas de pro­ce­sa­mie­n­to.

Pri­n­ci­pios técnicos: las in­te­r­fa­ces de Kafka

Apache Kafka ofrece cinco in­te­r­fa­ces básicas distintas, mediante las cuales las apli­ca­cio­nes pueden acceder al software:

  • Kafka Producer: la API Producer permite que las apli­ca­cio­nes envíen flujos de datos a los brokers de los clústers de Apache para ca­te­go­ri­zar­los y al­ma­ce­nar­los (en los topics me­n­cio­na­dos an­te­rio­r­me­n­te).
  • Kafka Consumer: la API Consumer pro­po­r­cio­na a los co­n­su­mi­do­res de Apache Kafka acceso de lectura a los datos al­ma­ce­na­dos en los topics del clúster.
  • Kafka Streams: mediante la API Streams, las apli­ca­cio­nes pueden actuar como pro­ce­sa­do­res de flujos para convertir los flujos de datos entrantes en salientes.
  • Kafka Connect: gracias a la API Connect, es posible co­n­fi­gu­rar pro­du­c­to­res y co­n­su­mi­do­res re­uti­li­za­bles que co­mu­ni­quen los topics de Kafka con las apli­ca­cio­nes o sistemas de bases de datos exi­s­te­n­tes.
  • Kafka Ad­mi­n­Clie­nt: la interfaz Ad­mi­n­Clie­nt se utiliza para facilitar la ad­mi­ni­s­tra­ción y su­pe­r­vi­sión de los clústeres de Kafka.

Las apli­ca­cio­nes cliente y los se­r­vi­do­res in­di­vi­dua­les de los clústeres de Apache se comunican a través de un protocolo sencillo, de alto re­n­di­mie­n­to y mu­l­ti­le­n­gua­je basado en TCP. De manera pre­de­te­r­mi­na­da, los de­sa­rro­lla­do­res ponen a di­s­po­si­ción un cliente Java para Apache Kafka, aunque también hay clientes en muchos otros lenguajes, como PHP, Python, C/C ++, Ruby, Perl o Go.

Casos de apli­ca­ción de Apache Kafka

Desde sus inicios, Apache Kafka ha sido diseñado para ofrecer un alto re­n­di­mie­n­to de lectura y escritura. Gracias a las API me­n­cio­na­das, así como a su gran fle­xi­bi­li­dad, es­ca­la­bi­li­dad y to­le­ra­n­cia a errores, este software de código abierto supone una buena solución para las apli­ca­cio­nes más diversas. Apache Kafka es es­pe­cia­l­me­n­te adecuado en los si­guie­n­tes es­ce­na­rios:

  • Publicar y su­s­cri­bi­r­se a flujos de datos: la historia de este proyecto de código abierto comenzó con el uso de Apache Kafka como sistema de me­n­sa­je­ría. Aunque el software ha evo­lu­cio­na­do mucho, sigue siendo óptimo tanto para la tra­n­s­mi­sión directa de mensajes a través del sistema de colas como para el envío de mensajes broadcast.
  • Procesar flujos de datos: las apli­ca­cio­nes que necesitan reac­cio­nar a ciertos eventos en tiempo real y, por este motivo, deben procesar los flujos de datos de la manera más rápida y eficaz posible, en­cue­n­tran un poderoso aliado en Apache Kafka gracias a la API Streams.
  • Almacenar flujos de datos: con su to­le­ra­n­cia a los errores, Apache Kafka también resulta un excelente sistema de al­ma­ce­na­mie­n­to di­s­tri­bui­do. Obtendrás los mismos re­su­l­ta­dos tanto si deseas guardar 50 kilobytes como 50 terabytes de datos cohe­re­n­tes en un servidor o se­r­vi­do­res.

Por supuesto, puedes combinar como quieras todos estos elementos. Por ejemplo, como pla­ta­fo­r­ma de tra­n­s­mi­sión compleja, Apache Kafka no solo almacena los datos y los pone a di­s­po­si­ción en cualquier momento, sino que también los procesa en tiempo real y los vincula a todas las apli­ca­cio­nes y sistemas deseados.

Algunos casos de apli­ca­ción típicos de Apache Kafka:

  • Sistema de me­n­sa­je­ría
  • Analítica web
  • Sistema de al­ma­ce­na­mie­n­to
  • Pro­ce­sa­mie­n­to de flujo
  • Event sourcing
  • Análisis/gestión de archivos de registro
  • So­lu­cio­nes de monitoreo
  • Registro de tra­n­sac­cio­nes
Ir al menú principal