Skip to content

Message Queues und ereignisgesteuerte Architektur

🎯 Kernfrage

Wie kann die Stabilität der Kernprozesse sichergestellt werden, wenn das System stark gekoppelt ist und der Datenverkehr plötzlich ansteigt? Message Queues sind der „Puffer" und „Entkoppler" moderner verteilter Systeme. Dieser Artikel vertieft das Verständnis der Designphilosophie und Ingenieurspraxis von Message Queues anhand realer Beispiele (Restaurant-Wartesystem, Paketsortierung, Flash-Sale-Systeme).


1. Warum „Message Queues"?

1.1 Ein realer Fall: Die Entwicklung des Taobao-Bestellsystems

Im Jahr 2012 erlitt das Bestellsystem von Taobao einen schwerwiegenden Ausfall. Um Mitternacht am Singles' Day (11.11.) strömte der Datenverkehr schlagartig herein. Der Bestellservice rief direkt den Bestandsservice, den Zahlungsservice, den Logistikservice auf … die gesamte Kette brach wie Dominosteine nacheinander zusammen.

Die damalige Architektur (enge Kopplung):

Benutzerbestellung → Bestellservice → synchroner Aufruf Bestandsservice → synchroner Aufruf Zahlungsservice → synchroner Aufruf Logistikservice
                    ↓                    ↓                    ↓
                 Antwort 200ms      Antwort 500ms      Antwort 300ms

⚠️ Fatale Probleme enger Kopplung

  • Gesamtantwortzeit = 200 + 500 + 300 = 1000ms (Benutzer wartet 1 Sekunde)
  • Bestandsservice fällt aus → Bestellservice fällt ebenfalls aus (Thread-Pool erschöpft)
  • Zahlungsservice wird langsam → die gesamte Kette wird ausgebremst
  • Keine horizontale Skalierung → nur vertikale Skalierung möglich (teuer und begrenzt)

Verbesserte Architektur (mit Message Queue):

Benutzerbestellung → Bestellservice → sendet „Bestellung erstellt"-Nachricht → sofortige Antwort (50ms)

                        Message Queue (Kafka)

        ┌─────────────┬─────────────┬─────────────┐
        ▼             ▼             ▼             ▼
   Bestandsservice  Zahlungsservice  Logistikservice  Benachrichtigungsservice
   (asynchroner     (asynchrone     (asynchrone       (asynchroner
    Abzug)           Verarbeitung)   Erstellung)       Versand)

✨ Verbesserte Ergebnisse

  • Benutzerantwortzeit = 50ms (20-fache Verbesserung der Benutzererfahrung)
  • Bestandsservice fällt aus → Nachrichten werden in der Queue zwischengespeichert, Verarbeitung nach Wiederherstellung
  • Zahlungsservice wird langsam → beeinträchtigt die Bestellungserstellung nicht
  • Horizontale Skalierung möglich → einfach weitere Consumer-Instanzen hinzufügen

1.2 Message Queues mit Alltagsbeispielen erklärt

Das Restaurant-Wartesystem

Stell dir ein beliebtes Restaurant vor:

  • Ohne Wartesystem: Kunden müssen am Schalter stehen und warten, begrenzte Schalter, lange Schlangen, hoher Druck auf das Restaurant
  • Mit Wartesystem: Nach der Bestellung erhältst du eine Nummer, du kannst dich setzen und holst dein Essen, wenn deine Nummer aufgerufen wird

Eine Message Queue ist das „Wartesystem" der Softwarewelt:

  • Producer (Person, die bestellt) → sendet Nachricht (Bestellung) an die Queue
  • Queue (Aufrufanzeige) → speichert Nachrichten zwischen
  • Consumer (Koch) → verarbeitet Nachrichten im eigenen Tempo
Peak Shaving: flatten traffic spikes
Simulate a burst and see how a queue protects backend systems
Processing capacity (Consumer)200 req/s
Maximum backend processing speed
Queue capacity (Queue Size)2000
Maximum requests the message queue can buffer
Current inbound traffic
100 req/s
Queue backlog
0 msgs
Actual processing rate
0 req/s
Rejected requests (rate limited)
0 req
Inbound traffic (user requests)Processed traffic (system load)Queue backlog
💡
Core principle: When inbound traffic (blue) exceeds processing capacity (green line), extra requests are stored in the message queue (orange area).
After the traffic peak passes, the system keeps processing the backlog at full speed until the queue is empty. This is peak shaving.

2. Was ist eine Message Queue? (Definition + drei Kernelemente)

2.1 Was ist eine „Message Queue"?

🤔 Begriffserklärung

Message Queue (MQ) ist ein Container zum Speichern von Nachrichten. Producer legen Nachrichten hinein, Consumer entnehmen und verarbeiten sie. Sie ermöglicht „asynchrone Kommunikation" – der Sender muss nicht auf die Verarbeitung durch den Empfänger warten.

Synchron vs. Asynchron:

  • Synchron: Wie ein Telefonanruf – der Gesprächspartner muss abheben, damit kommuniziert werden kann
  • Asynchron: Wie eine WeChat-Nachricht – einfach abschicken, der Empfänger liest sie, wenn er Zeit hat

Es ist wie der Unterschied zwischen einem Anruf (synchron) und einer Textnachricht (asynchron).

2.2 Die drei Kernelemente einer Message Queue

Element 1: Producer

Aufgabe: Nachrichten erstellen und an die Queue senden.

Alltagsvergleich: Der Producer ist wie ein „Absender", der einen Brief (Nachricht) zur Post (Queue) bringt.

Wichtige Designaspekte
  • Sendemodus: Synchroner Versand (zuverlässig, aber blockierend) vs. asynchroner Versand (hohe Leistung, aber Callback-Behandlung erforderlich)
  • Nachrichtenbestätigung: Auf Broker-Bestätigung warten (At Least Once) vs. Fire-and-Forget (At Most Once)
  • Fehlerbehandlung: Wiederholungsstrategie, lokales Log-Backup, Dead Letter Queue

Element 2: Consumer

Aufgabe: Nachrichten aus der Queue abrufen und verarbeiten.

Alltagsvergleich: Der Consumer ist wie ein „Empfänger", der einen Brief (Nachricht) aus dem Postfach (Queue) holt und bearbeitet.

Wichtige Designaspekte
  • Konsummuster: Push-Modell (Broker sendet aktiv) vs. Pull-Modell (Consumer holt aktiv)
  • Konsumbestätigung: Automatisches ACK (effizient, aber möglicher Nachrichtenverlust) vs. manuelles ACK (zuverlässig, aber Timeout-Behandlung nötig)
  • Nebenläufigkeitssteuerung: sequenzielle Einzelthread-Verarbeitung vs. parallele Multithread-Verarbeitung
  • Fehlerbehandlung: Wiederholungsstrategie, Dead Letter Queue, Kompensationsmechanismus

Element 3: Broker

Aufgabe: Nachrichten empfangen, speichern und weiterleiten.

Alltagsvergleich: Der Broker ist wie ein „Postamt" oder „Paketverteilzentrum", das für Empfang, Sortierung und Zustellung zuständig ist.

Wichtige Designaspekte
  • Speichermodell: In-Memory-Speicherung (niedrige Latenz) vs. Festplattenspeicherung (hohe Zuverlässigkeit)
  • Replikationsstrategie: Master-Slave-Replikation, synchrone Multi-Replica
  • Hochverfügbarkeitsmechanismus: Cluster-Deployment, automatisches Failover
  • Skalierbarkeit: Partitionierung, Sharding

3. Kernfrage 1: Wie entkoppelt man Systeme, um „Kettenreaktionen" zu vermeiden?

3.1 Die Tragödie enger Kopplung: Ein Service fällt aus, alles bricht zusammen

Szenario: Frühe Architektur einer E-Commerce-Plattform

Bestellservice ruft nachgelagerte Services direkt auf:
┌─────────────┐
│ Bestellservice │
└──────┬──────┘

       ├───────────┬───────────┬───────────┐
       ▼           ▼           ▼           ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│Bestands- │ │Zahlungs- │ │Logistik- │ │SMS-      │
│service   │ │service   │ │service   │ │service   │
│  200ms   │ │  500ms   │ │  300ms   │ │  100ms   │
└──────────┘ └──────────┘ └──────────┘ └──────────┘

📊 Problemanalyse-Tabelle

ProblemKonkrete AuswirkungFolge
Kaskadierender AusfallBestandsservice fällt aus, Bestellservice hat synchronen TimeoutThread-Pool des Bestellservice erschöpft, keine neuen Anfragen möglich
AntwortlatenzMuss auf Antwort aller nachgelagerten Services wartenBenutzer wartet über 1 Sekunde, extrem schlechte UX
ErweiterbarkeitNeuer Punkteservice erfordert Codeänderung im BestellserviceLängere Release-Zyklen, erhöhtes Risiko
RessourcenverschwendungBestellservice muss auf SMS-Service wartenDatenbankverbindungen werden lange blockiert

3.2 Entkopplungslösung: Message Queue als „Zwischenschicht"

Architektur nach der Entkopplung:

Bestellservice sendet nur Nachrichten, ohne Kenntnis der Consumer:

┌─────────────┐
│ Bestellservice │ ──sendet „Bestellung erstellt"-Nachricht──┐
└─────────────┘                       │

                            ┌───────────────────┐
                            │   Message Queue    │
                            │  (Kafka/RabbitMQ) │
                            │   - zuverlässiger  │
                            │     Speicher       │
                            │   - Multi-Replica  │
                            │   - Reihenfolge-   │
                            │     garantie       │
                            └─────────┬─────────┘

              ┌───────────────────────┼───────────────────────┐
              │                       │                       │
              ▼                       ▼                       ▼
       ┌──────────────┐      ┌──────────────┐      ┌──────────────┐
       │ Bestands-    │      │ Zahlungs-    │      │ Logistik-    │
       │ service      │      │ service      │      │ service      │
       │ abonniert    │      │ abonniert    │      │ abonniert    │
       │ Bestellereig.│      │ Bestellereig.│      │ Bestellereig.│
       └──────────────┘      └──────────────┘      └──────────────┘
🔗System Decoupling DemoFrom tight coupling to loose coupling
❌ The fatal problem of tight coupling
Order service
Create order
Call inventory service
Call points service
Call notification service
Notification service
Send SMS/email
⚠️Strong dependency: notification failure blocks order creation
⚠️Slow response: total time = 300ms + 500ms + 400ms = 1200ms
⚠️Hard to extend: adding a service requires changing order code
💡Core idea:Synchronous calls create strong dependencies and slow responses; asynchronous messaging decouples systems, improves response speed, and scales more easily.

✨ Vorteile der Entkopplung

DimensionVor der EntkopplungNach der Entkopplung
FehlerisolierungBestandsausfall = BestellausfallBestandsausfall, Nachrichten in Queue zwischengespeichert, Konsum nach Wiederherstellung
Antwortzeit1000ms (synchrones Warten)50ms (Rückkehr nach Nachrichtenversand)
ErweiterbarkeitNeuer Service erfordert CodeänderungNeuer Service muss nur Topic abonnieren
SystemkomplexitätBestellservice stark abhängig von nachgelagerten ServicesBestellservice nur von Message Queue abhängig

3.3 Das Wesen der Entkopplung: Von „direktem Aufruf" zu „ereignisgesteuerter Architektur"

Paradigmenwechsel:

Traditionelles Denken (imperativ):
"Der Bestellservice befiehlt dem Bestandsservice: Ziehe Bestand ab!"
  ↓ Direkter Aufruf
  ↓ Hohe Kopplung, aufgerufene Partei muss online sein
  ↓ Aufrufer muss die Schnittstelle des Aufgerufenen kennen

Ereignisgesteuertes Denken (deklarativ):
"Der Bestellservice deklariert: Bestellung wurde erstellt. Wer interessiert ist, verarbeitet sie."
  ↓ Ereignis an Message Queue senden
  ↓ Entkopplung, Consumer können offline sein
  ↓ Producer muss nicht wissen, dass Consumer existieren

4. Kernfrage 2: Wie glättet man Lastspitzen bei plötzlichem Traffic-Anstieg?

4.1 Flash-Sale-Szenario: Wie verarbeitet man 100.000 QPS stabil?

Szenario: Flash-Sale am Singles' Day einer E-Commerce-Plattform, erwarteter Spitzenwert 100.000 QPS, aber die Datenbank verträgt nur 1.000 QPS.

Folgen des direkten Ansturms:

Benutzeranfragen ──→ Anwendungsserver ──→ Datenbank
  100.000/s           100.000/s            1.000/s (Limit)

                                   Verbindungspool erschöpft
                                   Antwort-Timeout
                                   Datenbankabsturz

                                   Lawineneffekt (alle datenbankabhängigen Services fallen aus)

🌊 Begriffserklärung

QPS (Queries Per Second): Anzahl der Abfragen pro Sekunde, eine Kennzahl für den Systemdurchsatz.

100.000 QPS bedeutet 100.000 Anfragen pro Sekunde – als würden 100.000 Menschen gleichzeitig in ein Geschäft stürmen.

4.2 Lösung zur Lastspitzenglättung: Message Queue als „Pufferspeicher"

Architekturdesign:

┌───────────────────────────────────────────────────────────────────────┐
│                        Flash-Sale-Systemarchitektur                    │
├───────────────────────────────────────────────────────────────────────┤
│                                                                       │
│  Schicht 1: Gateway-Schicht (harte Ratenbegrenzung)                   │
│  ┌───────────────────────────────────────────────────────────────┐    │
│  │  - Token Bucket Rate Limiting: 100.000/s → 10.000/s            │    │
│  │    (90% der Anfragen verwerfen)                                │    │
│  │  - CDN-Caching statischer Ressourcen (Produktdetailseite)      │    │
│  │  - CAPTCHA/Warteseite (erste Schicht der Lastglättung)         │    │
│  └───────────────────────────────────────────────────────────────┘    │
│                            │                                          │
│                            ▼                                          │
│  Schicht 2: Serviceschicht (weiche Ratenbegrenzung)                   │
│  ┌───────────────────────────────────────────────────────────────┐    │
│  │  - Nginx Rate Limiting: 10.000/s → 5.000/s                    │    │
│  │  - Redis-Bestandsabzug (atomare Operation):                    │    │
│  │    * Lua-Skripte für Atomarität                                │    │
│  │    * Bei unzureichendem Bestand: direkt „Ausverkauft"          │    │
│  │  - Bestell-Token generieren (Warteschlangen-Credential)        │    │
│  └───────────────────────────────────────────────────────────────┘    │
│                            │                                          │
│                            ▼                                          │
│  Schicht 3: Message-Queue-Schicht (Kern der Lastglättung)             │
│  ┌───────────────────────────────────────────────────────────────┐    │
│  │  Kafka/RocketMQ:                                              │    │
│  │  - Batch-Schreiben: 5.000/s → 1.000/s (Datenbankkapazität)    │    │
│  │  - Nachrichtenpersistenz: Festplatte für keine Nachrichten-    │    │
│  │    verluste                                                    │    │
│  │  - Multi-Partition paralleler Konsum: Durchsatzsteigerung      │    │
│  │  - Consumer-Offset-Management: Failover-Unterstützung          │    │
│  │                                                                │    │
│  │  Wichtige Metriken:                                            │    │
│  │  - Produktionsrate (Produce Rate)                              │    │
│  │  - Konsumrate (Consume Rate)                                   │    │
│  │  - Nachrichtenstau (Lag)                                       │    │
│  └───────────────────────────────────────────────────────────────┘    │
│                            │                                          │
│                            ▼                                          │
│  Schicht 4: Konsumschicht (asynchrone Verarbeitung)                   │
│  ┌───────────────────────────────────────────────────────────────┐    │
│  │  Bestellverarbeitungs-Consumer (mehrere Instanzen):            │    │
│  │  - Nachrichten von Kafka abrufen (1.000/s, passend zur DB)     │    │
│  │  - Datenbanktransaktion: Bestellung anlegen + Bestand abziehen │    │
│  │  - Bestellstatus auf „Erstellt" aktualisieren                  │    │
│  │  - Benachrichtigung über erfolgreiche Bestellung senden        │    │
│  │    (E-Mail/SMS/Push)                                           │    │
│  │  - Nachrichtenkonsum bestätigen (ACK)                          │    │
│  │                                                                │    │
│  │  Consumer-Skalierungsstrategie:                                │    │
│  │  - Wenn Lag > 10.000: automatisch Consumer-Instanzen erhöhen   │    │
│  │  - Wenn Lag < 1.000: Consumer-Instanzen reduzieren (Kosten)    │    │
│  └───────────────────────────────────────────────────────────────┘    │
│                                                                       │
└───────────────────────────────────────────────────────────────────────┘
Peak Shaving: flatten traffic spikes
Simulate a burst and see how a queue protects backend systems
Processing capacity (Consumer)200 req/s
Maximum backend processing speed
Queue capacity (Queue Size)2000
Maximum requests the message queue can buffer
Current inbound traffic
100 req/s
Queue backlog
0 msgs
Actual processing rate
0 req/s
Rejected requests (rate limited)
0 req
Inbound traffic (user requests)Processed traffic (system load)Queue backlog
💡
Core principle: When inbound traffic (blue) exceeds processing capacity (green line), extra requests are stored in the message queue (orange area).
After the traffic peak passes, the system keeps processing the backlog at full speed until the queue is empty. This is peak shaving.

4.3 Mathematische Grundlagen der Lastspitzenglättung

Effekt der Traffic-Glättung:

Ursprünglicher Traffic (Spitze):                 Geglätteter Traffic:

100.000/s │    ╱╲                  1000/s │████████████████
          │   ╱  ╲                        │
          │  ╱    ╲                       │
  1000/s  │╱        ╲                0/s  │
          └───────────────                └────────────────
           0s   1s   2s                    0s              20s

Ursprünglich: 100.000/s Spitze, 1 Sekunde Dauer
Geglättet: 1.000/s konstante Rate, 100 Sekunden Dauer

Wichtige Formel:

Queue-Länge = Producer-Rate × Dauer - Consumer-Rate × Dauer
            = 100.000 × 1 - 1.000 × 1
            = 99.000 Nachrichten (Queue-Rückstau zu Spitzenzeiten)

Zeit zum vollständigen Konsum = Queue-Länge / Consumer-Rate
                              = 99.000 / 1.000
                              = 99 Sekunden

5. Kernfrage 3: Wie stellt man sicher, dass Nachrichten nicht verloren gehen, nicht dupliziert werden und in richtiger Reihenfolge bleiben?

5.1 Nachrichtenzuverlässigkeit: Drei Verteidigungslinien

Nachrichten können in drei Phasen verloren gehen: beim Senden durch den Producer, bei der Speicherung im Broker und bei der Verarbeitung durch den Consumer.

🛡️ Drei Verteidigungslinien

Linie 1: Producer-Bestätigung (Producer ACK)

  • Beim Senden auf Broker-Bestätigung warten, dass die Nachricht empfangen wurde
  • Wenn keine Bestätigung: Wiederholung oder lokales Logging

Linie 2: Broker-Persistenz

  • Nachrichten auf Festplatte schreiben, nicht nur im Arbeitsspeicher
  • Multi-Replica-Synchronisation, um Datenverlust zu verhindern

Linie 3: Consumer-Bestätigung (Consumer ACK)

  • Nach Verarbeitung der Nachricht manuell bestätigen (ACK)
  • Bei Verarbeitungsfehler: nicht bestätigen, Broker liefert erneut zu
🛡️Message Reliability DemoThree defense lines keep messages from being lost
Line 1
Producer ACK
📤
Producer
Send message
📨
Message
ACK confirmation
📦
Broker
Receive and store
💡 If no ACK is received, the producer retries or records a local log.
Line 2
Broker persistence
Memory storage
Fast, but lost on restart
❌ High risk
vs
🔄 Multi-replica sync
Messages are synced to 3 nodes, so data is not lost even if 1 node fails.
Message persisted and safe
Line 3
Consumer ACK
1
Pull message
Fetch message from Broker
2
Process message
Run business logic
3
Manual ACK
Confirm after processing
Auto ACK
Efficient but can lose messages
⚠️ Not recommended
💡 If processing fails, no ACK is sent and the Broker redelivers.
🎯
All three defense lines are required:Producer ACK → Broker persistence → Consumer ACK

5.2 Umgang mit doppelten Nachrichten?

Nachrichtenduplizierung kann in folgenden Szenarien auftreten:

  1. Producer-Wiederholung: Producer sendet Nachricht, erhält kein ACK, wiederholt den Versand derselben Nachricht
  2. Consumer-ACK-Timeout: Consumer hat verarbeitet, aber ACK läuft in Timeout, Broker liefert erneut zu
  3. Netzwerk-Jitter: Consumer-ACK erreicht Broker nicht, Broker geht von nicht konsumiert aus
  4. Consumer-Neustart: Consumer startet neu und konsumiert dieselbe Nachrichtencharge erneut

💡 Idempotenz

Idempotenz: Dieselbe Operation mehrfach ausgeführt hat denselben Effekt wie eine einmalige Ausführung.

Idempotenz im Alltag:

  • Idempotent: Aufzugknopf drücken (10-mal oder 1-mal drücken – der Aufzug kommt in beiden Fällen)
  • Nicht idempotent: Überweisung (10 Yuan überweisen, zweimal ausgeführt = 20 Yuan überwiesen)

Technische Lösung: Jeder Nachricht eine eindeutige ID zuweisen und vor der Verarbeitung prüfen, ob sie bereits verarbeitet wurde.

🔄Idempotence DemoRepeated consumption does not create side effects
❌ Non-idempotent operation: bank transfer
Repeated consumption can debit multiple times
Disabled
Processing log
No logs yet. Click the button to start.
❌ No idempotence protection
Debit ¥100
Duplicate consumption causes multiple debits
✅ With idempotence protection
Debit ¥100
Duplicate requests are filtered, so debit happens once
🎯
Core idempotence principle: Generate a unique ID for each message and check whether it was processed before doing the operation.

6. Praxis: Wie wählt man die richtige Message Queue?

6.1 Vergleich der vier wichtigsten Message Queues

EigenschaftRabbitMQKafkaRocketMQRedis Stream
PositionierungKlassische MQVerteilter Log-StreamE-Commerce-MQLeichtgewichtige Queue
Durchsatz~10.000/s~1.000.000/s~100.000/s~50.000/s
LatenzMikrosekundenMillisekundenMillisekundenMillisekunden
ZuverlässigkeitHoch (Persistenz)Hoch (Multi-Replica)Hoch (synchroner Flush)Mittel (AOF)
Nachrichten-ReplayNicht unterstütztUnterstütztUnterstütztUnterstützt
Transaktionale NachrichtenUnterstützt (schwach)Nicht unterstütztUnterstützt (stark)Nicht unterstützt
Verzögerte NachrichtenUnterstütztNicht unterstütztUnterstütztNicht unterstützt
EinsatzszenarienTraditionelle UnternehmensanwendungenLogging, Big DataE-Commerce, FinanzenKleine Anwendungen

💡 Auswahlempfehlung

Entscheidungsbaum:

Message Queue auswählen:

├─ Transaktionale Nachrichten nötig (verteilte Transaktionen)?
│  ├─ Ja → RocketMQ (bevorzugt) oder RabbitMQ
│  └─ Nein → weiter

├─ Massenhaftes Logging/Real-Time-Streaming nötig?
│  ├─ Ja → Kafka (bevorzugt)
│  └─ Nein → weiter

├─ QPS > 10.000/s?
│  ├─ Ja → RocketMQ oder Kafka
│  └─ Nein → weiter

├─ Komplexes Routing nötig (z. B. Headers-Matching)?
│  ├─ Ja → RabbitMQ
│  └─ Nein → weiter

├─ Redis-Infrastruktur bereits vorhanden?
│  ├─ Ja → Redis Stream (schneller Einstieg)
│  └─ Nein → RabbitMQ (umfassende Funktionen, moderate Lernkurve)

7. Zusammenfassung: Design-Denkanstöße für Message Queues

7.1 Kernprinzipien im Überblick

PrinzipBedeutungPraxishinweise
EntkopplungServices hängen nicht direkt voneinander abKommunikation über Message Queue, Consumer-Ausfälle beeinträchtigen Producer nicht
LastglättungTraffic-Schwankungen ausgleichenMessage Queue als Pufferspeicher, Consumer mit konstanter Rate
ZuverlässigkeitKeine verlorenen NachrichtenProducer-ACK + Broker-Persistenz + Consumer-ACK
IdempotenzDoppelte Verarbeitung ohne AuswirkungIdempotenz auf Geschäftsebene sicherstellen (Unique Key, Zustandsmaschine)
ReihenfolgeGarantierte NachrichtenreihenfolgeEinzelpartition-Reihenfolge oder Consumer-seitige Sortierung

7.2 Design-Checkliste

Vor der Einführung einer Message Queue folgende Fragen stellen:

  • [ ] Wird überhaupt eine Message Queue benötigt? (Einfache Asynchronität kann mit Thread-Pools erreicht werden)
  • [ ] Ist Nachrichtenverlust akzeptabel? (Bestimmt das Zuverlässigkeitsniveau)
  • [ ] Beeinträchtigen doppelte Nachrichten das Geschäft? (Bestimmt den Idempotenz-Aufwand)
  • [ ] Ist die Nachrichtenreihenfolge wichtig? (Bestimmt die Partitionierungsstrategie)
  • [ ] Wie ist die Verarbeitungskapazität der Consumer? (Bestimmt Queue-Größe und Alarm-Schwellenwerte)
  • [ ] Wie geht man mit fehlgeschlagenem Konsum um? (Bestimmt Wiederholungs- und Dead-Letter-Strategie)

8. Glossar

BegriffVollformErklärung
MQMessage QueueMessage Queue. Middleware für asynchrone Kommunikation, entkoppelt Producer und Consumer.
Producer-Producer. Die Partei, die Nachrichten sendet.
Consumer-Consumer. Die Partei, die Nachrichten empfängt und verarbeitet.
Broker-Broker. Das Serverprogramm, das Nachrichten speichert und weiterleitet.
Topic-Topic. Logische Kategorisierung von Nachrichten (z. B. „orders").
Queue-Queue. Physischer Container zum Speichern von Nachrichten.
Partition-Partition. Kafka-Konzept, ein Topic kann in mehrere Partitionen aufgeteilt werden, um die Parallelität zu erhöhen.
ACKAcknowledgmentAcknowledgment. Consumer bestätigt dem Broker die Verarbeitung einer Nachricht.
Pub/SubPublish/SubscribePublish/Subscribe. Ein Nachrichtenmuster, bei dem eine Nachricht von mehreren Consumern empfangen werden kann.
P2PPoint-to-PointPoint-to-Point. Ein Nachrichtenmuster, bei dem eine Nachricht nur von einem Consumer empfangen werden kann.
DLQDead Letter QueueDead Letter Queue. Speichert Nachrichten, die nicht konsumiert werden können.
Idempotence-Idempotenz. Mehrfache Ausführung führt zum gleichen Ergebnis.
Throughput-Durchsatz. Anzahl der pro Zeiteinheit verarbeiteten Nachrichten.
Latency-Latenz. Zeitspanne vom Senden bis zum Empfang einer Nachricht.
Persistence-Persistenz. Nachrichten werden auf Festplatte geschrieben, nicht nur im Arbeitsspeicher.
Replication-Replikation. Für Hochverfügbarkeit werden Nachrichten auf mehrere Knoten repliziert.
Transaction Message-Transaktionale Nachricht. Stellt die Konsistenz zwischen lokaler Transaktion und Nachrichtenversand sicher.
Backpressure-Backpressure. Consumer signalisiert Producer, langsamer zu senden, wenn die Verarbeitung nicht hinterherkommt.
Offset-Offset. Die Konsumposition eines Consumers innerhalb einer Partition.
Rebalance-Rebalance. Neuverteilung der Partitionen bei Änderungen in der Consumer-Gruppe.