Begränsa data i dataflödesgrafer

En throttle-transformhastighet begränsar hur ofta den vidarebefordrar meddelanden om ett MQTT-ämne. Istället för att släppa meddelanden baserat på deras innehåll, släpper throttle-transformen meddelanden baserat på när den bearbetar dem, och vidarebefordrar högst ett meddelande per ämnesmönster inom varje konfigurerat intervall. Använd strypning för att skydda nedströms system från burstiga eller högfrekventa källor utan att ändra meddelandeinnehållet.

En översikt över dataflödesdiagram och hur transformeringar består i en pipeline finns i Översikt över dataflödesdiagram.

Prerequisites

  • Distributionen skapar automatiskt en standardregister-endpoint med namnet default som pekar på mcr.microsoft.com. De inbyggda transformeringarna använder den här slutpunkten.

Skalningsbegränsning för tillståndskänsliga grafer

Important

Fönster- och gasreglage transformerar är statele. Varje instans behåller sitt eget tillstånd och instanserna delar inte det tillståndet med varandra. När antalet dataflödesprofiler är fler än ett distribuerar delade prenumerationer meddelanden mellan instanserna, så varje instans ser endast en delmängd av meddelandena. En fönstertransform beräknar sedan aggregationer som medelvärden, summor och räkningar över en partiell dataset, och en throttle-transform upprätthåller den konfigurerade hastighetsgränsen oberoende i varje instans istället för över hela pipelinen.

Sätt antalet data flow-profiler till 1 för alla dataflödesgrafer som använder en fönster- eller throttle-transform. Tillståndslösa dataflödesgrafer som endast använder mapp-, filter-, gren- och koncatenationstransformer kan säkert använda högre instansantal för att öka genomströmningen.

Hur strypningstransformeringen fungerar

throttle-transform utvärderar varje inkommande meddelandes ämne mot en ordnad lista med ämnesspecifika regler:

  • Första matchen vinner. Transformen utvärderar regler i ordning. Den första regeln vars topic mönster matchar meddelandets ämne avgör om transformen vidarebefordrar meddelandet. Transformeringen kontrollerar inte efterföljande regler, även om de också skulle matcha.
  • Omatchade ämnen passerar förbi. Om ingen regel matchar meddelandets ämne, vidarebefordrar transformen meddelandet utan någon strypning.
  • Vidarebefordran är tidsbaserad, inte räknebaserad. För en matchad regel vidarebefordrar transformen det första meddelandet den bearbetar, och släpper sedan varje efterföljande meddelande på det mönstret tills det konfigurerade intervallet (1000 / maxMessagesPerSecond millisekunder, avrundat uppåt) har gått sedan det senaste vidarebefordrade meddelandet. Detta beteende begränsar maxhastigheten men tillåter inte burstar att kompensera för tidigare dropp.
  • Delat tillstånd per mönster, inte per ämne. När ett regelmönster topic använder ett jokerkort delar alla konkreta ämnen som matchar det samma throttle-tillstånd inom en transforminstans. Till exempel begränsar en enda sensors/+ regel den kombinerade hastigheten över sensors/temperature och sensors/humidity, inte varje regel oberoende av varandra.
  • 0 tappar allt. Att ställa in maxMessagesPerSecond till 0 för en regel gör att alla meddelanden som matchar regelns matchningsmönster ignoreras.
  • Tidpunkten baseras på bearbetningstid, inte meddelandeinnehåll. Transformen använder sin monotona klocka när den bearbetar varje meddelande. Den läser inte ett tidsstämpelfält från meddelandens nyttolast.

Note

Gasregulatorn avgör bara om ett meddelande ska vidarebefordras eller släppas. Den ändrar aldrig meddelandeinnehållet.

Konfigurera begränsningsregler per ämne

Definiera spakregler i konfigurationsnyckeln throttle (inte rules) som ett JSON-objekt med en perTopicThrottles array.

I konfigurationen för begränsningstransformering lägger du till en eller flera begränsningsregler. För varje regel anger du:

Inställning Description
Topic MQTT-ämnesmönster för att matcha. Stöder + (enkelnivå) och # (flernivå) jokerkort.
Maxmeddelanden per sekund Den maximala vidarebefordringshastigheten för ämnen som matchar detta mönster. Ange 0 för att kassera alla matchande meddelanden.

Med denna regel vidarebefordrar transformen det första sensors/temperature meddelandet den bearbetar, och släpper sedan eventuella ytterligare meddelanden om ämnet som den bearbetar mindre än 100 millisekunder senare (1000 / 10). Denna regel påverkar inte andra ämnen än sensors/temperature.

Varje post i perTopicThrottles har dessa egenskaper:

Property Required Description
topic Yes MQTT-topicmönster att matcha mot. Stöder jokertecknen + (enkelnivå) och # (flernivå, endast i slutet).
maxMessagesPerSecond Yes Maximal vidarebefordran för ämnen som matchar detta mönster, i meddelanden per sekund. Transformen tillåter bråkdelsvärden. Till exempel 0.1 tillåter ett meddelande var tionde sekund. Måste vara noll eller ett positivt, ändligt tal. Ange 0 för att kassera alla meddelanden som matchar mönstret. Timing har 1 millisekunds precision, så värden större än 1000 har samma effektiva gräns som 1000.

Important

Varje mönster topic i perTopicThrottles måste vara unikt. Transformen avvisar att samma mönstersträng konfigureras mer än en gång under initialiseringen.

Använd flera regler per ämne

Eftersom transformen utvärderar regler i ordning och den första matchen vinner, lista mer specifika mönster innan mer generella om du vill att de ska ha sin egen hastighetsgräns:

Lägg till två regler, i denna ordning:

Order Topic Maxmeddelanden per sekund
1 sensors/temperature 10
2 sensors/# 1

Meddelanden på sensors/temperature motsvarar den första regeln och är begränsade till 10 meddelanden per sekund. Meddelanden om något annat sensors/* ämne (till exempel sensors/humidity) matchar den andra regeln och delar en sammanlagd gräns på 1 meddelande per sekund.

Important

Ordningen är viktig. Om regeln sensors/# listades först skulle den också matcha sensors/temperature meddelanden, och transformen skulle aldrig nå den mer specifika regeln.

Använd jokertecken för att begränsa grupper av ämnen

Mönstret topic stöder samma jokerkort som MQTT-ämnesfilter:

Jokertecken Matchningar Example
+ Precis en ämnesnivå sensors/+/status matchar sensors/line1/status men inte sensors/line1/sub/status
# Noll eller fler kvarvarande ämnesnivåer, och måste vara det sista segmentet sensors/# matchar sensors, sensors/temperature och sensors/line1/temperature

Alla specifika ämnen som matchar samma wildcard-regel delar samma begränsningstillstånd.

Lägg till en regel med ämne sensors/+ och max meddelanden per sekund 1.

Med denna regel vidarebefordras inte ett meddelande på sensors/temperature och ett meddelande på sensors/humidity som bearbetas med 500 millisekunders mellanrum – det andra tas bort eftersom det räknas mot samma gemensamma 1-sekundersintervall som det första, oavsett vilket konkret ämne det handlar om.

Note

Ett rent # mönster matchar varje ämne och applicerar en enda, kombinerad hastighetsgräns inom varje transforminstans.

Ta bort alla meddelanden för ett ämne

Ställ maxMessagesPerSecond in på 0 att släppa varje meddelande som matchar ett mönster, utan att ta bort regeln eller ämnet från din pipeline:

Lägg till en regel med ämne debug/# och max meddelanden per sekund 0.

Distribuera en dataflödesgraf med throttle

För att tillämpa strypning från början till slut, distribuera en dataflödesgraf som kopplar ihop en källa, en throttle-transform och en destination. Använd verktyget som matchar ditt arbetsflöde.

I Operations-miljön skapar du en dataflödesgraf med en strypningstransformering:

  1. Lägg till en källa som läser från ditt MQTT-ämne.
  2. Lägg till en strypningsomvandling. Lägg till en eller flera regler per ämne, ordnade från mest till minst specifika.
  3. Lägg till ett mål som skickar till ditt utdataämne.

Limitations

  • Ändrar inte meddelanden. Gasreglaget vidarebefordrar eller släpper bara meddelanden; Det förändrar inte meddelandets innehåll.
  • Första matchen vinner. Transformen tillämpar endast den första regeln vars topic mönster matchar meddelandets ämne. Lista mer specifika mönster innan mer generella.
  • Delat tillstånd enligt mönster. En wildcard-regel delar sin hastighetsgräns över varje konkret ämne den matchar. Det finns ingen separat gräns per ämne.
  • Ingen burst-ersättning. Transformen upprätthåller en minsta tid mellan vidarebefordrade meddelanden per matchat mönster. Den ackumulerar inte oanvänd kapacitet från tidigare, långsammare perioder.
  • Millisekundprecision. Minsta gasintervall är 1 millisekund, så värden som är högre än 1000 för maxMessagesPerSecond ökar inte den effektiva vidarebefordrande hastigheten över 1 000 meddelanden per sekund.
  • Tidpunkten baseras på bearbetningstid, inte meddelandeinnehåll. Transformen använder tiden den bearbetar varje meddelande, inte tiden som mäklaren tog emot det eller ett tidsstämpelfält i nyttolasten.
  • Delstaten är lokal och i minnet. Varje dataflödesprofilinstans behåller sitt eget throttle-tillstånd. Att starta om eller konfigurera om transformen återställer det tillståndet. Om en profil har flera instanser upprätthåller varje instans den konfigurerade hastigheten oberoende.
  • Dubbletter av ämnesmönster är inte tillåtna. Att konfigurera samma topic sträng mer än en gång i perTopicThrottles misslyckas när transformen initieras.