Zum Hauptinhalt springen
Version: 5.5

MQTT Performance

Diese Seite beschreibt die Leistungscharakteristik des MQTT-Plug-ins im OPC Router auf Basis realer Benchmark-Messungen (siehe Benchmark-Details).


Einflussfaktoren auf die Performance

Hauptfaktoren

  • Round Trip Time (RTT) – Latenz zwischen OPC Router und Broker. Hat direkten Einfluss auf Durchsatz und Latenz, insbesondere bei QoS 1 und QoS 2.
  • QoS-Level – Bestimmt die Anzahl der Bestätigungsschritte zwischen Client und Broker.
  • Connection Pooling – Erhöht den Durchsatz bei parallelen Transfers.
  • Brokerleistung – Interne Warteschlangen, Topic-Filter und CPU-/I/O-Last.
  • Routerkonfiguration – Anzahl Transfers pro Sekunde, aktivierte Optionen (Deduplication, Wait-for-Transfer etc.).

Quality of Service (QoS)

QoSBeschreibungKommunikationsphasenTypische RTTRelative GeschwindigkeitTypische lokale Latenz
0Fire & forget – keine Bestätigung1 (Client → Broker)0,5 × RTT🟢 Sehr hoch< 10 ms
1Empfangsbestätigung (PUBACK)2 (Client ↔ Broker)1 × RTT🟡 Mittel20–80 ms
24-Wege-Hand­shake (PUBREC/PUBREL/PUBCOMP)4 (Client ↔ Broker)2 × RTT🔴 Niedrig40–150 ms

Network Round Trip Time (RTT)

Die RTT (Round Trip Time) ist die Zeit, die ein Datenpaket benötigt, um vom OPC Router zum MQTT-Broker und wieder zurück zu gelangen. Sie hängt stark von der Netzwerkumgebung ab und beeinflusst direkt die Performance der MQTT-Kommunikation.

UmgebungTypische RTTBeschreibung
Lokal (gleicher Host)0,5–2 msLokaler Mosquitto-Broker oder Docker-Container auf derselben Maschine
Lokales Netzwerk (LAN)1–5 msBroker im gleichen Netzsegment oder Rechenzentrum
Unternehmensnetz (Corp-VPN)10–40 msVPN- oder MPLS-basierte Standortverbindung, zusätzliche Verschlüsselungslatenz
Cloud (Hyperscaler)30–100 msMQTT Broker in Azure, AWS oder Google Cloud, abhängig von Region und Peering
Weitverkehrsnetz (WAN)80–250 msInternationale oder mobile Verbindungen, ggf. über öffentliche Netze
Hinweis

Bei QoS 1 oder QoS 2 verlängert sich die effektive Übertragungszeit linear mit der RTT, da jede Bestätigungsrunde eine vollständige Hin- und Rücklaufzeit benötigt.


Connection Pooling

Das Connection Pooling verteilt Publish-Vorgänge auf mehrere parallele MQTT-Verbindungen und erhöht so die Durchsatzrate erheblich.

ParameterBeschreibung
Min. connectionsMindestanzahl gleichzeitig offener Verbindungen
Max. connectionsObergrenze für parallele MQTT-Verbindungen (einstellbar bis 100)
Idle timeoutZeit bis zum Schließen inaktiver Verbindungen

Vorteile

  • Deutlich höherer Durchsatz bei vielen Transfers
  • Lastverteilung auf mehrere Threads
  • Vermeidung von Blockaden bei QoS 1/2

Empfehlung

SzenarioEmpfohlene Einstellung
Wenige Transfers / einfache TelemetriePool deaktivieren (Single Connection)
Mittlere bis hohe LastMin. = 5, Max. = 50
Sehr hohe Last oder parallele TopicsMin. = 10, Max. = 100

Reale Benchmark-Ergebnisse (lokal)

Gemessen mit Mosquitto 2.0.22, OPC Router 5.5, Windows Sandbox (i7-13700, 4 GB RAM), 100 Byte Payload.

Siehe MQTT Benchmark Ergebnisse

transfer flowsQoSAvg. Throughput [msg/s]Max. [msg/s]Kommentar
106465Basislast ohne Pool
116365Kaum Unterschied zu QoS 0 (lokal)
100640650Lineare Skalierung mit Anzahl Connections
101616648Leichter Overhead durch PUBACK
50026703117Starke Parallelisierung, leichte Schwankungen
100042305286Maximale getestete Rate ohne Pool
50 (Pool)030253230+13 % Steigerung durch Pooling
100 (Pool)055566118Höchster gemessener Durchsatz
Hinweis

Alle Werte stammen aus lokalen Benchmarks (RTT ≈ 1 ms). In realen Netzwerken reduziert sich der Durchsatz proportional zur RTT, da jede QoS-Bestätigung zusätzliche Laufzeit erfordert.


Optimierungsempfehlungen

  1. QoS 0 für schnelle, nicht-kritische Daten (z. B. Telemetrie, Messwerte)
  2. QoS 1 als Standard für Zustellsicherheit mit akzeptabler Performance
  3. QoS 2 nur bei absolut notwendiger Genauigkeit
  4. Connection Pooling aktivieren bei hoher Parallelität oder MQTT 5 Batch-Transfers
  5. Deduplication deaktivieren, wenn Daten häufig gleich bleiben
  6. Cycle Time (Experten-Einstellung) nur reduzieren, wenn CPU-Last stabil bleibt
  7. Keep Alive / Timeout-Werte an RTT des Netzwerks anpassen

Siehe auch