¿Qué es Apache Kafka?

Apache Kafka es una plataforma de procesamiento de flujos de datos de código abierto, utilizado para construir aplicaciones de procesamiento en tiempo real, especialmente valioso en arquitecturas orientadas a eventos donde se requiere alta capacidad de procesamiento y baja latencia.

2024-07-25

Apache Kafka es una plataforma de procesamiento de flujos de datos de código abierto que fue desarrollada inicialmente por LinkedIn y luego donada a la Apache Software Foundation.

Apache Kafka es utilizado principalmente para construir aplicaciones de procesamiento en tiempo real que pueden manejar flujos de datos de gran volumen.

Es especialmente útil en arquitecturas orientadas a eventos donde se requiere una alta capacidad de procesamiento y baja latencia para manejar grandes volúmenes de eventos o mensajes.

Apache Kafka se adapta de manera natural a una arquitectura basada en publicación y suscripción (Pub/Sub) y amplía este modelo con capacidades adicionales que lo hacen adecuado para una amplia variedad de casos de uso más allá de la mensajería simple.

¿Qué es una arquitectura Pub/Sub?

Una arquitectura basada en eventos Pub/Sub es un patrón de diseño donde los componentes del sistema interactúan principalmente a través de la transmisión y recepción de eventos.

Los eventos poseen datos sobre cambios de estado que ocurren dentro del sistema, donde  existe una comunicación indirecta entre los componentes que producen eventos (publicadores) y los que reaccionan a ellos (suscriptores).

Definamos qué componentes interactúan en esté tipo de arquitectura:

  • Publicadores (Publishers): Son los que generan y envían mensajes al sistema.En estos se definen tópicos al cual pertenece cada mensaje, sin la necesidad de conocer quiénes serán los receptores.
  • Suscriptores (Subscribers): Estos componentes se suscriben a los publicadores y reciben mensajes correspondientes a los tópicos que tienen interés. No necesitan saber quién generó los mensajes.
  • Sistema de Mensajería: Actúa como intermediario, manteniendo la lista de tópicos y suscripciones, y asegurando la entrega de los mensajes a los suscriptores correctos. Este sistema puede ofrecer características como el almacenamiento de mensajes, manejo de la escalabilidad y la garantía de entrega.

Características clave de Apache Kafka:

Palabras clave: Almacenamiento de grandes cantidades de datos, procesamiento en tiempo real, durabilidad, escalabilidad, bajas latencias.

  • Publicación y Suscripción a Flujos de Datos: Permite que los productores publiquen mensajes y que los consumidores se suscriban a flujos de datos similares a un sistema de mensajes tradicional.
  • Almacenamiento de Datos: Kafka puede almacenar grandes cantidades de datos por un período de tiempo configurable, lo que permite consumir estos datos más tarde o varias veces.
  • Procesamiento en Tiempo Real: Kafka puede ser usado para procesar datos en tiempo real usando Kafka Streams o conectándose con sistemas de procesamiento de datos como Apache Spark o Apache Flink.
  • Durabilidad y Escalabilidad: Kafka es altamente durable, utilizando un sistema de almacenamiento distribuido que replica los datos para prevenir pérdidas. También es altamente escalable, pudiendo expandirse sin interrupciones a más servidores.
  • Alto Rendimiento: Diseñado para ofrecer alto rendimiento tanto en la publicación como en la suscripción de mensajes, con latencias bajas incluso en operaciones de gran volumen.

Casos de Uso:

Apache Kafka es una herramienta versátil que se adapta a una amplia gama de aplicaciones debido a su alta capacidad de procesamiento, escalabilidad, y robustez.

 

Algunos casos de uso típicos donde Kafka es particularmente efectivo:

Procesamiento de Streams en Tiempo Real:

Kafka puede manejar flujos de datos en tiempo real, permitiendo el análisis y procesamiento continuo de datos a medida que se generan. Esto es útil para aplicaciones como monitorización de sistemas, donde se necesitan acciones rápidas basadas en datos en tiempo real.

Sistemas de Recomendaciones

En el comercio electrónico y los servicios de streaming de medios, Kafka puede procesar eventos de comportamiento de usuarios (como clics, compras, o visionados) para alimentar sistemas de recomendaciones en tiempo real.

Seguimiento de Actividad de Usuarios

Kafka se utiliza para recoger y procesar grandes volúmenes de eventos de actividad de usuarios, como inicio de sesión, navegación en páginas, y otras interacciones en aplicaciones web y móviles.

Agregación de Logs

Empresas que generan grandes cantidades de logs pueden usar Kafka para consolidar y centralizar estos datos. Posteriormente, estos logs pueden ser analizados para obtener insights sobre el rendimiento del sistema, seguridad, y operaciones.

Sistemas de Mensajería

Kafka puede funcionar como un sistema de mensajería robusto, ofreciendo garantías como durabilidad y alta disponibilidad que son esenciales para comunicaciones críticas entre diferentes partes de una aplicación.

Integración de Datos y ETL

Kafka es eficaz para integrar datos entre diferentes bases de datos y sistemas de almacenamiento, actuando como un intermediario que recopila datos de varias fuentes, los transforma según sea necesario, y los carga en sistemas destino.

Monitoreo de Sensores y IoT

Para aplicaciones IoT, Kafka puede manejar datos de telemetría de millones de dispositivos, facilitando tareas como la recopilación de datos en tiempo real, el procesamiento, y el análisis para mantenimiento predictivo y alertas de emergencia.

Gestión de Eventos de Negocio

En el ámbito empresarial, Kafka se usa para orquestar y procesar eventos de negocio, como transacciones financieras o cambios en registros de clientes, garantizando que todos los sistemas relevantes estén sincronizados.

Banca y Servicios Financieros

Kafka es utilizado en la industria financiera para procesar transacciones en tiempo real, auditar y rastrear cada operación, y para sistemas de prevención de fraude, donde la rapidez en el procesamiento de la información es crucial.

Microservicios

En arquitecturas basadas en microservicios, Kafka actúa como la columna vertebral que permite la comunicación eficiente y desacoplada entre servicios, gestionando el flujo de eventos y datos entre ellos.

Puedo instalar Apache Kafka en mi computador para pruebas?

Sí, puedes instalar Apache Kafka en tu computadora para fines de desarrollo y pruebas. Kafka se ejecuta en máquinas con sistema operativo Windows, Linux o macOS.

Requisitos Previos

Kafka está escrito en Java, por lo tanto necesitas tener Java instalado en tu máquina. La versión recomendada es Java 8, aunque también soporta versiones más recientes.

Instalación en Linux o macOS

1. Descargar Kafka: Puedes descargar la última versión de Kafka desde su página oficial.

2. Descomprimir el Archivo: Una vez descargado, descomprime el archivo en la ubicación deseada.

tar -xzf kafka_2.13-2.8.0.tgz
cd kafka_2.13-2.8.0

3. Iniciar el servidor ZooKeeper: Kafka usa ZooKeeper para manejar el estado del clúster, por lo que debes iniciar ZooKeeper primero.

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

4. Iniciar el servidor Kafka: En una nueva terminal, inicia el servidor Kafka.

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

Instalación en Windows

La instalación en Windows es similar, pero usa archivos .bat en lugar de scripts .sh.

1. Descargar y Descomprimir Kafka: Igual que en Linux/macOS.

2. Iniciar ZooKeeper: .

\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

3. Iniciar el servidor Kafka:

.\bin\windows\kafka-server-start.bat .\config\server.properties

 

Verificación de la Instalación

Para verificar que Kafka está funcionando correctamente, puedes crear un tema de prueba y probar enviar y recibir mensajes:

1. Crear un tema:

bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1

2. Enviar mensajes:

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

Escribe algunos mensajes en la consola y pulsa Enter para enviar.

3. Recibir mensajes:

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

Deberías ver los mensajes que enviaste anteriormente.

Servicios en AWS, GCP y Azure relacionado a Apache Kafka

Apache Kafka es una plataforma de streaming muy popular y como resultado, los principales proveedores de servicios en la nube ofrecen servicios que están relacionados o directamente integrados con Apache Kafka.

Algunos servicios de Amazon Web Services (AWS), Google Cloud Platform (GCP) y Microsoft Azure que están relacionados con Kafka:

Amazon Web Services (AWS)

Amazon MSK (Managed Streaming for Kafka): Es un servicio completamente administrado que facilita la configuración, operación y escalabilidad de clusters de Apache Kafka en AWS sin necesidad de mantenimiento de infraestructura. Soporta versiones de Apache Kafka y es compatible con herramientas y aplicaciones que se ejecutan con Kafka.

Amazon Kinesis: Aunque no es Kafka, es una alternativa de AWS que ofrece capacidades similares para el procesamiento de streaming en tiempo real. Proporciona Kinesis Data Streams, que puede manejar grandes flujos de datos en tiempo real de manera similar a Kafka.

Google Cloud Platform (GCP)

Cloud Pub/Sub: Es un servicio de mensajería global y de ingesta de eventos diseñado para proporcionar escalabilidad y durabilidad. Aunque no es un servicio de Kafka, muchas de sus funcionalidades son comparables. Ofrece una integración y un puente hacia Kafka, permitiendo a los usuarios trabajar con mensajes de Pub/Sub como si estuvieran en Kafka.

Cloud Dataflow: Es una plataforma completamente gestionada para transformar y enriquecer datos en stream (en tiempo real) y en modo batch (por lotes). Aunque no es específicamente Kafka, se puede usar con Kafka para procesar datos.

Microsoft Azure

Azure Event Hubs: Funciona de manera similar a Kafka y es a menudo usado como una alternativa a Kafka en Azure. Event Hubs es un servicio de ingesta de datos a gran escala, capaz de recibir y procesar millones de eventos por segundo.

Azure HDInsight con Kafka: Azure HDInsight es un servicio de análisis de datos que ofrece clusters de Kafka completamente administrados. Proporciona capacidades completas de Kafka incluyendo la creación de topics, brokers y más.

Confluent Cloud en Azure: Confluent, cofundado por los creadores de Kafka, ofrece una versión completamente administrada de Kafka que se puede integrar directamente en Azure. Ofrece una experiencia Kafka nativa con adicionales herramientas de gestión y mejoras de rendimiento.

Comparaciones de Apache Kafka con Otras Tecnologías de Mensajería y Streaming

Apache Kafka vs. RabbitMQ

  • Arquitectura y Modelo de Mensajería: Kafka está diseñado principalmente para el procesamiento de flujos de datos de alto volumen y soporta tanto procesamiento en tiempo real como procesamiento por lotes. Utiliza un modelo de publicación-suscripción que permite a los datos ser almacenados, leídos y re-leídos por consumidores múltiples. RabbitMQ, en cambio, es más adecuado para la mensajería tradicional donde la entrega garantizada y el procesamiento de mensajes punto a punto son críticos. Utiliza el protocolo AMQP, ideal para patrones complejos de mensajería.
  • Rendimiento: Kafka es conocido por su alta throughput y capacidad para manejar cientos de miles de mensajes por segundo. Es altamente escalable debido a su naturaleza distribuida y particionada. RabbitMQ también maneja un alto throughput pero puede requerir más configuración para escalar a niveles comparables.
  • Persistencia de Datos: Kafka permite una persistencia configurable y puede almacenar grandes cantidades de datos por un tiempo prolongado, lo que facilita el procesamiento de datos históricos. RabbitMQ, aunque ofrece persistencia, es generalmente usado para mensajes que no requieren almacenamiento a largo plazo.

Apache Kafka vs. Apache Pulsar

  • Arquitectura: Ambos soportan un modelo de publicación-suscripción y son altamente escalables y distribuidos. Una diferencia clave es que Pulsar fue diseñado para ofrecer una latencia más baja en la entrega de mensajes y tiene una arquitectura de broker y almacenamiento separada, lo que puede ofrecer mejoras en la gestión de almacenamiento y durabilidad.
  • Multi-Tenancy: Pulsar ofrece soporte incorporado para multi-tenancy, lo que permite a múltiples aplicaciones ser alojadas en el mismo clúster. Kafka puede soportar multi-tenancy, pero generalmente requiere configuraciones adicionales y administración cuidadosa del cluster.
  • APIs y Ecosistema: Kafka tiene un ecosistema muy establecido y amplias integraciones con sistemas de procesamiento como Apache Flink y Apache Spark. Pulsar está ganando tracción y ofrece APIs compatibles con Kafka, lo que facilita la transición para los usuarios existentes de Kafka.

Apache Kafka vs. Amazon Kinesis

  • Modelo de Costo: Kafka es de código abierto y puede ser desplegado en cualquier infraestructura, lo que podría ser más costoso inicialmente pero más económico a escala. Amazon Kinesis es un servicio pagado que maneja la escalabilidad y operación del streaming, pero puede volverse costoso con grandes volúmenes de datos y tráfico.
  • Integración en la Nube: Kinesis está profundamente integrado con otros servicios de AWS, lo que proporciona ventajas en términos de seguridad, monitorización y análisis si ya estás invertido en el ecosistema de AWS. Kafka, aunque es independiente de la plataforma, requiere más configuración para alcanzar niveles similares de integración.
  • Usabilidad y Administración: Kinesis ofrece una experiencia más gestionada, reduciendo la necesidad de manejar el mantenimiento del sistema y la configuración. Kafka ofrece más flexibilidad y control, lo que es beneficioso para usuarios que necesitan configuraciones altamente personalizadas o que operan en entornos multi-nube o híbridos.

Documentación Oficial

  • La página oficial de Apache Kafka es el mejor lugar para comenzar. Ofrece una guía completa sobre instalación, configuración, conceptos básicos y avanzados, y administración del clúster.

Cursos en Línea

  • Udemy ofrece varios cursos sobre Apache Kafka, como "Apache Kafka Series" que son muy populares y cubren desde los fundamentos hasta temas avanzados como Kafka Streams y Kafka Connect.

 


Sobre Mentores Tech

En Mentores Tech, ofrecemos una variedad de servicios de capacitación y asesorías personalizadas diseñadas para ayudarte a alcanzar tus objetivos profesionales. Desde cursos intensivos hasta mentorías uno a uno, te proporcionamos las herramientas que necesitas para tener éxito en el mundo de la tecnología.

Además, en nuestra página web www.mentorestech.com encontrarás una amplia gama de recursos gratuitos que te ayudarán a seguir aprendiendo y creciendo. ¡Visítanos y descubre cómo podemos ayudarte a conseguir el trabajo de tus sueños en tecnología!

Últimas publicaciones

Patrones de Software de Optimización y Eficiencia

10/10/2024

Ver articulo

Red Flags en tu trabajo y como saber cuando debes irte

02/09/2024

Ver articulo

Herramientas SAST que todo Developer debería conocer

26/08/2024

Ver articulo
Whatsapp Mentores Tech