Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Throttle-Transformation begrenzt, wie oft sie Nachrichten zu einem MQTT-Thema weiterleitet. Anstatt Nachrichten basierend auf ihrem Inhalt zu löschen, wirft die Throttle-Transformation Nachrichten basierend darauf, wann sie sie verarbeitet, und leitet höchstens eine Nachricht pro Thema-Muster innerhalb jedes konfigurierten Intervalls weiter. Verwenden Sie Drosselung, um nachgelagerte Systeme vor stoßweise auftretenden oder hochfrequenten Quellen zu schützen, ohne den Nachrichteninhalt zu ändern.
Eine Übersicht über Datenflussdiagramme und die Art und Weise, wie Transformationen in einer Pipeline erstellt werden, finden Sie in der Übersicht über Datenflussdiagramme.
Prerequisites
- Eine Instanz von Azure IoT Einsatz, die in einem Kubernetes-Cluster bereitgestellt wird. Weitere Informationen finden Sie unter Deploy Azure IoT Einsatz.
- Die Bereitstellung erstellt automatisch einen Standard-Registry-Endpunkt namens
default, der aufmcr.microsoft.comverweist. Die integrierten Transformationen verwenden diesen Endpunkt.
Skalierungsbeschränkung für zustandsbehaftete Diagramme
Important
Fenster- und Drosselungs-Transformationen sind zustandsbehaftet. Jede Instanz behält ihren eigenen Zustand, und Instanzen teilen diesen Zustand nicht miteinander. Wenn die Anzahl der Instanzen im Datenflussprofil größer als eins ist, verteilen Sie Nachrichten aus gemeinsamen Abonnements über die Instanzen, sodass jede Instanz nur eine Teilmenge der Nachrichten sieht. Eine Fenstertransformation berechnet dann Aggregationen wie Durchschnitte, Summen und Zählungen über einen partiellen Datensatz, und eine Throttle-Transformation setzt die konfigurierte Ratenbegrenzung unabhängig in jeder Instanz durch, anstatt über die gesamte Pipeline hinweg.
Setze die Anzahl der Datenflussprofil-Instanzen für jeden Datenflussgraphen, der eine Fenster- oder Drosselungs-Transformation verwendet, auf 1. Zustandslose Datenflussgraphen, die ausschließlich Mapping-, Filter-, Verzweigungs- und Concatenate-Transformationen verwenden, können sicher höhere Instanzzahlen nutzen, um den Durchsatz zu erhöhen.
Wie die Gashebeltransformation funktioniert
Die Drosselungstransformation bewertet das Thema jeder eingehenden Nachricht anhand einer geordneten Liste von Regeln pro Thema:
- Der Gewinner ist derjenige, der das erste Spiel gewinnt. Die Transformation bewertet die Regeln in der Reihenfolge. Die erste Regel, deren
topicMuster mit dem Thema der Nachricht übereinstimmt, bestimmt, ob die Transformation die Nachricht weiterleitet. Die Transformation prüft spätere Regeln nicht, selbst wenn sie ebenfalls übereinstimmen würden. - Nicht übereinstimmende Themen werden durchgelassen. Wenn keine Regel mit dem Thema der Nachricht übereinstimmt, leitet die Transformation die Nachricht ohne Throttling weiter.
- Die Weiterleitung erfolgt zeitbasiert, nicht zählbasiert. Bei einer abgestimmten Regel leitet die Transformation die erste von ihr verarbeitete Nachricht weiter und lässt dann jede nachfolgende Nachricht in diesem Muster fallen, bis das konfigurierte Intervall (
1000 / maxMessagesPerSecondMillisekunden, aufgerundet) seit der letzten weitergeleiteten Nachricht verstrichen ist. Dieses Verhalten begrenzt die maximale Rate, erlaubt aber keine Bursts, um frühere Drops auszugleichen. - Gemeinsamer Zustand pro Muster, nicht pro Topic. Wenn das
topic-Muster einer Regel einen Platzhalter verwendet, teilen alle konkreten Themen, die ihr entsprechen, innerhalb einer Transformationsinstanz denselben Drosselungszustand. Zum Beispiel begrenzt eine einzelnesensors/+Regel die kombinierte Rate übersensors/temperatureundsensors/humidity, nicht jede einzelne unabhängig voneinander. -
0lässt alles fallen. Das Festlegen vonmaxMessagesPerSecondauf0für eine Regel verwirft jede Nachricht, die dem Muster dieser Regel entspricht. - Das Timing basiert auf der Bearbeitungszeit, nicht auf dem Inhalt der Nachrichten. Die Transformation verwendet ihre monotone Uhr, wenn sie jede Nachricht verarbeitet. Es liest kein Zeitstempelfeld aus dem Message-Payload.
Note
Die Drosselungsrtansformation legt lediglich fest, ob eine Nachricht weitergeleitet oder verworfen wird. Sie verändert den Inhalt der Nachrichten nie.
Konfiguriere die Drosselregeln pro Thema
Definiere Drosselregeln im Konfigurationsschlüssel throttle (nicht rules) als JSON-Objekt mit einem perTopicThrottles Array.
- Betriebserfahrung
- Azure CLI
- Bicep
- Kubernetes (nur Debuggen)
In der Drosselungstransformationskonfiguration fügen Sie eine oder mehrere Drosselungsregeln hinzu. Geben Sie für jede Regel Folgendes an:
| Setting | Description |
|---|---|
| Topic | Das abzugleichende MQTT-Topic-Muster. Unterstützt die Platzhalter + (eine Ebene) und # (mehrere Ebenen). |
| Maximal Nachrichten pro Sekunde | Die maximale Weiterleitungsrate für Themen, die diesem Muster entsprechen. Auf 0 setzen, um alle passenden Nachrichten zu verwerfen. |
Mit dieser Regel leitet die Transformation die erste sensors/temperature von ihr verarbeitete Nachricht weiter und entfernt dann alle weiteren Nachrichten zu diesem Thema, die sie weniger als 100 Millisekunden später verarbeitet (1000 / 10). Diese Regel betrifft keine anderen Themen als sensors/temperature.
Jeder Eintrag in perTopicThrottles besitzt folgende Eigenschaften:
| Eigentum | Erforderlich | Description |
|---|---|---|
topic |
Yes | Das MQTT-Themenmuster passt dazu. Unterstützt die Platzhalter + (eine Ebene) und # (mehrere Ebenen). |
maxMessagesPerSecond |
Yes | Maximale Weiterleitungsrate für Themen, die diesem Muster entsprechen, in Nachrichten pro Sekunde. Die Transformation erlaubt Bruchwerte. Zum Beispiel 0.1 erlaubt eine Nachricht alle 10 Sekunden. Muss null oder eine positive, endliche Zahl sein. Setzen Sie dies auf 0, um alle Nachrichten zu verwerfen, die dem Muster entsprechen. Timing hat eine Genauigkeit von 1 Millisekunde, sodass Werte größer als 1000 denselben effektiven Grenzwert wie 1000haben. |
Important
Jedes topic-Muster in perTopicThrottles muss eindeutig sein. Die Transformation lehnt das Konfigurieren derselben Musterzeichenfolge während der Initialisierung mehrmals ab.
Verwenden Sie mehrere Regeln pro Thema
Da die Transformation die Regeln der Reihe nach bewertet und der erste Treffer gilt, listen Sie spezifischere Muster auf, bevor Sie allgemeinere auflisten, wenn Sie möchten, dass sie ein eigenes Rate-Limit haben:
- Betriebserfahrung
- Azure CLI
- Bicep
- Kubernetes (nur Debuggen)
Fügen Sie zwei Regeln hinzu, in folgender Reihenfolge:
| Bestellung | Thema | Maximal Nachrichten pro Sekunde |
|---|---|---|
| 1 | sensors/temperature |
10 |
| 2 | sensors/# |
1 |
Nachrichten auf sensors/temperature entsprechen der ersten Regel und sind auf 10 Nachrichten pro Sekunde begrenzt. Nachrichten zu einem anderen sensors/* Thema (zum Beispiel sensors/humidity) entsprechen der zweiten Regel und teilen sich ein kombiniertes Limit von 1 Nachricht pro Sekunde.
Important
Die Reihenfolge ist wichtig. Wenn die sensors/#-Regel zuerst aufgeführt würde, würde sie auch auf sensors/temperature-Nachrichten passen, und die Transformation würde nie die spezifischere Regel erreichen.
Themengruppen mittels Platzhalter drosseln
Das Muster topic unterstützt dieselben Wildcards wie MQTT-Themenfilter:
| Platzhalter | Übereinstimmungen | Beispiel |
|---|---|---|
+ |
Genau eine Themenebene |
sensors/+/status entspricht sensors/line1/status, aber nicht sensors/line1/sub/status |
# |
Null oder mehr verbleibende Themenstufen, muss das letzte Segment sein |
sensors/# entspricht sensors, sensors/temperatureund sensors/line1/temperature |
Alle konkreten Themen, die derselben Platzhalterregel entsprechen, teilen sich einen Drosselungszustand.
- Betriebserfahrung
- Azure CLI
- Bicep
- Kubernetes (nur Debuggen)
Füge eine Regel mit Thema sensors/+ hinzu und maximiere Nachrichten pro Sekunde 1.
Mit dieser Regel werden eine Nachricht auf sensors/temperature und eine Nachricht auf sensors/humidity, die im Abstand von 500 Millisekunden verarbeitet werden, nicht beide weitergeleitet – die zweite wird verworfen, weil sie auf dasselbe gemeinsame 1‑Sekunden‑Intervall wie die erste angerechnet wird, unabhängig davon, zu welchem konkreten Topic sie gehört.
Note
Ein nacktes # Muster passt zu jedem Thema und wendet innerhalb jeder Transformationsinstanz eine einheitliche kombinierte Ratenbegrenzung an.
Alle Nachrichten zu einem Thema verwerfen
Setze maxMessagesPerSecond auf 0 so, dass jede Nachricht, die einem Muster entspricht, droppt, ohne die Regel oder das Thema aus deiner Pipeline zu entfernen:
- Betriebserfahrung
- Azure CLI
- Bicep
- Kubernetes (nur Debuggen)
Füge eine Regel mit Thema debug/# hinzu und maximiere Nachrichten pro Sekunde 0.
Ein Datenflussdiagramm mit Drosselung bereitstellen
Um End-to-End-Throttling anzuwenden, sollte ein Datenflussgraph bereitgestellt werden, der eine Quelle, eine Throttle-Transformation und ein Ziel verbindet. Verwenden Sie das Tool, das zu Ihrem Arbeitsablauf passt.
- Betriebserfahrung
- Azure CLI
- Bicep
- Kubernetes (nur Debuggen)
Erstellen Sie in der Betriebsumgebung ein Datenflussdiagramm mit einer Drosselungstransformation:
- Fügen Sie eine Quelle hinzu, die aus Ihrem MQTT-Topic gelesen wird.
- Fügen Sie eine Gaspedal-Transformation hinzu. Füge pro Thema eine oder mehrere Regeln hinzu, von den am wenigsten bis am wenigsten spezifischen.
- Fügen Sie ein Ziel hinzu, das an Ihr Ausgabe-Topic sendet.
Beispiel: Höchstens zwei Nachrichten pro Sekunde weiterleiten
Dieses Beispiel reduziert einen Strom von 10 Nachrichten pro Sekunde auf höchstens 2. Weitergeleitete Nachrichten behalten ihren ursprünglichen Inhalt; überschüssige Nachrichten werden weggelassen. Nutze es, wenn du Zwischenwerte verwerfen kannst.
Erfüllen Sie die gemeinsamen Beispielvoraussetzungen, einschließlich des default Profils und factory-mqtt des MQTT-Endpunkts im Namensraum azure-iot-operations . Behalten Sie das Profil auf einer Instanz für die angegebene Rate; jede Instanz behält ihren eigenen Throttle-Zustand.
- Betriebserfahrung
- Azure CLI
- Bicep
- Kubernetes (nur Debuggen)
Erstellen Sie in der Betriebsumgebung ein Datenflussdiagramm namens rate-limit-telemetry im Profil default:
- Füge eine Quelle namens
factory-mqttmit Endpunktfactory/readingsund Themasourcehinzu. - Fügen Sie die integrierte Drosselungs-Transformation namens
throttlehinzu. Füge eine Pro-Topic-Regel mit Themafactory/readingsund Maximale Nachrichten pro Sekunde auf2gesetzt hinzu. - Fügen Sie ein Ziel namens
destinationhinzu, mit dem Endpunktfactory-mqttund dem Themafactory/rate-limited. - Verbinden Sie
sourcemitthrottle, dannthrottlemitdestination. Speichere und aktiviere das Diagramm.
Die Drosselung leitet Nachrichten unverändert mit mindestens 500 Millisekunden Abstand weiter und verwirft überschüssige Nachrichten. Es puffert keine Nachrichten und wählt nicht den neuesten Wert aus.
Überprüfen der Ausgabe
Für eine frische Transformationsinstanz diese zehn Nachrichten auf factory/readings im Abstand von 100 Millisekunden verarbeiten. Die Zeiten sind relativ zur Verarbeitung der ersten Nachricht. Die Transformation verwendet seine monotone Verarbeitungsuhr; Publisher-Zeitstempel und Zustellzeiten sind getrennt.
Eingabe in factory/readings |
Bearbeitungsdauer | Ausgabe auf factory/rate-limited |
|---|---|---|
{"messageId":"reading-001","temperature":20} |
0 ms | Gleiche Nutzlast |
{"messageId":"reading-002","temperature":21} |
100 ms | Dropped |
{"messageId":"reading-003","temperature":22} |
200 ms | Dropped |
{"messageId":"reading-004","temperature":23} |
300 ms | Dropped |
{"messageId":"reading-005","temperature":24} |
400 ms | Dropped |
{"messageId":"reading-006","temperature":25} |
500 ms | Identische Payload |
{"messageId":"reading-007","temperature":26} |
600 ms | Dropped |
{"messageId":"reading-008","temperature":27} |
700 ms | Dropped |
{"messageId":"reading-009","temperature":28} |
800 ms | Dropped |
{"messageId":"reading-010","temperature":29} |
900 ms | Dropped |
Die erwarteten zwei Ausgabemeldungen sind:
{"messageId":"reading-001","temperature":20}
{"messageId":"reading-006","temperature":25}
Die Drosselung verwirft überschüssige Messwerte sofort. Pufferung, Warteschlangenbildung, Auswahl des neuesten Werts und Glättung erfordern eine separate Verarbeitung. Verwenden Sie robustes Puffern und anwendungsgesteuerte Backpressure für Alarme, Befehle oder Audit-Ereignisse, bei denen jedes Ereignis gespeichert werden muss.
Für Zustands- und Skalierungsbeschränkungen siehe Einschränkungen.
Einschränkungen
- Verändert keine Nachrichten. Die Throttle-Transformation leitet Nachrichten nur weiter oder verwirft sie; sie ändert deren Inhalt nicht.
- Der Gewinner ist derjenige, der das erste Spiel gewinnt. Die Transformation gilt nur für die erste Regel, deren
topicMuster mit dem Thema der Nachricht übereinstimmt. Führen Sie spezifischere Muster vor allgemeineren auf. - Geteilter Zustand gemäß Muster. Eine Wildcard-Regel teilt ihr Ratenlimit für jedes konkrete Thema, mit dem sie übereinstimmt. Es gibt kein separates Limit pro Thema.
- Keine Spitzen. Die Transformation setzt eine Mindestzeit zwischen den weitergeleiteten Nachrichten pro abgestimmtem Muster vor. Es sammelt keine ungenutzte Kapazität aus früheren, langsameren Phasen an.
- Millisekundenpräzision. Das minimale Drosselintervall beträgt 1 Millisekunde, daher erhöhen höhere Werte als
1000fürmaxMessagesPerSeconddie effektive Weiterleitungsrate nicht über 1.000 Nachrichten pro Sekunde. - Das Timing basiert auf der Bearbeitungszeit, nicht auf dem Inhalt der Nachrichten. Die Transformation verwendet die Zeit, in der jede Nachricht verarbeitet wird, nicht die Zeit, zu der der Broker sie empfangen hat, oder ein Zeitstempelfeld in der Nutzlast.
- Der Zustand ist lokal und im Speicher. Jede Datenflussprofil-Instanz behält ihren eigenen Drosselungszustand. Ein Neustart oder Neukonfiguration der Transformation setzt diesen Zustand zurück. Wenn ein Profil mehrere Instanzen hat, setzt jede Instanz die konfigurierte Rate unabhängig durch.
- Doppelte Themenmuster sind nicht erlaubt. Die Konfiguration desselben
topicStrings mehrmals inperTopicThrottlesschlägt fehl, wenn die Transformation initialisiert wird.