Text & Dokumente
Zahlen & Berechnung
Daten & Formate
Sicherheit
Entwicklung & DevOps
Künstliche Intelligenz
Finanzen
Gesundheit & Wohlbefinden
Produktivität
Spiele & Unterhaltung
Multimedia & Design
Unternehmen
Bedienungsanleitung
So wird es benutzt

Wähle ein vordefiniertes Szenario oder schreib deins in JSON. Dasselbe Szenario läuft in RabbitMQ, in Kafka mit einer klassischen Gruppe, in Kafka mit einer Share Group, in Amazon SQS (mit SNS davor, wenn es mehrere Gruppen gibt), in NATS JetStream, in Redis Streams und in MQTT, und sie werden verglichen: was einmal verarbeitet wird, was sich wiederholt, was verloren geht, was in der Dead-Letter-Queue landet. Ändere die Konfiguration jedes Brokers, und das Ergebnis kommt von selbst.

Was es ist und was nicht

Es ist ein Simulator. Seine Regeln sind aus dem Code von RabbitMQ 4.0.5 und 4.3.6 und von Kafka 4.3.1 übernommen und gegen diese echten Broker kalibriert: 5.000 zufällige Routings pro Version, Szenarien für Zustellungswiederholungen und die Dead-Letter-Queue, 2.000 Partitionsschlüssel, Verteilungen von Java-Consumer-Gruppen, was bei einem Rebalancing freigegeben wird, wo ein Consumer nach einem Ausfall weitermacht (mit Commit pro Batch und mit auto-commit) und wie oft eine Share Group mit REJECT und mit RELEASE zustellt. Außerdem die Verteilung unter den Consumern von RabbitMQ und, in den Share Groups, was passiert, wenn ein Consumer sich aufhängt (sie kommt zurück, wenn die Sperre abläuft) und wenn er stirbt (sie wird sofort freigegeben). SQS ist gegen ElasticMQ 1.7.1 kalibriert, einen EMULATOR, nicht gegen AWS: Redrive, Sichtbarkeit, FIFO-Reihenfolge nach Gruppen und Receipt Handles; SNS stammt aus der AWS-Dokumentation. NATS JetStream, gegen echtes NATS 2.15.0: max_deliver, nak, ack_wait, verspätetes Acknowledgment, term, Verteilung unter Clients, max_ack_pending, deliver_policy, verzögertes nak und Backoff. Redis Streams, gegen echtes Redis 8.0.2: Liste der ausstehenden Einträge, XAUTOCLAIM, gruppenweites XACK, erneutes Lesen, $ und 0, Verteilung und Kürzung des Streams (MAXLEN); das Zustellungslimit und seine Dead-Letter-Queue sind das übliche Rezept der Anwendung, weil Redis sie nicht mitbringt. MQTT, gegen echtes Mosquitto 2.0.21: was erneut gesendet wird und wann, dauerhafte und bereinigte Sitzungen, das Fenster von 20 unbestätigten Nachrichten, gemeinsame Abonnements, QoS 0, 1 und 2 und zurückbehaltene Nachrichten. Er misst keine Zeiten oder Performance: Die Zeit ist logisch, in Ticks (1 Tick = 1 s für die Standardwerte von Kafka).

Das Szenario

Nachrichten (id, t und optional clave, ttl, veneno), Consumer (id, grupo, prefetch, coste, ackRetraso, entra, probFallo) und Fehler (t, consumidor, tipo muere oder vuelve). In RabbitMQ ist jede Gruppe eine Queue; in Kafka eine Consumer-Gruppe. Eine Nachricht mit veneno schlägt bei der Verarbeitung immer fehl.

Message-BrokerRabbitMQ und Kafka, dasselbe Szenario
Message-BrokerRabbitMQ und Kafka, dasselbe Szenario

Simuliert. Kalibriert gegen echte RabbitMQ 4.0.5 und 4.3.6 und Kafka 4.3.1 bei: Routing, Zustellungswiederholungen, Dead-Letter-Queue, Verteilung unter den Consumern, Partition nach Schlüssel, Verteilung und Rebalancing der Gruppe, wo weitermacht, wer nach einem Ausfall einsteigt, und Zustellungen, Sperren und Ausfälle der Share Groups. SQS, gegen einen Emulator (ElasticMQ 1.7.1), nicht gegen AWS; SNS, nach der Dokumentation; NATS JetStream, Redis Streams und MQTT, gegen echtes NATS 2.15.0, Redis 8.0.2 und Mosquitto 2.0.21. Misst keine Zeiten oder Performance.

C1 verarbeitet und braucht lange zum Bestätigen; er stirbt mit erledigter, aber nicht bestätigter Arbeit. Was wiederholt sich bei jedem Broker?

RabbitMQ

  • 7einmal verarbeitet
  • 3mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 0am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0bestätigt22
m1bestätigt11
m2bestätigt22
m3bestätigt11
m4bestätigt22
m5bestätigt11
m6bestätigt21
m7bestätigt11
m8bestätigt21
m9bestätigt11

Kafka (klassische Gruppe)

  • 7einmal verarbeitet
  • 3mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 0am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0bestätigt22
m1bestätigt11
m2bestätigt22
m3bestätigt11
m4bestätigt22
m5bestätigt21
m6bestätigt21
m7bestätigt11
m8bestätigt11
m9bestätigt11

Kafka (Share Group)

  • 7einmal verarbeitet
  • 3mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 0am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0bestätigt22
m1bestätigt11
m2bestätigt22
m3bestätigt11
m4bestätigt22
m5bestätigt21
m6bestätigt21
m7bestätigt11
m8bestätigt11
m9bestätigt11

Amazon SQS (mit SNS)

  • 7einmal verarbeitet
  • 3mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 0am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0bestätigt22
m1bestätigt22
m2bestätigt22
m3bestätigt21
m4bestätigt21
m5bestätigt11
m6bestätigt11
m7bestätigt11
m8bestätigt11
m9bestätigt11

NATS JetStream

  • 7einmal verarbeitet
  • 3mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 0am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0bestätigt22
m1bestätigt11
m2bestätigt22
m3bestätigt11
m4bestätigt22
m5bestätigt11
m6bestätigt21
m7bestätigt11
m8bestätigt21
m9bestätigt11

Redis Streams

  • 7einmal verarbeitet
  • 3mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 0am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0bestätigt22
m1bestätigt11
m2bestätigt22
m3bestätigt22
m4bestätigt21
m5bestätigt21
m6bestätigt21
m7bestätigt11
m8bestätigt11
m9bestätigt11

MQTT (Mosquitto)

  • 5einmal verarbeitet
  • 0mit wiederholtem Effekt
  • 0verloren
  • 0in der Dead-Letter-Queue oder archiviert
  • 0nie gelesen
  • 0als erledigt gezählt, ohne verarbeitet zu werden
  • 0außerhalb der Reihenfolge verarbeitet
  • 5am Ende nicht abgeschlossen
NachrichtStatusZustellungenVerarbeitet
m0unbestätigt11
m1bestätigt11
m2unbestätigt11
m3bestätigt11
m4unbestätigt11
m5bestätigt11
m6unbestätigt10
m7bestätigt11
m8unbestätigt10
m9bestätigt11