Type something to search...
RabbitMQ 5: Consumo de Recursos, Latencia y Monitorización de RabbitMQ

RabbitMQ 5: Consumo de Recursos, Latencia y Monitorización de RabbitMQ

Hemos explorado la teoría detrás de RabbitMQ, su arquitectura, cómo enruta mensajes y cómo podemos construir sistemas robustos y seguros. Sin embargo, para operar RabbitMQ de manera efectiva en producción, necesitamos entender cuántos recursos consume, qué esperar en términos de latencia de los mensajes y, lo más importante, cómo vigilarlo y gestionarlo activamente.

Este artículo se sumerge en estos aspectos prácticos, brindándote la información necesaria para dimensionar tu infraestructura, gestionar expectativas sobre el rendimiento y mantener tu broker funcionando sin problemas.

Consumo de Recursos e Implementación

El “costo” de ejecutar RabbitMQ, principalmente en términos de CPU, memoria RAM y espacio en disco, no es fijo. Varía significativamente en función de varios factores clave:

Factores que Influyen en el Consumo

  • Carga (Throughput): El factor más obvio. Un alto volumen de mensajes publicados y entregados por segundo requiere más CPU y red para procesar las operaciones.
  • Número de Colas y Exchanges: Aunque los recursos por cola/exchange inactivos son bajos, un gran número de ellos (miles o decenas de miles) puede aumentar la carga de gestión interna del broker y el consumo de memoria. Esto es especialmente cierto si hay muchas conexiones y bindings activos asociados a estos elementos.
  • Persistencia de Mensajes y Durabilidad de Colas:
    • Los mensajes persistentes (en colas duraderas) requieren escrituras a disco para asegurar que no se pierdan en caso de fallo del broker. Esto consume I/O de disco y puede ser un cuello de botella importante si el volumen es alto y el disco subyacente es lento.
    • Las colas duraderas requieren que su estado (configuración, mensajes en cola, estado de consumidores) sea guardado persistentemente.
    • Usar mensajes persistentes aumenta significativamente la demanda de recursos de disco y puede reducir el throughput máximo comparado con mensajes no persistentes.
  • Número de Conexiones y Canales: Cada conexión de cliente TCP y cada canal AMQP asociado consumen memoria en el broker para mantener su estado. Un gran número de clientes conectados (cientos o miles) puede sumar un consumo notable de RAM, incluso si la tasa de mensajes no es extremadamente alta.
  • Tamaño de los Mensajes: Mensajes más grandes consumen más ancho de banda de red al ser transferidos entre productores/consumidores y el broker. También consumen más memoria y/o disco al ser transferidos y almacenados temporalmente en el broker o en las colas.
  • Uso de Características Avanzadas: Características como prioridades de mensajes (x-max-priority), TTLs (x-message-ttl), o Dead-Lettering añaden algo de overhead de procesamiento interno en el broker para gestionar la lógica asociada.

Ejemplos de Carga y Consideraciones de Dimensionamiento

No hay una “calculadora” única y precisa para dimensionar RabbitMQ que funcione en todos los casos, ya que depende mucho de los factores anteriores y del hardware subyacente. Sin embargo, aquí hay algunas pautas generales basadas en la experiencia común:

Mensajes/sTamaño Msg (bytes)CPU CoresRAM (GB)Disco (IOPS / MB/s)Ancho de Banda
1005121150 IOPS / 1 MB/s~0.4 Mbps
1,0001,024 (1 KB)22100 IOPS / 5 MB/s~8 Mbps
5,0002,048 (2 KB)44200 IOPS / 20 MB/s~80 Mbps
10,0004,096 (4 KB)66400 IOPS / 40 MB/s~320 Mbps
50,0004,096 (4 KB)8–1212–161,000 IOPS / 200 MB/s~1.6 Gbps
100,0008,192 (8 KB)16+32+2,000+ IOPS / 800 MB/s~6.4 Gbps

🔍 Notas / Supuestos:

  • Se asume que la persistencia está activada (uso típico).
  • Uso de colas clásicas (classic queues) sin clustering.
  • No se consideran configuraciones con replicación (HA) o federation.
  • Basado en RabbitMQ 3.11+.
  • Los mensajes tienen TTL o se procesan rápidamente (sin grandes acumulaciones).
  • Red de baja latencia.

Estrategias para Optimizar el Uso de Recursos

  • Minimizar la Persistencia: Usa persistencia solo para los mensajes y colas donde la pérdida sea inaceptable. Los mensajes no persistentes son mucho más rápidos y consumen significativamente menos recursos de disco y CPU asociados al I/O.
  • Mantener las Colas Cortas: Idealmente, los consumidores deben procesar mensajes tan rápido como llegan. Colas que crecen indefinidamente son un signo de contrapresión (la tasa de producción excede la de consumo) y consumen progresivamente más RAM y eventualmente pagan a disco. Usa límites de cola (x-max-length, x-max-length-bytes) para proteger el broker de crecimientos descontrolados.
  • Optimizar el Prefetch (QoS): Ajusta el prefetch de los consumidores. Un prefetch muy alto puede hacer que un consumidor acapare muchos mensajes en memoria, potencialmente agotando la RAM del consumidor y reduciendo el throughput si no puede procesarlos rápido. Un prefetch muy bajo (ej. 1) puede reducir el throughput total al esperar la confirmación de cada mensaje. Encuentra un balance óptimo para tu carga, el rendimiento de tus consumidores y la latencia deseada.
  • Limitar Conexiones/Canales: Si es posible, reutiliza conexiones y canales en tus aplicaciones cliente en lugar de crear nuevos para cada operación. Mantener miles de conexiones efímeras puede ser costoso en recursos para el broker.
  • Dimensionar el Disco Correctamente: Si usas persistencia o esperas colas largas (aunque esto último es una señal de alerta), invierte en discos SSD rápidos y con suficiente espacio para manejar tanto los mensajes en cola como los archivos de paginación y logs. La velocidad del disco impacta directamente el throughput y la latencia con persistencia.
  • Monitorizar y Ajustar: Usa las métricas de RabbitMQ de forma constante para identificar cuellos de botella (I/O de disco alto, uso de CPU elevado, crecimiento persistente de colas, alta latencia, número excesivo de conexiones/canales) y ajusta tu configuración o escala tu infraestructura en consecuencia.

Latencia Esperada en los Mensajes

La latencia de un mensaje es el tiempo que tarda desde que un productor lo publica hasta que un consumidor lo recibe (y potencialmente lo procesa). No es cero, ya que implica varias etapas y tránsitos por la red y el broker.

La latencia total se puede conceptualizar aproximadamente como la suma de los tiempos en cada etapa:

$ Latencia_{Total} = Latencia_{Red} (Productor => Broker) + Tiempo_{Broker} (Enrutamiento, Encolamiento, Persistencia) + Latencia_{Red} (Broker => Consumidor) + Tiempo_{Procesamiento} (Consumidor) $

Nos centraremos en los factores que afectan el tiempo que el mensaje pasa dentro o viajando hacia/desde el broker. Varios factores afectan esta latencia:

Factores que Afectan la Latencia

  • Carga del Broker: Un broker bajo alta carga (muchos mensajes, muchas conexiones, I/O de disco saturado) tardará más en procesar mensajes y entregarlos. Las operaciones se encolan internamente.
  • Tamaño del Mensaje: Mensajes más grandes tardan más en viajar por la red y ser procesados por el broker y los clientes (serialización/deserialización).
  • Persistencia: Publicar y encolar mensajes persistentes es significativamente más lento que con mensajes no persistentes, ya que requiere que el broker espere la confirmación de escritura a disco antes de reconocer la publicación al productor (si se usan confirmaciones de editor) y antes de considerarlo seguro en la cola. Esto añade latencia.
  • Red: La latencia intrínseca de la red entre productores, el broker y consumidores es un componente directo y, a menudo, incontrolable si los componentes están distribuidos geográficamente. Brokers y aplicaciones en diferentes centros de datos o regiones tendrán mayor latencia de red.
  • QoS (Prefetch): Un prefetch bajo (ej. 1) puede aumentar la latencia percibida entre mensajes para un mismo consumidor, ya que debe confirmar cada mensaje antes de recibir el siguiente. Un prefetch más alto reduce esta latencia inter-mensaje, pero puede aumentar el tiempo que un mensaje espera en el buffer del consumidor antes de ser procesado, aumentando su latencia dentro del consumidor.
  • Número de Hops (Enrutamiento): Mensajes que son enrutados a través de múltiples Exchanges encadenados (topologías avanzadas con shovel o federation o simples bindings secuenciales) pueden experimentar latencia adicional en cada paso de enrutamiento interno o entre brokers.
  • Paginación a Disco: Si las colas crecen y los mensajes que no caben en RAM se paginan a disco, la latencia para acceder a ellos cuando un consumidor los solicita aumenta drásticamente. Acceder a disco es mucho más lento que acceder a RAM.

Latencias Típicas Esperadas

Las latencias varían ampliamente, pero aquí hay un rango esperado bajo diferentes escenarios:

  • Configuración Optimizada, Baja Carga, Mensajes Pequeños y No Persistentes, Red Rápida: Latencia muy baja, a menudo en el rango de pocos milisegundos. Este es el mejor escenario.
  • Configuración Típica, Carga Moderada, Mensajes Persistentes, Red Estándar: Latencia moderada, probablemente en el rango de decenas o cientos de milisegundos. La persistencia suele ser el factor dominante aquí.
  • Alta Carga, I/O de Disco Saturado, Colas Largas, Paginación Activa: Latencia puede dispararse a varios segundos o incluso más. Esto indica un problema grave de rendimiento o dimensionamiento.

Estrategias para Minimizar la Latencia Cuando es Crítico

  • Usar Mensajes No Persistentes: Si la pérdida ocasional de mensajes es aceptable y la latencia es crítica (ej. datos de monitorización no vitales, notificaciones efímeras), usa mensajes no persistentes. Son significativamente más rápidos.
  • Mantener Colas Cortas: Asegura que los consumidores procesen mensajes rápidamente para evitar que las colas se alarguen y los mensajes se paginen. Escalar el número de consumidores es la estrategia clave contra la contrapresión.
  • Optimizar el Prefetch: Experimenta con el prefetch para encontrar el equilibrio adecuado que mantenga a tus consumidores ocupados sin sobrecargarlos ni acaparar mensajes innecesariamente.
  • Hardware Rápido: Usa servidores con CPU potente (para el procesamiento interno), mucha RAM (para colas en memoria) y discos SSD muy rápidos (crítico si usas persistencia) para minimizar los tiempos de procesamiento del broker.
  • Red de Baja Latencia: Coloca el broker y los consumidores/productores en la misma red o lo más cerca posible geográficamente para minimizar la latencia de red.
  • Evitar Enrutamiento Complejo Innecesario: Si una topología de enrutamiento simple es suficiente, úsala en lugar de cadenas complejas de Exchanges, ya que cada paso añade una pequeña sobrecarga.
  • Monitorizar la Latencia: Mide la latencia de extremo a extremo de tus mensajes en tus aplicaciones (productor -> broker -> consumidor -> procesamiento) para identificar cuellos de botella reales. Las métricas del broker te dirán cuánto tiempo pasa dentro de RabbitMQ.

Es importante recordar que RabbitMQ está diseñado principalmente para la comunicación asíncrona, el desacoplamiento de servicios y la entrega confiable (especialmente con persistencia), optimizando el throughput (mensajes por segundo) sobre la latencia ultrabaja. Si necesitas latencias de microsegundos y comunicación estrictamente síncrona, RabbitMQ podría no ser la herramienta adecuada; la comunicación directa via RPC o protocolos especializados de baja latencia serían más apropiados.

Monitorización y Gestión de RabbitMQ

Una vez que RabbitMQ está funcionando, la monitorización activa y la gestión son vitales para asegurar su salud, rendimiento, prever problemas y solucionarlos rápidamente cuando ocurren.

Uso Exhaustivo de la Interfaz de Administración Web

La interfaz web de gestión (Management Plugin) es una herramienta invaluable para la inspección manual del estado del broker. Se accede típicamente a través del puerto 15672 (asegúrate de que esté accesible solo desde redes de administración seguras). Permite visualizar:

  • Overview: Métricas generales y gráficos de alto nivel como mensajes publicados/entregados por segundo, uso de memoria/disco, número de conexiones/canales, y estado del cluster.
  • Connections: Listado de todas las conexiones activas, desde qué host se originan, qué usuario las estableció, qué vhost están usando, etc. Puedes cerrarlas forzadamente si es necesario.
  • Channels: Detalles de los canales AMQP dentro de cada conexión, incluyendo el prefetch configurado y los mensajes no confirmados.
  • Exchanges: Listado de todos los Exchanges declarados, su tipo (direct, fanout, topic, headers), durabilidad, y a qué colas están vinculados (bindings). Puedes declarar/eliminar Exchanges.
  • Queues: La vista más importante para diagnosticar problemas. Muestra todas las colas, cuántos mensajes tienen listos para entregar (messages ready), cuántos mensajes están entregados pero sin confirmar (messages unacknowledged), la tasa de entrada (incoming), la tasa de salida (outgoing), el número de consumidores activos, sus propiedades (durabilidad, auto-delete, argumentos), etc. Puedes declarar/eliminar colas, purgar mensajes (vaciar la cola), publicar mensajes de prueba.
  • Admin: Gestionar usuarios, vhosts (entornos virtuales), permisos de usuario en vhosts, políticas (para configuración a gran escala), y el estado del cluster (si aplica).

Aprender a navegar por esta interfaz e interpretar sus métricas es fundamental para diagnosticar problemas rápidamente (ej. colas creciendo consistentemente -> contrapresión, los consumidores no dan abasto; tasas de entrega bajas pero mensajes en cola -> problemas en los consumidores; muchas conexiones -> posible fuga de recursos en una aplicación cliente; uso de disco alto -> persistencia o paginación).

Herramientas de Línea de Comandos (rabbitmqctl)

rabbitmqctl es la herramienta de línea de comandos para interactuar con RabbitMQ. Es esencial para tareas de automatización, scripting, y gestión de bajo nivel, especialmente en servidores donde no tienes acceso fácil a una UI gráfica o para realizar operaciones repetitivas. Algunos comandos esenciales incluyen (siempre especificando el vhost con -p <vhost> si no es el / por defecto):

rabbitmqctl status

Muestra el estado general del nodo RabbitMQ, versión, estado de los procesos, uso de memoria, etc.

rabbitmqctl list_queues name messages_ready messages_unacknowledged consumers memory

Lista las colas y métricas clave como el número de mensajes listos y sin confirmar, consumidores activos y uso de memoria por cola. Puedes listar otras columnas según necesites (message_stats.publish, message_stats.deliver_get, etc.).

rabbitmqctl list_exchanges name type durable

Lista los Exchanges, su tipo y si son duraderos.

rabbitmqctl list_bindings source destination destination_type routing_key arguments

Lista todas las vinculaciones (bindings) entre Exchanges y Colas/Exchanges.

rabbitmqctl add_user <username> <password>
rabbitmqctl set_permissions -p <vhost> <user> "<configure>" "<write>" "<read>"
rabbitmqctl delete_user <username>

Gestión básica de usuarios y permisos. Los permisos son expresiones regulares. "<configure>" afecta a exchanges/colas, "<write>" a la publicación, "<read>" al consumo.

rabbitmqctl delete_queue [-p <vhost>] <name>
rabbitmqctl purge_queue [-p <vhost>] <name>

Elimina una cola o elimina todos los mensajes de una cola sin borrarla. ¡Usar con precaución en producción!

rabbitmqctl tiene muchos más comandos para gestionar el cluster, políticas, parámetros de vhost, etc., siendo una herramienta muy potente para la administración avanzada.

Integración con Sistemas de Monitorización Externos

Si bien la UI web es útil para la inspección manual y rabbitmqctl para la gestión puntual, para la monitorización proactiva, la visualización histórica y las alertas necesitas integrar RabbitMQ con sistemas de monitorización centralizados.

  • Prometheus + Grafana: Una combinación muy popular en entornos de microservicios. El plugin de gestión de RabbitMQ expone métricas en un formato que Prometheus puede scrapear (/metrics endpoint si el plugin prometheus está habilitado, o via API si solo el plugin management está habilitado). Grafana se utiliza luego para crear dashboards visuales con estas métricas (uso de CPU/RAM, I/O de disco, longitud de colas a lo largo del tiempo, tasas de mensajes public/deliver/ack, latencia de confirmación, número de conexiones/canales, estado de health checks, etc.).
  • Otras Herramientas: RabbitMQ también puede integrarse con otras herramientas de monitorización como Nagios, Zabbix, Datadog, New Relic, etc., a menudo a través de plugins específicos, exportando métricas vía API de gestión o analizando sus logs.

Configurar alertas basadas en umbrales (ej. cola excede cierto número de mensajes, uso de CPU/RAM demasiado alto, espacio en disco casi lleno, nodo de cluster caído, tasa de mensajes entregados cae drásticamente) es vital para ser notificado y responder rápidamente a los problemas antes de que afecten significativamente a tus aplicaciones.

Logging y Alertas

Además de las métricas, los logs de RabbitMQ (generalmente ubicados en /var/log/rabbitmq/ en sistemas tipo Linux) contienen información valiosa sobre eventos, errores, advertencias, intentos de conexión, desconexiones, cambios de estado del cluster, etc. Es crucial tener un sistema centralizado de gestión de logs (ej. ELK Stack - Elasticsearch, Logstash, Kibana; Splunk; Loki+Grafana) para agregarlos desde todos tus nodos RabbitMQ, buscar patrones, diagnosticar fallos específicos y configurar alertas basadas en la aparición de eventos o errores particulares en los logs (ej. errores al escribir a disco, fallos de autenticación repetidos que podrían indicar un ataque, errores de sincronización de cluster).

La combinación de métricas en tiempo real (para el qué está pasando con el rendimiento y los recursos) y análisis de logs históricos (para el por qué algo falló o un evento ocurrió) te dará una visibilidad completa sobre la salud y el comportamiento de tu broker RabbitMQ.

Conclusión

Operar RabbitMQ en producción va mucho más allá de entender cómo enviar y recibir mensajes; implica comprender su apetito por los recursos, gestionar las expectativas de latencia y, sobre todo, tener herramientas robustas de monitorización y gestión para asegurar su estabilidad y rendimiento continuo.

Hemos visto los múltiples factores que influyen en el consumo de CPU, RAM y disco, y cómo la persistencia de mensajes y colas es un gran determinante del rendimiento de I/O, a menudo siendo el principal cuello de botella. Discutimos la latencia, sus componentes y cómo optimizarla según tus necesidades, recordando que RabbitMQ está optimizado para el throughput y el desacoplamiento más que para la latencia ultrabaja, un diseño fundamental para sistemas asíncronos robustos.

Finalmente, exploramos las herramientas esenciales para mantener el control: la indispensable interfaz de administración web para la inspección visual y diagnósticos puntuales, rabbitmqctl para la gestión por línea de comandos y automatización, y la integración con sistemas de monitorización externos como Prometheus y Grafana (junto con un buen sistema de logs) para tener visibilidad proactiva, análisis histórico y alertas cruciales.

Con estos conocimientos sobre el consumo de recursos, las expectativas de latencia y las herramientas de monitorización y gestión, estás mucho mejor equipado para desplegar, dimensionar y mantener una infraestructura de RabbitMQ saludable y resiliente. Un tema que complementa directamente la robustez en producción, especialmente a cargas altas, es la Alta Disponibilidad y el Clustering, que abordaremos en un futuro artículo.

Related Posts

Cuándo Usar Colas de Mensajes en el Desarrollo de Software

Cuándo Usar Colas de Mensajes en el Desarrollo de Software

Las colas de mensajes son herramientas clave para construir sistemas distribuidos, escalables y tolerantes a fallos. En este artículo te comparto una guía con situaciones comunes donde su uso es altam

Leer más
RabbitMQ 1: Introducción a RabbitMQ, El Corazón de la Mensajería Asíncrona

RabbitMQ 1: Introducción a RabbitMQ, El Corazón de la Mensajería Asíncrona

En el mundo del desarrollo de software moderno, especialmente con el auge de los microservicios y los sistemas distribuidos, la forma en que las diferentes partes de una aplicación se comunican es fun

Leer más
RabbitMQ 3: Configuración y Gestión de Colas en RabbitMQ

RabbitMQ 3: Configuración y Gestión de Colas en RabbitMQ

Después de entender qué es RabbitMQ y cómo sus Exchanges y Bindings dirigen los mensajes, llegamos a la Cola. La cola es fundamentalmente un buffer confiable: es el lugar donde los mensajes esperan su

Leer más
RabbitMQ 4: Robustez y Seguridad en RabbitMQ

RabbitMQ 4: Robustez y Seguridad en RabbitMQ

Hemos recorrido el camino desde la introducción a RabbitMQ y su papel en la mensajería asíncrona, pasando por su arquitectura, componentes de enrutamiento (Exchanges y Bindings), y la gestión detallad

Leer más
RabbitMQ 2: Arquitectura y Enrutamiento Avanzado en RabbitMQ

RabbitMQ 2: Arquitectura y Enrutamiento Avanzado en RabbitMQ

En nuestro primer artículo, exploramos qué es RabbitMQ, por qué es fundamental para la comunicación asíncrona en sistemas distribuidos y cuáles son sus casos de uso típicos. Lo comparamos con una "ofi

Leer más
RabbitMQ 6: Alta Disponibilidad y Escalabilidad con Clustering en RabbitMQ

RabbitMQ 6: Alta Disponibilidad y Escalabilidad con Clustering en RabbitMQ

Hasta ahora, hemos hablado de cómo un nodo individual de RabbitMQ maneja mensajes, gestiona colas, y cómo monitorizar su rendimiento y seguridad. Sin embargo, para aplicaciones críticas que no pueden

Leer más
Kafka 1: Introducción a Apache Kafka, fundamentos y Casos de Uso

Kafka 1: Introducción a Apache Kafka, fundamentos y Casos de Uso

En el panorama tecnológico actual, los datos son el motor que impulsa la innovación. La capacidad de procesar, reaccionar y mover grandes volúmenes de datos en tiempo real se ha convertido en una nece

Leer más
Kafka 2: Arquitectura Profunda de Kafka, Topics, Particiones y Brokers

Kafka 2: Arquitectura Profunda de Kafka, Topics, Particiones y Brokers

En nuestro primer artículo, despegamos en el mundo de Apache Kafka, sentando las bases de lo que es esta potente plataforma de streaming de eventos y diferenciándola de los sistemas de mensajería trad

Leer más
Kafka 3: Productores y Consumidores, Configuración y Buenas Prácticas

Kafka 3: Productores y Consumidores, Configuración y Buenas Prácticas

Hemos navegado por los conceptos esenciales de Apache Kafka y desentrañado la arquitectura que reside bajo la superficie, comprendiendo cómo los Topics se dividen en Particiones distribuidas entre Bro

Leer más
Kafka 4: Procesamiento de Datos en Tiempo Real con Kafka Streams y ksqlDB

Kafka 4: Procesamiento de Datos en Tiempo Real con Kafka Streams y ksqlDB

En los artículos anteriores, hemos construido una sólida comprensión de Apache Kafka: qué es, por qué es una plataforma líder para streaming de eventos, cómo está estructurado internamente con Topic

Leer más
Spring WebFlux 1: Fundamentos Reactivos y el Corazón de Reactor

Spring WebFlux 1: Fundamentos Reactivos y el Corazón de Reactor

¡Hola, entusiasta del desarrollo moderno! 👋 En el vertiginoso mundo de las aplicaciones web, donde la escalabilidad y la eficiencia son reyes, ha surgido un paradigma que desafía el modelo tradicion

Leer más
Kafka 6: Despliegue, Seguridad y Optimización

Kafka 6: Despliegue, Seguridad y Optimización

Hemos explorado la arquitectura fundamental de Apache Kafka, la dinámica entre productores y consumidores, sus potentes capacidades para el procesamiento de flujos de datos y las herramientas que enri

Leer más
Spring WebFlux 2: Alta Concurrencia sin Más Hilos

Spring WebFlux 2: Alta Concurrencia sin Más Hilos

¡Bienvenido de nuevo a nuestra inmersión en Spring WebFlux! 👋 En la primera parte de esta serie, exploramos el "por qué" de la programación reactiva, entendiendo los problemas del bloqueo y descubri

Leer más
Spring WebFlux 3: Comunicación, Datos y Errores Reactivos

Spring WebFlux 3: Comunicación, Datos y Errores Reactivos

¡Continuemos nuestro viaje por el fascinante mundo de Spring WebFlux! En la Parte 1, sentamos las bases de la programación reactiva y exploramos Project Reactor, el corazón de WebFlux. En la **Pa

Leer más
Kafka 7: Patrones Avanzados y Anti-Patrones con Kafka

Kafka 7: Patrones Avanzados y Anti-Patrones con Kafka

Hemos recorrido un camino considerable en nuestra serie sobre Apache Kafka. Desde sus fundamentos y arquitectura interna hasta la interacción con productores y consumidores, las herramientas de proces

Leer más
Kafka 5: Más Allá del Core, Explorando el Ecosistema de Apache Kafka

Kafka 5: Más Allá del Core, Explorando el Ecosistema de Apache Kafka

Hemos navegado por las entrañas de Apache Kafka, comprendiendo su funcionamiento interno, la interacción entre productores y consumidores, e incluso cómo procesar datos en tiempo real con Kafka Stream

Leer más
Spring WebFlux 4: Comunicación Avanzada, Pruebas y Producción

Spring WebFlux 4: Comunicación Avanzada, Pruebas y Producción

La serie Spring WebFlux nos ha llevado a través de un viaje fascinante por el mundo de la programación reactiva, desde sus fundamentos y el poder de Project Reactor hasta la construcción de arquit

Leer más
Arquitectura DDD y Hexagonal: Construyendo Software para el Futuro

Arquitectura DDD y Hexagonal: Construyendo Software para el Futuro

En el dinámico mundo del desarrollo de software, la complejidad es el enemigo silencioso. Las aplicaciones crecen, los requisitos cambian y, sin una guía clara, el código puede convertirse rápidamente

Leer más