Texto y documentos
Números y cálculo
Datos y formatos
Seguridad
Desarrollo y DevOps
Inteligencia Artificial
Finanzas
Salud y bienestar
Productividad
Juegos y entretenimiento
Multimedia y diseño
Empresa
Guía de uso
Cómo se usa

Elige un escenario de serie o escribe el tuyo en JSON. El mismo escenario corre en RabbitMQ, en Kafka con un grupo clásico, en Kafka con un share group en Amazon SQS (con SNS delante si hay varios grupos), en NATS JetStream, en Redis Streams y en MQTT, y se comparan: qué se procesa una vez, qué se repite, qué se pierde, qué acaba en la cola de muertos. Cambia la configuración de cada bróker y el resultado sale solo.

Qué es y qué no es

Es un simulador. Sus reglas están portadas del código de RabbitMQ 4.0.5 y 4.3.6 y de Kafka 4.3.1, y calibradas contra esos brókers reales: 5.000 enrutados aleatorios por versión, escenarios de reentrega y de cola de muertos, 2.000 claves de partición, repartos de grupos de consumidores Java, qué se suelta en un rebalanceo, dónde sigue un consumidor tras una caída (con commit por lote y con auto-commit) y cuántas veces entrega un share group con REJECT y con RELEASE. También el reparto entre consumidores de RabbitMQ y, en los share groups, qué pasa cuando un consumidor se cuelga (vuelve al caducar el bloqueo) y cuando muere (lo suelta en el acto). SQS está calibrado contra ElasticMQ 1.7.1, un EMULADOR, no contra AWS: redrive, visibilidad, orden FIFO por grupos y receipt handles; SNS sale de la documentación de AWS. NATS JetStream, contra NATS 2.15.0 real: max_deliver, nak, ack_wait, acuse tardío, term, reparto entre clientes, max_ack_pending, deliver_policy, nak con retraso y backoff. Redis Streams, contra Redis 8.0.2 real: lista de pendientes, XAUTOCLAIM, XACK de grupo, relectura, $ y 0, reparto y recorte del stream (MAXLEN); el límite de entregas y su cola de muertos son la receta habitual de la aplicación, porque Redis no los trae. MQTT, contra Mosquitto 2.0.21 real: qué se reenvía y cuándo, sesiones persistentes y limpias, la ventana de 20 en vuelo, suscripciones compartidas, QoS 0, 1 y 2 y mensajes retenidos. No mide tiempos ni rendimiento: el tiempo es lógico, en ticks (1 tick = 1 s para los valores por defecto de Kafka).

El escenario

mensajes (id, t, y opcionalmente clave, ttl, veneno), consumidores (id, grupo, prefetch, coste, ackRetraso, entra, probFallo) y fallos (t, consumidor, tipo muere o vuelve). En RabbitMQ cada grupo es una cola; en Kafka, un grupo de consumidores. Un mensaje con veneno falla siempre al procesarse.

Brókers de mensajeríaRabbitMQ y Kafka, el mismo escenario
Brókers de mensajeríaRabbitMQ y Kafka, el mismo escenario

Simulado. Calibrado contra RabbitMQ 4.0.5 y 4.3.6 y Kafka 4.3.1 reales en: enrutado, reentregas, cola de muertos, reparto entre consumidores, partición por clave, reparto y rebalanceo del grupo, dónde sigue quien entra tras una caída, y entregas, bloqueos y caídas de los share groups. SQS, contra un emulador (ElasticMQ 1.7.1), no contra AWS; SNS, según la documentación; NATS JetStream, Redis Streams y MQTT, contra NATS 2.15.0, Redis 8.0.2 y Mosquitto 2.0.21 reales. No mide tiempos ni rendimiento.

C1 procesa y tarda en confirmar; muere con trabajo hecho y sin confirmar. ¿Qué se repite en cada bróker?

RabbitMQ

  • 7procesados una vez
  • 3con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 0sin terminar al acabar
MensajeEstadoEntregasProcesado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado11
m6confirmado21
m7confirmado11
m8confirmado21
m9confirmado11

Kafka (grupo clásico)

  • 7procesados una vez
  • 3con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 0sin terminar al acabar
MensajeEstadoEntregasProcesado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado21
m6confirmado21
m7confirmado11
m8confirmado11
m9confirmado11

Kafka (share group)

  • 7procesados una vez
  • 3con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 0sin terminar al acabar
MensajeEstadoEntregasProcesado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado21
m6confirmado21
m7confirmado11
m8confirmado11
m9confirmado11

Amazon SQS (con SNS)

  • 7procesados una vez
  • 3con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 0sin terminar al acabar
MensajeEstadoEntregasProcesado
m0confirmado22
m1confirmado22
m2confirmado22
m3confirmado21
m4confirmado21
m5confirmado11
m6confirmado11
m7confirmado11
m8confirmado11
m9confirmado11

NATS JetStream

  • 7procesados una vez
  • 3con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 0sin terminar al acabar
MensajeEstadoEntregasProcesado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado11
m4confirmado22
m5confirmado11
m6confirmado21
m7confirmado11
m8confirmado21
m9confirmado11

Redis Streams

  • 7procesados una vez
  • 3con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 0sin terminar al acabar
MensajeEstadoEntregasProcesado
m0confirmado22
m1confirmado11
m2confirmado22
m3confirmado22
m4confirmado21
m5confirmado21
m6confirmado21
m7confirmado11
m8confirmado11
m9confirmado11

MQTT (Mosquitto)

  • 5procesados una vez
  • 0con el efecto repetido
  • 0perdidos
  • 0a la cola de muertos o archivados
  • 0nunca leídos
  • 0dados por buenos sin procesar
  • 0procesados fuera de orden
  • 5sin terminar al acabar
MensajeEstadoEntregasProcesado
m0sin confirmar11
m1confirmado11
m2sin confirmar11
m3confirmado11
m4sin confirmar11
m5confirmado11
m6sin confirmar10
m7confirmado11
m8sin confirmar10
m9confirmado11