Prólogo a la primera edición
Es un momento emocionante para Apache Kafka. Decenas de miles de organizaciones utilizan Kafka, entre ellas más de un tercio de las 500 empresas de Fortune. Se encuentra entre los proyectos de código abierto de más rápido crecimiento y ha generado un inmenso ecosistema a su alrededor. Está en el centro de un movimiento hacia la gestión y el procesamiento de flujos de datos.
¿De dónde viene Kafka? ¿Por qué lo construimos? ¿Y qué es exactamente?
Kafka empezó como un sistema de infraestructura interna que construimos en LinkedIn. Nuestra observación fue realmente sencilla: había muchas bases de datos y otros sistemas construidos para almacenar datos, pero lo que faltaba en nuestra arquitectura era algo que nos ayudara a manejar el flujo continuo de datos. Antes de construir Kafka, experimentamos con todo tipo de opciones estándar, desde sistemas de mensajería hasta herramientas de agregación de registros y ETL, pero ninguna de ellas nos daba lo que queríamos.
Al final decidimos construir algo desde cero. Nuestra idea era que, en lugar de centrarnos en almacenar montones de datos como nuestras bases de datos relacionales, almacenes de valores clave, índices de búsqueda o cachés, nos centraríamos en tratar los datos como un flujo en continua evolución y crecimiento, y construir un sistema de datos -y, de hecho, una arquitectura de datos- orientada en torno a esa idea.
Esta idea resultó ser incluso más ampliamente aplicable de lo que esperábamos. Aunque Kafka empezó impulsando aplicaciones en tiempo real y flujos de datos entre bastidores de una red social, ahora puedes verlo en el corazón de las arquitecturas de nueva generación de todos los sectores imaginables. Los grandes minoristas están reelaborando sus procesos empresariales fundamentales en torno a flujos de datos continuos, las empresas automovilísticas están recopilando y procesando flujos de datos en tiempo real de coches conectados a Internet, y los bancos también están replanteándose sus procesos y sistemas fundamentales en torno a Kafka.
Entonces, ¿de qué va esto de Kafka? ¿Cómo se compara con los sistemas que ya conoces y utilizas?
Hemos llegado a pensar en Kafka como una plataforma de streaming: un sistema que te permite publicar y suscribirte a flujos de datos, almacenarlos y procesarlos, y eso es exactamente lo que Apache Kafka está construido para ser. Acostumbrarse a esta forma de pensar sobre los datos puede ser un poco diferente a lo que estás acostumbrado, pero resulta ser una abstracción increíblemente poderosa para construir aplicaciones y arquitecturas. Kafka se compara a menudo con un par de categorías tecnológicas existentes: sistemas de mensajería empresarial, sistemas de big data como Hadoop, y herramientas de integración de datos o ETL. Cada una de estas comparaciones tiene cierta validez, pero también se queda un poco corta.
Kafka es como un sistema de mensajería, ya que te permite publicar y suscribirte a flujos de mensajes. En este sentido, es similar a productos como ActiveMQ, RabbitMQ, MQSeries de IBM y otros. Pero incluso con estas similitudes, Kafka tiene una serie de diferencias fundamentales con los sistemas de mensajería tradicionales que lo convierten en otro tipo de animal completamente distinto. He aquí las tres grandes diferencias: en primer lugar, funciona como un moderno sistema distribuido que se ejecuta como un clúster y puede escalar para manejar todas las aplicaciones incluso en la más masiva de las empresas. En lugar de ejecutar docenas de agentes de mensajería individuales, conectados a diferentes aplicaciones, esto te permite tener una plataforma central que puede escalar elásticamente para gestionar todos los flujos de datos de una empresa. En segundo lugar, Kafka es un verdadero sistema de almacenamiento construido para almacenar datos durante todo el tiempo que desees. Esto tiene enormes ventajas a la hora de utilizarlo como capa de conexión, ya que proporciona verdaderas garantías de entrega: sus datos están replicados, son persistentes y pueden conservarse todo el tiempo que quieras. Por último, el mundo del procesamiento de flujos eleva el nivel de abstracción de forma bastante significativa. Los sistemas de mensajería se limitan en su mayoría a repartir mensajes. Las capacidades de procesamiento de flujos de Kafka te permiten calcular flujos derivados y conjuntos de datos dinámicamente a partir de tus flujos con mucho menos código. Estas diferencias hacen de Kafka algo tan propio que no tiene sentido pensar en él como "otra cola más".
Otro punto de vista sobre Kafka -y una de nuestras lentes motivadoras para diseñarlo y construirlo- era pensar en él como una especie de versión en tiempo real de Hadoop. Hadoop te permite almacenar y procesar periódicamente datos de archivos a muy gran escala. Kafka te permite almacenar y procesar continuamente flujos de datos, también a gran escala. A nivel técnico, sin duda hay similitudes, y mucha gente ve el área emergente del procesamiento de flujos como un superconjunto del tipo de procesamiento por lotes que la gente ha hecho con Hadoop y sus diversas capas de procesamiento. Lo que esta comparación pasa por alto es que los casos de uso que abre el procesamiento continuo y de baja latencia son bastante diferentes de los que recaen naturalmente en un sistema de procesamiento por lotes. Mientras que Hadoop y los big data se dirigían a las aplicaciones analíticas, a menudo en el espacio del almacenamiento de datos, la naturaleza de baja latencia de Kafka lo hace aplicable al tipo de aplicaciones básicas que impulsan directamente un negocio. Esto tiene sentido: los acontecimientos en una empresa suceden todo el tiempo, y la capacidad de reaccionar ante ellos en el momento en que se producen facilita mucho la creación de servicios que impulsen directamente el funcionamiento de la empresa, retroalimenten las experiencias de los clientes, etc.
La última área con la que se compara Kafka es ETL o herramientas de integración de datos. Al fin y al cabo, estas herramientas mueven datos, y Kafka mueve datos. Esto también tiene cierta validez, pero creo que la diferencia fundamental es que Kafka ha invertido el problema. En lugar de una herramienta para extraer datos de un sistema e introducirlos en otro, Kafka es una plataforma orientada a flujos de eventos en tiempo real. Esto significa que no sólo puede conectar aplicaciones y sistemas de datos ya existentes, sino que también puede alimentar aplicaciones personalizadas creadas para desencadenarse a partir de estos mismos flujos de datos. Creemos que esta arquitectura centrada en flujos de eventos es algo realmente importante. En cierto modo, estos flujos de datos son el aspecto más central de una empresa digital moderna, tan importantes como los flujos de caja que verías en un estado financiero.
La capacidad de combinar estas tres áreas -unir todos los flujos de datos en todos los casos de uso- es lo que hace que la idea de una plataforma de streaming resulte tan atractiva para la gente.
Aún así, todo esto es un poco diferente, y aprender a pensar y construir aplicaciones orientadas a flujos continuos de datos es todo un cambio de mentalidad si vienes del mundo de las aplicaciones de estilo solicitud/respuesta y las bases de datos relacionales. Este libro es absolutamente la mejor forma de aprender sobre Kafka, desde sus aspectos internos hasta las API, escrito por algunas de las personas que mejor lo conocen. Espero que disfrutes de su lectura tanto como yo.
Get Kafka: La Guía Definitiva, 2ª Edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.