Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- Instancia de Operaciones de IoT de Azure implementada en un clúster de Kubernetes. Para obtener más información, consulte Deploy Operaciones de IoT de Azure.
- El despliegue crea automáticamente un extremo de registro por defecto llamado
defaultque apunta amcr.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
topicpatró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 / maxMessagesPerSecondmilisegundos, 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
topicuna 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 solasensors/+regla limita la tasa combinada entresensors/temperatureysensors/humidity, no cada uno de forma independiente. -
0lo deja todo. Al configurarmaxMessagesPerSecond0para 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:
- Agregue un origen que lea desde su tópico MQTT.
- Añade un cambio de acelerador . Añade una o más reglas por tema, ordenadas de más a menos específicas.
- 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
topicpatró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
1000paramaxMessagesPerSecondno 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
topicmás de una vez enperTopicThrottlesproduce un error al inicializarse la transformación.