Daten in Datenflussdiagrammen drosseln

Eine Throttle-Transformationsrate 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 Bursty- oder Hochfrequenzquellen 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 auf mcr.microsoft.comverweist. Die integrierten Transformationen verwenden diesen Endpunkt.

Skalierungsbeschränkung für zustandsbehaftete Diagramme

Important

Fenster- und Gashebel-Transformationen sind zustandsvoll. 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 geteilte Abonnements Nachrichten ü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 Throttle-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 topic Muster 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 / maxMessagesPerSecond Millisekunden, 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 einzelne sensors/+ Regel die kombinierte Rate über sensors/temperature und sensors/humidity, nicht jede einzelne unabhängig voneinander.
  • 0 lässt alles fallen. Das Festlegen von maxMessagesPerSecond auf 0 fü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.

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 das erste Match gewinnt, listen Sie spezifischere Muster auf, bevor sie allgemeinere auflisten, wenn Sie möchten, dass sie ein eigenes Rate-Limit haben:

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 Nachrichten übereinstimmen sensors/temperature , 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.

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:

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.

Erstellen Sie in der Betriebsumgebung ein Datenflussdiagramm mit einer Drosselungstransformation:

  1. Fügen Sie eine Quelle hinzu, die aus Ihrem MQTT-Topic gelesen wird.
  2. Fügen Sie eine Gaspedal-Transformation hinzu. Füge pro Thema eine oder mehrere Regeln hinzu, von den am wenigsten bis am wenigsten spezifischen.
  3. Fügen Sie ein Ziel hinzu, das an Ihr Ausgabe-Topic sendet.

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 topic Muster 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, das sie trifft. 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 1000 für maxMessagesPerSecond die 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 topic Strings mehrmals in perTopicThrottles schlägt fehl, wenn die Transformation initialisiert wird.