Managed MQTT Cloud

Wie viele Verbindungen schafft ein MQTT-Broker?

Es gibt keine einzelne Zahl für die Verbindungskapazität eines MQTT-Brokers. Erfahren Sie, was gleichzeitige Clients tatsächlich begrenzt, wie Sie die Kapazität selbst testen und wie Anbieter verwalteter MQTT-Broker diese Grenzen in Plankontingente übersetzen.

Illustration zur Frage, wie viele Verbindungen ein MQTT-Broker schafft: ein Broker-Server mit Anzeigen für Speicher, Dateideskriptoren und TLS, umgeben von verbundenen Geräten
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

Wie viele Verbindungen schafft ein MQTT-Broker? Die ehrliche Antwort lautet „Es kommt darauf an“, allerdings auf eine kurze, konkrete Liste von Ressourcen, die Sie messen und einplanen können. Dieser Artikel erklärt, was gleichzeitige MQTT-Verbindungen begrenzt, warum veröffentlichte Zahlen selten zu Ihrem Workload passen, wie Sie die Kapazität selbst testen und wie Anbieter verwalteter MQTT-Broker all das in Planlimits übersetzen.

Warum es keine einzelne Zahl gibt

In Herstellermarketing und Konferenzvorträgen finden Sie beeindruckende Verbindungszahlen. Sie sind meist real, aber unter bestimmten Bedingungen gemessen: inaktive Clients, kein TLS oder mit Session Resumption, winzige oder gar keine Payloads, großzügige Hardware und sorgfältig getunte Kernel. Ändern Sie eine dieser Bedingungen, verschiebt sich die Zahl.

Für Sie zählt nicht das Maximum, das ein Broker im Labor erreicht, sondern wie viele Ihrer Clients mit Ihren Keepalive-, TLS-, Subscription- und Nachrichtenmustern eine bestimmte Bereitstellung mit Reserve bedienen kann. Dazu muss man die Engpässe verstehen.

Was gleichzeitige MQTT-Verbindungen begrenzt

Ressource Warum jede Verbindung sie nutzt Was es verschlimmert
Arbeitsspeicher Socket-Puffer, TLS-Zustand, Sitzungsobjekt, Subscriptions, Nachrichten in Zustellung Große Puffer, viele Subscriptions pro Client, gepufferte QoS-1/2-Nachrichten
Dateideskriptoren Jeder TCP-Socket ist auf Unix-artigen Systemen eine offene Datei Niedrige Standard-ulimits, zusätzliche Deskriptoren für Logs und Persistenz
CPU für TLS Handshakes beinhalten Public-Key-Kryptografie Reconnect-Stürme, keine Session Resumption, große Schlüssellängen
CPU für Keepalives PINGREQ und PINGRESP für jeden Client in jedem Intervall Sehr kurze Keepalive-Intervalle bei großen Flotten
Netzwerk und Kernel Verbindungstabellen, Accept-Queues, Limits des Load Balancers Kleiner Accept-Backlog, conntrack-Tabellen, Limits pro IP
Sitzungszustand Persistente Sitzungen überdauern Verbindungsabbrüche Lange Session Expiry für Clients, die nie zurückkehren

Arbeitsspeicher

Bei großen Flotten ruhiger Geräte ist der Arbeitsspeicher meist die erste harte Grenze. Jede Verbindung bringt Kernel-Socket-Puffer, die eigenen Strukturen des Brokers pro Client, TLS-Sitzungszustand und gepufferte Nachrichten mit sich. Subscriptions kommen hinzu, besonders bei vielen Wildcard-Filtern. Clients, die sich mit persistenten Sitzungen trennen, belegen weiter Speicher, bis die Sitzung abläuft.

Dateideskriptoren

Unter Linux verbraucht jeder Socket einen Dateideskriptor. Das Standard-Softlimit vieler Distributionen ist für einen Broker viel zu niedrig, weshalb „too many open files“ einer der häufigsten Fehler beim ersten Selbsthosting ist. Sie können es prüfen und erhöhen:

# Aktuelle Limits der Shell
ulimit -n
ulimit -Hn

# Limits eines laufenden Broker-Prozesses (PID ersetzen)
cat /proc/PID/limits | grep "open files"

# Offene Sockets des Brokers zählen
ls /proc/PID/fd | wc -l

Bei einem systemd-Dienst erhöhen Sie das Limit in einer Drop-in-Datei:

# /etc/systemd/system/mosquitto.service.d/limits.conf
[Service]
LimitNOFILE=200000

Führen Sie dann sudo systemctl daemon-reload && sudo systemctl restart mosquitto aus.

TLS

TLS schützt jede produktive Verbindung, und das hat seinen Preis. Die laufende Verschlüsselung kleiner MQTT-Nachrichten ist günstig, der Handshake dagegen vergleichsweise teuer. Das zählt vor allem, wenn sich viele Clients gleichzeitig verbinden, etwa nach einem standortweiten Stromausfall oder einem Broker-Neustart. Ein Broker, der seine Flotte im Normalbetrieb bequem hält, kann trotzdem Mühe haben, alle Clients in derselben Minute anzunehmen. Reconnect-Verzögerungen mit Jitter auf den Clients sind die beste Abwehr.

Keepalives

Jeder Client sendet ein PINGREQ, wenn er innerhalb seines Keepalive-Intervalls nichts anderes zu senden hat. Über eine große Flotte erzeugen sehr kurze Keepalives eine ständige Grundlast. Ein Keepalive von etwa 30 bis 60 Sekunden ist ein gängiger Kompromiss zwischen schneller Fehlererkennung und Overhead; batteriebetriebene Geräte nutzen oft längere Werte.

Netzwerkpfad

Load Balancer, NAT-Gateways und Firewalls halten alle einen Zustand pro Verbindung und haben eigene Limits. Prüfen Sie in selbst gehosteten Umgebungen den Accept-Backlog des Kernels (net.core.somaxconn) und die Größe der Connection-Tracking-Tabellen, wenn Sie eine zustandsbehaftete Firewall vor den Broker setzen.

So testen Sie die Verbindungskapazität selbst

Wenn Sie Ihren eigenen Broker betreiben, messen Sie, statt zu raten. Das folgende Skript öffnet von einer Maschine aus viele inaktive Verbindungen zu einem Broker, den Sie selbst kontrollieren, etwa einer lokalen Mosquitto-Instanz. Führen Sie Verbindungstests nie gegen einen geteilten oder öffentlichen Broker aus; Sie lösen damit den Flood-Schutz aus und beeinträchtigen andere Nutzer.

# conn_test.py - N inaktive MQTT-Verbindungen zu IHREM EIGENEN Broker (nur zum Testen) öffnen
import sys
import time
import paho.mqtt.client as mqtt

HOST = sys.argv[1] if len(sys.argv) > 1 else "localhost"
COUNT = int(sys.argv[2]) if len(sys.argv) > 2 else 500

connected = 0

def on_connect(client, userdata, flags, reason_code, properties):
    global connected
    if not reason_code.is_failure:
        connected += 1

clients = []
start = time.time()
for i in range(COUNT):
    c = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"conn-test-{i}")
    c.on_connect = on_connect
    try:
        c.connect(HOST, 1883, keepalive=60)
        c.loop_start()
        clients.append(c)
    except OSError as exc:
        print(f"failed at {i}: {exc}")
        break
    if i % 100 == 0:
        time.sleep(0.5)        # Hochlauf drosseln

time.sleep(5)
print(f"{connected}/{COUNT} connected in {time.time() - start:.1f}s")
input("Press Enter to disconnect all clients...")
for c in clients:
    c.disconnect()
    c.loop_stop()

Führen Sie es mit python conn_test.py localhost 2000 aus und beobachten Sie dabei Speicher und CPU des Brokers mit top oder htop. Beachten Sie, dass jeder paho-Client einen eigenen Thread startet, sodass irgendwann die Testmaschine selbst zum Engpass wird; spezialisierte Lastwerkzeuge mit Event Loops skalieren weiter. Erhöhen Sie ulimit -n auch auf der Testmaschine. Wiederholen Sie den Test mit aktiviertem TLS und realistischen Subscriptions, denn Werte mit inaktiven Clients über reines TCP sind die optimistischsten, die Sie je sehen werden.

Wie verwaltete MQTT-Broker Verbindungslimits festlegen

Anbieter verwalteter MQTT-Broker unterliegen denselben Beschränkungen, verwandeln sie aber in Plankontingente, damit Sie keine Kernel tunen müssen. Auf einem geteilten Cluster schützt das Kontingent außerdem jeden Mandanten vor jedem anderen.

ConnectMQ veröffentlicht diese Verbindungslimits pro Plan:

Plan Verbindungslimit Weitere wichtige Limits
Öffentlicher MQTT-Broker (nur für Tests) Fair Use, Limits pro Client Nachrichten bis 64 KB, 10 Nachr./s, 10 Subscriptions pro Client
Serverless (Free) Bis zu 25 QoS bis 1, Nachrichten bis 256 KB
Serverless (Paid) Bis zu 1.000 QoS 2, Nachrichten bis 1 MB, Shared Subscriptions
Dedicated Für Ihren Workload dimensioniert, auf einem isolierten Cluster Nach Absprache mit dem Team
BYOC Für Ihren Workload dimensioniert, in Ihrem eigenen Cloud-Konto Nach Absprache mit dem Team
Self Managed Enterprise Sie betreiben und dimensionieren selbst Nach Absprache mit dem Team

Bei Dedicated und BYOC hängt die richtige Zahl von den Faktoren in diesem Artikel ab: Ihrem Keepalive, der TLS-Nutzung, der Nachrichtenrate und dem Sitzungsverhalten. Teilen Sie diese Details bei der Planung der Bereitstellung mit, statt nach einer einzelnen Schlagzeilenzahl zu fragen. Überschreiten Sie ein Kontingent, erhalten MQTT-5-Clients den Reason Code 0x97 Quota exceeded; unser Leitfaden zu Verbindungslimits von MQTT-Brokern erklärt, wie Sie damit umgehen.

Verbindungen richtig zählen

Teams zählen häufig zu wenig. Nutzen Sie bei der Schätzung diese Checkliste:

  1. Jedes Gerät oder Gateway mit eigener MQTT-Sitzung.
  2. Jede Instanz eines Backend-Dienstes: Datenbank-Writer, Alarmierung, APIs.
  3. Jedes Integrationswerkzeug wie Node-RED, Telegraf oder Home Assistant.
  4. Jedes Dashboard oder jeder Browser-Tab mit einem MQTT-Client über WebSocket.
  5. Entwicklerwerkzeuge: Desktop-Explorer, CLI-Sitzungen, Testskripte.
  6. Vorübergehende Überlappung bei Deployments, wenn alte und neue Dienstinstanzen gleichzeitig laufen.
  7. Wachstumsreserve für die nächsten sechs bis zwölf Monate.

Gateways verändern die Rechnung. Ein Industrie-Gateway, das fünfzig SPS-Tags bündelt, oder ein BLE-Gateway, das Dutzende Sensoren weiterleitet, nutzt eine MQTT-Verbindung, nicht fünfzig. Wenn Sie nahe an einem Planlimit sind, ist das Bündeln am Edge oft günstiger als ein Upgrade. Das gilt besonders in Industrie-4.0-Projekten: Wenn Edge-Gateways pro Linie oder Zelle die Maschinendaten aus SPS und OPC-UA-Servern in einen Unified Namespace (UNS) publizieren, dessen Topics der ISA-95-Hierarchie folgen (etwa acme/werk-stuttgart/montage/linie-1/zelle-3/temperatur), wächst die Verbindungszahl mit den Gateways, nicht mit den Datenpunkten.

Praktische Erkenntnisse

  • Die Verbindungskapazität ist eine Funktion aus Arbeitsspeicher, Dateideskriptoren, TLS-Kosten, Keepalive-Traffic und Sitzungszustand, keine feste Zahl.
  • Kapazität im Normalbetrieb und Kapazität bei Reconnect-Stürmen sind verschieden; entwerfen Sie Clients mit Backoff und Jitter.
  • Testen Sie Ihren eigenen Workload auf Hardware, die Sie kontrollieren, mit aktiviertem TLS.
  • Bei einem verwalteten MQTT-Broker sind die Plankontingente die maßgebliche Zahl, und Sie sollten jeden Client zählen, nicht nur Geräte.

Zum Durchsatz statt zu Verbindungen lesen Sie MQTT-Nachrichten pro Sekunde abschätzen, und zu Wachstumsstrategien MQTT-Broker skalieren. Der Leitfaden zum Cloud-MQTT-Broker stellt alles in den Kontext der Hosting-Entscheidungen.

Starten Sie mit ConnectMQ

ConnectMQ ist ein verwalteter MQTT-Broker mit klaren Verbindungslimits pro Plan, sodass Sie Kapazität planen können, ohne Server zu tunen. Erstellen Sie unter app.connectmq.com einen kostenlosen Serverless-Broker, ohne Kreditkarte, und wechseln Sie mit wachsender Flotte zu Serverless (Paid), Dedicated oder BYOC.

Häufig gestellte Fragen

Wie viele Verbindungen schafft ein MQTT-Broker auf einem einzelnen Server?

Das hängt von Arbeitsspeicher, Limits für Dateideskriptoren, TLS-Nutzung, Keepalive-Intervallen und Sitzungszustand ab. Messen Sie mit Ihrem eigenen Client-Verhalten und aktiviertem TLS, statt sich auf eine Schlagzeilenzahl zu verlassen.

Verringert TLS die Anzahl der Verbindungen, die ein MQTT-Broker schafft?

TLS erhöht den Speicherbedarf pro Verbindung und macht Handshakes CPU-intensiv, was vor allem bei Reconnect-Stürmen ins Gewicht fällt. Verschlüsselter Traffic kleiner Nachrichten im Normalbetrieb ist vergleichsweise günstig.

Verbrauchen inaktive MQTT-Clients trotzdem Broker-Ressourcen?

Ja. Ein inaktiver Client hält weiterhin einen Socket, Speicher für seine Sitzung und Subscriptions und sendet Keepalive-Pings, daher verbrauchen auch ruhige Flotten Kapazität.

Wie viele Verbindungen erlaubt der kostenlose Plan von ConnectMQ?

Der Plan Serverless (Free) erlaubt bis zu 25 gleichzeitige Verbindungen, der kostenpflichtige Serverless-Plan bis zu 1.000. Dedicated- und BYOC-Bereitstellungen werden für Ihren Workload dimensioniert.

Verwandte Artikel

BYOC-MQTT-Broker: Bring Your Own Cloud einfach erklärt

Ein BYOC-MQTT-Broker läuft in Ihrem Cloud-Konto, wird aber von einem Anbieter betrieben. Erfahren Sie, wie das Modell funktioniert, wie die Verantwortung aufgeteilt ist und wie Sie Ihr Konto darauf vorbereiten.

8 Min. Lesezeit

Google Cloud IoT Core Alternative: Optionen und Migration nach der Abschaltung

Google hat Cloud IoT Core im August 2023 eingestellt. Dieser Leitfaden vergleicht die realistischen Alternativen, überträgt IoT-Core-Konzepte auf reines MQTT und zeigt, wie Sie Geräte zu einem verwalteten MQTT-Broker umziehen, während die Daten weiter in Google Cloud fließen.

8 Min. Lesezeit

MQTT-Nachrichten pro Sekunde: Durchsatz abschätzen und messen

Die Durchsatzplanung für MQTT läuft auf wenige Formeln und eine ehrliche Messung hinaus. Erfahren Sie, wie Sie eingehende und ausgehende Nachrichten pro Sekunde abschätzen, Spitzen berücksichtigen und das Ergebnis einem Broker-Plan zuordnen.

7 Min. Lesezeit

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.