Texte & documents
Nombres & calcul
Données & formats
Sécurité
Développement & DevOps
Intelligence artificielle
Finances
Santé et bien-être
Productivité
Jeux et divertissement
Multimédia & design
Entreprise
Guide d'utilisation
Comment l'utiliser

Choisis un scénario prédéfini ou écris le tien en JSON. Le même scénario tourne dans RabbitMQ, dans Kafka avec un groupe classique, dans Kafka avec un share group, dans Amazon SQS (avec SNS devant s'il y a plusieurs groupes), dans NATS JetStream, dans Redis Streams et dans MQTT, et ils sont comparés : ce qui est traité une fois, ce qui se répète, ce qui se perd, ce qui finit dans la file des messages morts. Change la configuration de chaque broker et le résultat sort tout seul.

Ce que c'est et ce que ce n'est pas

C'est un simulateur. Ses règles sont reprises du code de RabbitMQ 4.0.5 et 4.3.6 et de Kafka 4.3.1, et calibrées par rapport à ces brokers réels : 5 000 routages aléatoires par version, des scénarios de relivraison et de file des messages morts, 2 000 clés de partition, des répartitions de groupes de consommateurs Java, ce qui est relâché lors d'un rebalancement, où reprend un consommateur après une panne (avec commit par lot et avec auto-commit) et combien de fois un share group livre avec REJECT et avec RELEASE. Aussi la répartition entre les consommateurs de RabbitMQ et, dans les share groups, ce qui se passe quand un consommateur se fige (il revient quand le verrou expire) et quand il meurt (il est libéré sur-le-champ). SQS est calibré par rapport à ElasticMQ 1.7.1, un ÉMULATEUR, pas par rapport à AWS : redrive, visibilité, ordre FIFO par groupes et receipt handles ; SNS provient de la documentation AWS. NATS JetStream, par rapport à un vrai NATS 2.15.0 : max_deliver, nak, ack_wait, accusé tardif, term, répartition entre clients, max_ack_pending, deliver_policy, nak retardé et backoff. Redis Streams, par rapport à un vrai Redis 8.0.2 : liste des entrées en attente, XAUTOCLAIM, XACK de groupe, relecture, $ et 0, répartition et troncature du stream (MAXLEN) ; la limite de livraisons et sa file des messages morts sont la recette habituelle de l'application, car Redis ne les fournit pas. MQTT, par rapport à un vrai Mosquitto 2.0.21 : ce qui est renvoyé et quand, sessions persistantes et propres, la fenêtre de 20 non confirmés, abonnements partagés, QoS 0, 1 et 2 et messages retenus. Il ne mesure ni les temps ni les performances : le temps est logique, en ticks (1 tick = 1 s pour les valeurs par défaut de Kafka).

Le scénario

messages (id, t et éventuellement clave, ttl, veneno), consommateurs (id, grupo, prefetch, coste, ackRetraso, entra, probFallo) et pannes (t, consumidor, tipo muere ou vuelve). Dans RabbitMQ, chaque groupe est une file ; dans Kafka, un groupe de consommateurs. Un message avec veneno échoue toujours lors du traitement.

Brokers de messagerieRabbitMQ et Kafka, le même scénario
Brokers de messagerieRabbitMQ et Kafka, le même scénario

Simulé. Calibré par rapport à de vrais RabbitMQ 4.0.5 et 4.3.6 et Kafka 4.3.1 sur : le routage, les relivraisons, la file des messages morts, la répartition entre les consommateurs, la partition par clé, la répartition et le rebalancement du groupe, où reprend celui qui entre après une panne, et les livraisons, les verrous et les pannes des share groups. SQS, par rapport à un émulateur (ElasticMQ 1.7.1), pas à AWS ; SNS, selon la documentation ; NATS JetStream, Redis Streams et MQTT, par rapport à de vrais NATS 2.15.0, Redis 8.0.2 et Mosquitto 2.0.21. Ne mesure ni les temps ni les performances.

C1 traite et met du temps à confirmer ; il meurt avec le travail fait mais non confirmé. Qu'est-ce qui se répète dans chaque broker ?

RabbitMQ

  • 7traités une fois
  • 3avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 0non terminés à la fin
MessageÉtatLivraisonsTraité
m0confirmé22
m1confirmé11
m2confirmé22
m3confirmé11
m4confirmé22
m5confirmé11
m6confirmé21
m7confirmé11
m8confirmé21
m9confirmé11

Kafka (groupe classique)

  • 7traités une fois
  • 3avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 0non terminés à la fin
MessageÉtatLivraisonsTraité
m0confirmé22
m1confirmé11
m2confirmé22
m3confirmé11
m4confirmé22
m5confirmé21
m6confirmé21
m7confirmé11
m8confirmé11
m9confirmé11

Kafka (share group)

  • 7traités une fois
  • 3avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 0non terminés à la fin
MessageÉtatLivraisonsTraité
m0confirmé22
m1confirmé11
m2confirmé22
m3confirmé11
m4confirmé22
m5confirmé21
m6confirmé21
m7confirmé11
m8confirmé11
m9confirmé11

Amazon SQS (avec SNS)

  • 7traités une fois
  • 3avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 0non terminés à la fin
MessageÉtatLivraisonsTraité
m0confirmé22
m1confirmé22
m2confirmé22
m3confirmé21
m4confirmé21
m5confirmé11
m6confirmé11
m7confirmé11
m8confirmé11
m9confirmé11

NATS JetStream

  • 7traités une fois
  • 3avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 0non terminés à la fin
MessageÉtatLivraisonsTraité
m0confirmé22
m1confirmé11
m2confirmé22
m3confirmé11
m4confirmé22
m5confirmé11
m6confirmé21
m7confirmé11
m8confirmé21
m9confirmé11

Redis Streams

  • 7traités une fois
  • 3avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 0non terminés à la fin
MessageÉtatLivraisonsTraité
m0confirmé22
m1confirmé11
m2confirmé22
m3confirmé22
m4confirmé21
m5confirmé21
m6confirmé21
m7confirmé11
m8confirmé11
m9confirmé11

MQTT (Mosquitto)

  • 5traités une fois
  • 0avec l'effet répété
  • 0perdus
  • 0dans la file des messages morts ou archivés
  • 0jamais lus
  • 0considérés comme traités sans l'avoir été
  • 0traités dans le désordre
  • 5non terminés à la fin
MessageÉtatLivraisonsTraité
m0non confirmé11
m1confirmé11
m2non confirmé11
m3confirmé11
m4non confirmé11
m5confirmé11
m6non confirmé10
m7confirmé11
m8non confirmé10
m9confirmé11