Limitar los datos en grafos de flujo de datos

Una transformada de aceleración limita la frecuencia con la que reenvía mensajes sobre un tema MQTT. En lugar de eliminar mensajes basados en su contenido, la transformada de aceleración elimina mensajes según cuándo los procesa, reenviando como máximo un mensaje por patrón de tema dentro de cada intervalo configurado. Utiliza la limitación para proteger los sistemas aguas abajo de fuentes de ráfagas o de alta frecuencia sin cambiar el contenido del mensaje.

Para obtener información general sobre los gráficos de flujo de datos y cómo las transformaciones se componen en una canalización, consulte Introducción a los gráficos de flujo de datos.

Prerequisites

  • El despliegue crea automáticamente un extremo de registro por defecto llamado default que apunta a mcr.microsoft.com. Las transformaciones integradas usan este endpoint.

Limitación de escalado de grafos con estado

Importante

Las transformadas de ventana y acelerador son con estado. Cada instancia mantiene su propio estado y las instancias no comparten ese estado entre sí. Cuando el conteo de instancias del perfil de flujo de datos es mayor que uno, las suscripciones compartidas distribuyen los mensajes entre instancias, de modo que cada instancia solo ve un subconjunto de los mensajes. Una transformada de ventana calcula entonces agregaciones como promedios, sumas y conteos sobre un conjunto de datos parcial, y una transformada de aceleración impone el límite de tasa configurado de forma independiente en cada instancia en lugar de a lo largo de toda la pipeline.

Establece el recuento de instancias del perfil de flujo de datos a 1 para cualquier grafo de flujo de datos que utilice una transformación de ventana o de aceleración. Los grafos de flujo de datos sin estado que usan únicamente transformadas de mapeo, filtro, bifurcación y concatenación pueden emplear con seguridad mayores conteos de instancias para aumentar el rendimiento.

Cómo funciona la transformación de acelerador

La transformada de aceleración evalúa el tema de cada mensaje entrante según una lista ordenada de reglas por tema:

  • Prevalece la primera coincidencia. La transformación evalúa las reglas en orden. La primera regla cuyo topic patrón coincide con el tema del mensaje determina si la transformación reenvía el mensaje. La transformación no revisa las reglas posteriores, aunque también coincidieran.
  • Temas inigualables pasan por aquí. Si ninguna regla coincide con el tema del mensaje, la transformación reenvía el mensaje sin ningún limitamiento.
  • El reenvío se basa en el tiempo, no en la cantidad. Para una regla emparejada, la transformación reenvía el primer mensaje que procesa y luego elimina todos los mensajes posteriores de ese patrón hasta que transcurra el intervalo configurado (1000 / maxMessagesPerSecond milisegundos, redondeado al alza) desde el último mensaje reenviado. Este comportamiento limita la tasa máxima pero no permite que los estallidos compensen caídas anteriores.
  • Estado compartido por patrón, no por tema. Cuando el patrón de topic una regla utiliza un comodín, todos los temas concretos que coinciden con él comparten el mismo estado de aceleración dentro de una instancia de transformación. Por ejemplo, una sola sensors/+ regla limita la tasa combinada entre sensors/temperature y sensors/humidity, no cada uno de forma independiente.
  • 0 lo deja todo. Al configurar maxMessagesPerSecond0 para una regla se elimina cada mensaje que coincide con el patrón de esa regla.
  • El tiempo se basa en el tiempo de procesamiento, no en el contenido del mensaje. La transform utiliza su reloj monotónico cuando procesa cada mensaje. No lee un campo de marca temporal de la carga útil del mensaje.

Note

La transformación de acelerador solo decide si reenviar o dejar un mensaje sin importancia. Nunca modifica el contenido del mensaje.

Configurar reglas de aceleración por tema

Defina las reglas de limitación en la clave de configuración throttle (no rules) como un objeto JSON con una matriz perTopicThrottles.

En la configuración de transformación de acelerador, añade una o más reglas de aceleración. Para cada regla, especifique:

Setting Descripción
Topic El patrón de tema MQTT que debe coincidir. Soporta los comodines + (de un solo nivel) y # (de varios niveles).
Máximo de mensajes por segundo La tasa máxima de reenvío para temas que coinciden con este patrón. Configura para 0 eliminar todos los mensajes coincidentes.

Con esta regla, la transformación reenvía el primer sensors/temperature mensaje que procesa y luego elimina cualquier mensaje adicional sobre ese tema que procese menos de 100 milisegundos después (1000 / 10). Esta regla no afecta a otros temas que no sensors/temperaturesean .

Cada entrada en perTopicThrottles tiene estas propiedades:

Propiedad Obligatorio Descripción
topic Yes Patrón de tema MQTT que debe coincidir. Admite los comodines + (de un solo nivel) y # (de varios niveles, solo al final).
maxMessagesPerSecond Yes Tasa máxima de reenvío para temas que coinciden con este patrón, en mensajes por segundo. La transformada permite valores fraccionarios. Por ejemplo, 0.1 permite un mensaje cada 10 segundos. Debe ser cero o un número positivo y finito. Configura para 0 eliminar todos los mensajes que coincidan con el patrón. El tiempo tiene una precisión de 1 milisegundo, por lo que valores mayores a 1000 tienen el mismo límite efectivo que 1000.

Importante

Cada patrón de topic en perTopicThrottles debe ser único. La transformación rechaza configurar la misma cadena de patrón más de una vez durante la inicialización.

Utiliza varias reglas por tema

Como la transformación evalúa las reglas en orden y gana la primera partida, lista patrones más específicos antes que los más generales si quieres que tengan su propio límite de tasa:

Añade dos reglas, en este orden:

Order Topic Máximo de mensajes por segundo
1 sensors/temperature 10
2 sensors/# 1

Los mensajes en sensors/temperature coinciden con la primera regla y están limitados a 10 mensajes por segundo. Los mensajes sobre cualquier otro sensors/* tema (por ejemplo, sensors/humidity) coinciden con la segunda regla y comparten un límite combinado de 1 mensaje por segundo.

Importante

El orden importa. Si la sensors/# regla se listara primero, también coincidiría sensors/temperature con los mensajes, y la transformación nunca alcanzaría la regla más específica.

Utiliza comodines para limitar los grupos de temas

El patrón topic admite los mismos comodines que los filtros de temas de MQTT:

Carácter comodín Coincidencias Example
+ Exactamente un nivel temático sensors/+/status coincide con sensors/line1/status pero no con sensors/line1/sub/status
# Cero o más niveles temáticos restantes, y debe ser el último segmento sensors/# coincide con sensors, sensors/temperaturey sensors/line1/temperature

Todos los temas concretos que cumplen con la misma regla de comodín comparten un mismo estado de aceleración.

Añade una regla con el tema sensors/+ y el máximo de mensajes por segundo 1.

Con esta regla, un mensaje en sensors/temperature y otro en sensors/humidity procesados con 500 milisegundos de diferencia no se reenvían ambos: el segundo se descarta, porque se contabiliza dentro del mismo intervalo compartido de 1 segundo que el primero, independientemente del tema concreto en el que esté.

Note

Un patrón simple # coincide con todos los tópicos y aplica un único límite de velocidad combinado dentro de cada instancia de transform.

Eliminar todos los mensajes para un tema

Configura maxMessagesPerSecond para 0 eliminar todos los mensajes que coincidan con un patrón, sin eliminar la regla ni el tema de tu pipeline:

Añade una regla con el tema debug/# y el máximo de mensajes por segundo 0.

Despliega un gráfico de flujo de datos con aceleración

Para aplicar la limitación de extremo a extremo, despliega un gráfico de flujo de datos que conecte una fuente, una transformada de aceleración y un destino. Usa la herramienta que se adapte a tu flujo de trabajo.

En la experiencia de Operaciones, crea un gráfico de flujo de datos con una transformada de aceleración:

  1. Agregue un origen que lea desde su tópico MQTT.
  2. Añade un cambio de acelerador . Añade una o más reglas por tema, ordenadas de más a menos específicas.
  3. Agregue un destino que envíe al tema de salida.

Limitaciones

  • No modifica los mensajes. La transformada de aceleración solo reenvía o elimina mensajes; No cambia el contenido del mensaje.
  • Prevalece la primera coincidencia. La transformación solo aplica la primera regla cuyo topic patrón coincide con el tema del mensaje. Enumera patrones más específicos antes que los más generales.
  • Estado compartido por patrón. Una regla comodín comparte su límite de tasa en todos los temas concretos que aborda. No hay un límite separado por tema.
  • No hay permiso para explosiones. La transformación impone un tiempo mínimo entre mensajes reenviados por patrón coincidente. No acumula capacidad no utilizada de periodos anteriores y lentos.
  • Precisión milisegundos. El intervalo mínimo de aceleración es de 1 milisegundo, por lo que valores superiores a 1000 para maxMessagesPerSecond no aumentan la tasa efectiva de reenvío más allá de 1.000 mensajes por segundo.
  • El tiempo se basa en el tiempo de procesamiento, no en el contenido del mensaje. La transformación utiliza el tiempo que procesa cada mensaje, no la hora en que el broker lo recibió ni un campo de marca de tiempo en la carga útil.
  • El estado es local y está en la memoria. Cada instancia del perfil de flujo de datos mantiene su propio estado de aceleración. Reiniciar o reconfigurar la transformación reinicia ese estado. Si un perfil tiene múltiples instancias, cada instancia aplica la tasa configurada de forma independiente.
  • No se permiten patrones de temas duplicados. Configurar la misma cadena topic más de una vez en perTopicThrottles produce un error al inicializarse la transformación.