Ocho minutos
Apache Kafka es una plataforma distribuida de transmisión de eventos de código abierto que procesa datos en tiempo real. Kafka se destaca por brindar soporte a aplicaciones basadas en eventos y construir canalizaciones de datos confiables, ofreciendo baja latencia y entrega de datos de alto rendimiento.
Hoy en día, miles de millones de fuentes de datos producen continuamente flujos de información, a menudo en forma de eventos, estructuras de datos fundacionales que registran cualquier suceso en el sistema o entorno.
Normalmente, un evento es una acción que impulsa otra acción como parte de un proceso. Un cliente que realiza un pedido, elige un asiento en un vuelo o envía un formulario de registro son ejemplos de eventos. Un evento no tiene por qué implicar a una persona, por ejemplo, el informe de la temperatura de un termostato conectado en un momento dado también es un evento.
La transmisión de eventos ofrece oportunidades para que las aplicaciones respondan al instante a la nueva información. Las plataformas de datos en streaming, como Apache Kafka, permiten a los desarrolladores crear sistemas que consumen, procesan y actúan sobre los datos a medida que llegan, manteniendo el orden y la fiabilidad de cada evento.
Kafka se ha convertido en la plataforma de transmisión de eventos más utilizada, capaz de consumir y procesar billones de registros diariamente sin ningún retraso perceptible en el rendimiento para admitir volúmenes escalables. Más del 80 % de las organizaciones de la lista Fortune 500 utilizan Kafka, incluidas Target, Microsoft, AirBnB y Netflix, para ofrecer experiencias de cliente en tiempo real y basadas en datos.
En 2011, LinkedIn desarrolló Apache Kafka para satisfacer la creciente necesidad de la empresa de un sistema de alto rendimiento y baja latencia capaz de manejar volúmenes masivos de datos de eventos en tiempo real. Construido utilizando Java y Scala, Kafka fue posteriormente de código abierto y donado a la Apache Software Foundation.
Aunque las organizaciones ya admitían o utilizaban sistemas tradicionales de colas de mensajes (por ejemplo, Amazon SQS de AWS), Kafka introdujo una arquitectura de sistema de mensajería fundamentalmente diferente.
A diferencia de las colas de mensajes convencionales que eliminan los mensajes después de su consumo, Kafka conserva los mensajes durante un tiempo configurable, lo que permite a varios consumidores leer los mismos datos de forma independiente. Esta capacidad hace que Kafka sea ideal para la mensajería y el abastecimiento de eventos, el procesamiento de flujos y la creación de canalizaciones de datos en tiempo real.
Hoy en día, Kafka se ha convertido en el estándar de facto para la transmisión de eventos en tiempo real. Los sectores que utilizan Kafka incluyen finanzas, comercio electrónico, telecomunicaciones y transporte, donde la capacidad de manejar grandes volúmenes de datos de forma rápida y fiable es esencial.
Kafka es una plataforma distribuida; se ejecuta como un clúster tolerante a fallos y de alta disponibilidad que puede abarcar varios servidores e incluso varios centros de datos.
Kafka tiene tres capacidades principales:
Los productores (aplicaciones o temas) escriben registros en temas denominados registros que almacenan los registros en el orden en que ocurrieron entre sí. A continuación, los temas se dividen en particiones y se distribuyen en un clúster de agentes Kafka (servidores).
Dentro de cada partición, Kafka mantiene el orden de los registros y los almacena duraderamente en el disco durante un periodo de retención configurable. Aunque el orden está garantizado dentro de una partición, no lo está entre particiones. Según las necesidades de la aplicación, los consumidores pueden leer de forma independiente estas particiones en tiempo real o desde un desplazamiento específico.
Kafka garantiza la confiabilidad mediante la replicación de particiones. Cada partición tiene un líder (en un agente) y uno o más seguidores (réplicas) en otros agentes. Esta replicación ayuda a tolerar fallos de nodos sin pérdida de datos.
Históricamente, Kafka dependía de Apache ZooKeeper, un servicio de coordinación centralizado para corredores distribuidos. ZooKeeper garantizó que los brokers de Kafka permanecieran sincronizados, incluso si algunos brokers fallaban. En 2011, Kafka introdujo el modo KRaft (Kafka Raft Protocol), eliminando la necesidad de ZooKeeper al consolidar estas tareas en los propios brokers de Kafka. Este cambio reduce las dependencias externas, simplifica la arquitectura y hace que los clústeres de Kafka sean más tolerantes a fallas y más fáciles de administrar y escalar.
Los desarrolladores pueden aprovechar las capacidades de Kafka a través de cuatro principales interfaces de programación de aplicaciones (API):
La API Producer permite a una aplicación publicar una secuencia en un tema de Kafka. Una vez que se escribe un registro en un tema, no se puede modificar ni eliminar. En su lugar, permanece en el tema durante un período de tiempo preconfigurado, durante dos días o hasta que se agote el espacio de almacenamiento.
La API de consumidor permite que una aplicación se suscriba a uno o varios temas y que consuma y procese la secuencia almacenada en el tema. Puede trabajar con registros del tema en tiempo real o ingerir y procesar registros anteriores.
Esta API se basa en las API de productor y consumidor y añade capacidades de procesamiento complejas que permiten a una aplicación realizar un procesamiento continuo de front-to-backstream. Específicamente, la API de transmisiones implica consumir registros de uno o más temas, analizarlos, agregarlos o transformarlos según sea necesario, y publicar los flujos resultantes en los mismos temas u otros temas.
Aunque las API de productor y consumidor se pueden utilizar para procesar transmisiones de forma sencilla, la API de transmisiones permite el desarrollo de aplicaciones de transmisión de datos y eventos más sofisticadas.
Esta API permite a los desarrolladores crear conectores, que son productores o consumidores reutilizables que simplifican y automatizan la integración de una fuente de datos en un clúster de Kafka.
Los desarrolladores utilizan Kafka principalmente para crear dos tipos de aplicaciones:
Aplicaciones diseñadas específicamente para mover millones y millones de datos o registros de eventos entre sistemas empresariales, a escala y en tiempo real. Las aplicaciones deben moverlos de forma fiable, sin riesgo de corrupción, duplicación de datos u otros problemas que suelen producirse al mover volúmenes tan grandes de datos a altas velocidades.
Por ejemplo, las instituciones financieras utilizan Kafka para transmitir miles de transacciones por segundo a través de pasarelas de pago, servicios detección del fraude y sistemas de contabilidad, lo que garantiza un flujo de datos preciso y en tiempo real sin duplicaciones ni pérdidas.
Aplicaciones impulsadas por flujos de registros o transmisiones de datos y que generan flujos propios. En el mundo impulsado por lo digital, nos encontramos con estas aplicaciones todos los días.
Algunos ejemplos son los sitios de comercio electrónico que actualizan la disponibilidad de los productos en tiempo real o las plataformas que ofrecen contenidos y anuncios personalizados basados en la actividad en directo de los usuarios. Kafka impulsa estas experiencias mediante la transmisión de interacciones de usuarios directamente a los motores de análisis y recomendación.
Kafka se integra con varias otras tecnologías, muchas de las cuales forman parte de Apache Software Foundation (ASF). Las organizaciones suelen utilizar estas tecnologías en arquitecturas más grandes basadas en eventos, procesamiento de flujos o soluciones de análisis de big data.
Algunas de estas tecnologías son de código abierto, mientras que Confluent, una plataforma construida alrededor de Kafka, proporciona características de nivel empresarial y servicios gestionados para el proceso de datos en tiempo real a escala. Empresas como IBM, Amazon Web Services y otras ofrecen soluciones basadas en Kafka (por ejemplo, IBM Event Streams, Amazon Kinesis) que se integran con Kafka para una transmisión de eventos escalable.
El ecosistema Apache Kafka incluye:
Apache Spark es un motor de análisis para el proceso de datos a gran escala. Puede usar Spark para realizar análisis en flujos entregados por Apache Kafka y para producir aplicaciones de procesamiento de secuencias en tiempo real, como el análisis de secuencias de clics.
Apache NiFi es un sistema de gestión de flujo de datos con una interfaz visual de arrastrar y soltar. Dado que NiFi puede ejecutarse como productor y consumidor de Kafka, es una herramienta ideal para gestionar los desafíos del flujo de datos que Kafka no puede abordar.
Apache Flink es un motor para realizar cálculos a gran escala sobre flujos de eventos con una alta velocidad y una baja latencia constantes. Flink puede consumir flujos como consumidor de Kafka, realizar operaciones en tiempo real basadas en estos flujos y publicar los resultados para Kafka u otra aplicación.
Apache Hadoop es un marco de software distribuido que le permite almacenar cantidades masivas de datos en un clúster de ordenadores para su uso en análisis de big data, machine learning, minería de datos y otras aplicaciones basadas en datos que procesan datos estructurados y no estructurados. Kafka se utiliza a menudo para crear una canalización de datos de transmisión en tiempo real a un clúster de Hadoop.
Apache Camel es un marco de integración con un motor de enrutamiento y mediación basado en reglas. Admite Kafka como componente, lo que permite una fácil integración de datos con otros sistemas (por ejemplo, bases de datos, colas de mensajería), lo que permite a Kafka convertirse en parte de una arquitectura más grande basada en eventos.
Apache Cassandra es una base de datos NoSQL altamente escalable diseñada para manejar grandes cantidades de datos en muchos servidores básicos sin ningún punto único de falla.
Kafka se utiliza habitualmente para transmitir datos a Cassandra para la ingesta de datos en tiempo real y para crear aplicaciones escalables y tolerantes a fallos.
RabbitMQ es un popular agente de mensajes de código abierto que permite que las aplicaciones, los sistemas y los servicios se comuniquen mediante la traducción de protocolos de mensajería. Dado que Kafka comenzó como un agente de mensajes (y todavía se puede utilizar como tal) y RabbitMQ admite un modelo de mensajería de publicación/suscríbase (entre otros), Kafka y RabbitMQ se comparan a menudo como alternativas. Sin embargo, tienen diferentes propósitos y están diseñados para abordar varios tipos de casos de uso. Por ejemplo, los temas de Kafka pueden tener varios suscriptores, mientras que cada mensaje de RabbitMQ solo puede tener uno. Además, los temas de Kafka son duraderos, mientras que los mensajes de RabbitMQ se eliminan una vez consumidos.
A la hora de elegir entre ellas, es fundamental tener en cuenta las necesidades específicas de su aplicación, como el rendimiento, la durabilidad de los mensajes y la latencia. Kafka es ideal para la transmisión de eventos a gran escala, mientras que RabbitMQ destaca en los escenarios que requieren un enrutamiento de mensajes flexible y un procesamiento de baja latencia.
La integración de Apache Kafka y la IA de código abierto transforma la forma en que las organizaciones gestionan los datos en tiempo real y la inteligencia artificial. Cuando se combina con herramientas de IA de código abierto, Kafka permite la aplicación de modelos de IA preentrenados a datos en vivo, lo que respalda la toma de decisiones y la automatización en tiempo real.
La IA de código abierto ha hecho más accesible la inteligencia artificial, y Kafka proporciona la infraestructura necesaria para procesar los datos en tiempo real. Esta configuración elimina la necesidad del procesamiento por lotes, lo que permite a las empresas actuar sobre los datos inmediatamente a medida que se producen.
Por ejemplo, una empresa de comercio electrónico podría utilizar Kafka para transmitir las interacciones con los clientes, como los clics o las visualizaciones de los productos, a medida que se producen. Los modelos de IA preentrenados procesan estos datos en tiempo real y ofrecen recomendaciones personalizadas u ofertas específicas. Kafka gestiona el flujo de datos, mientras que los modelos de IA se adaptan en función de los datos entrantes, lo que mejora el compromiso con el cliente.
Al combinar el proceso de datos en tiempo real con modelos de IA, las organizaciones pueden tomar decisiones más rápidas en la detección del fraude, mantenimiento predictivo o precios dinámicos, lo que permite sistemas más receptivos y eficientes.