Comprendre et ajuster les unités de streamingUnderstand and adjust Streaming Units

Les unités de streaming représentent les ressources de calcul allouées pour exécuter un travail Stream Analytics.Streaming Units (SUs) represents the computing resources that are allocated to execute a Stream Analytics job. Plus le nombre d’unités de streaming est élevé, plus il y a de ressources d’UC et de mémoire allouées pour votre travail.The higher the number of SUs, the more CPU and memory resources are allocated for your job. Cette capacité vous permet de vous concentrer sur la logique de requête et résume la nécessité de gérer le matériel pour exécuter votre travail Stream Analytics en temps voulu.This capacity lets you focus on the query logic and abstracts the need to manage the hardware to run your Stream Analytics job in a timely manner.

Pour obtenir un traitement de streaming à faible latence, les travaux Azure Stream Analytics effectuent tout le traitement en mémoire.To achieve low latency stream processing, Azure Stream Analytics jobs perform all processing in memory. Quand la mémoire devient insuffisante, le travail de streaming échoue.When running out of memory, the streaming job fails. Par conséquent, pour un travail de production, il est important de surveiller l’utilisation des ressources d’un travail de streaming et de vérifier qu’il existe suffisamment de ressources allouées afin d’assurer l’exécution des travaux 24 heures sur 24 et 7 jours sur 7.As a result, for a production job, it’s important to monitor a streaming job’s resource usage, and make sure there is enough resource allocated to keep the jobs running 24/7.

La métrique de pourcentage d’utilisation des unités de streaming, comprise entre 0 % et 100 %, décrit la consommation de mémoire de votre charge de travail.The SU % utilization metric, which ranges from 0% to 100%, describes the memory consumption of your workload. Pour un travail de streaming avec un encombrement minimal, la métrique se situe généralement entre 10 et 20 %.For a streaming job with minimal footprint, this metric is usually between 10% to 20%. Si le pourcentage d’utilisation des unités de streaming est élevé (supérieur à 80 %) ou si les événements d’entrée sont mis en backlog (même avec un faible pourcentage d’utilisation des unités de streaming, car il n’affiche pas l’utilisation du processeur), il est probable que votre charge de travail nécessite davantage de ressources de calcul, ce qui vous oblige à augmenter le nombre d’unités de streaming.If SU% utilization is high (above 80%), or if input events get backlogged (even with a low SU% utilization since it does not show CPU usage), your workload likely requires more compute resources, which requires you to increase the number of SUs. Il est préférable de conserver une métrique inférieure à 80 % pour prendre en compte les pics d’activité occasionnels.It's best to keep the SU metric below 80% to account for occasional spikes. Pour réagir à l’augmentation des charges de travail et augmenter les unités de streaming, définissez une alerte de 80 % sur la métrique d’utilisation de l’unité de stockage.To react to increased workloads and increase streaming units, consider setting an alert of 80% on the SU Utilization metric. En outre, vous pouvez utiliser des métriques de délai en filigrane et d’événements retardés pour voir si cela a un impact.Also, you can use watermark delay and backlogged events metrics to see if there is an impact.

Configurer des unités de streaming Stream AnalyticsConfigure Stream Analytics Streaming Units (SUs)

  1. Connectez-vous au portail AzureSign in to Azure portal

  2. Dans la liste des ressources, recherchez le travail Stream Analytics que vous souhaitez mettre à l’échelle, puis ouvrez-le.In the list of resources, find the Stream Analytics job that you want to scale and then open it.

  3. Dans la page du travail, sous le titre Configurer, sélectionnez Mettre à l’échelle.In the job page, under the Configure heading, select Scale.  Le nombre par défaut d’unités SU est 3 lors de la création d’un travail.Default number of SUs is 3 when creating a job.

    Configuration d’un travail Stream Analytics sur le portail Azure

  4. Définissez les unités SU pour le travail à l’aide du curseur.Use the slider to set the SUs for the job. Notez que vous êtes limité à des paramètres d’unité SU spécifiques.Notice that you are limited to specific SU settings.

  5. Vous pouvez modifier le nombre d’unités SU affectées à votre travail, même s’il est en cours d’exécution.You can change the number of SUs assigned to your job even when it is running. Cela n’est pas possible si votre travail utilise une sortie non partitionnée ou dispose d’une requête à plusieurs étapes avec différentes valeurs PARTITION BY.This is not possible if your job uses a non-partitioned output or has a multi-step query with different PARTITION BY values. Vous pouvez éventuellement choisir parmi un ensemble de valeurs SU lorsque le travail est en cours d’exécution.You maybe restricted to choosing from a set of SU values when the job is running.

Surveillance des performances du travailMonitor job performance

À l’aide du portail Azure, vous pouvez suivre le débit d’un travail :Using the Azure portal, you can track the throughput of a job:

Surveillance des travaux Azure Stream Analytics

Calculez le débit prévu pour la charge de travail.Calculate the expected throughput of the workload. Si le débit est plus faible que prévu, paramétrez la partition d’entrée ainsi que la requête, puis ajoutez des unités SU à votre travail.If the throughput is less than expected, tune the input partition, tune the query, and add SUs to your job.

Combien d’unités de streaming sont requises pour un travail ?How many SUs are required for a job?

Le choix du nombre d’unités de streaming requises pour un travail particulier dépend de la configuration de la partition pour les entrées et de la requête définie pour le travail.Choosing the number of required SUs for a particular job depends on the partition configuration for the inputs and the query that's defined within the job. La page Mise à l’échelle vous permet de définir le nombre adapté d’unités de streaming.The Scale page allows you to set the right number of SUs. Il est recommandé d’allouer plus d’unités de streaming que nécessaire.It is a best practice to allocate more SUs than needed. Le moteur de traitement Stream Analytics est configuré pour une latence et un débit supérieurs, en allouant une capacité de mémoire supplémentaire.The Stream Analytics processing engine optimizes for latency and throughput at the cost of allocating additional memory.

En règle générale, la meilleure pratique consiste à démarrer avec 6 unités de streaming pour les requêtes qui n’utilisent pas PARTITION BY.In general, the best practice is to start with 6 SUs for queries that don't use PARTITION BY. Déterminez ensuite la configuration idéale en utilisant une méthode d’essai et d’erreur où vous modifiez le nombre d’unités de streaming, une fois que vous avez transmis le volume représentatif de données et examiné la métrique % d’utilisation de SU.Then determine the sweet spot by using a trial and error method in which you modify the number of SUs after you pass representative amounts of data and examine the SU% Utilization metric. Le nombre maximal d’unités de streaming qui peut être utilisé par un travail Stream Analytics varie selon le nombre d’étapes de la requête définie pour le travail et le nombre de partitions pour chaque étape.The maximum number of streaming units that can be used by a Stream Analytics job depends on the number of steps in the query defined for the job and the number of partitions in each step. Pour obtenir plus d’informations sur les limites à respecter, cliquez ici.You can learn more about the limits here.

Pour plus d’informations sur le choix du nombre adapté d’unités de streaming, consultez cette page : Mettre à l’échelle des travaux Azure Stream Analytics pour augmenter le débitFor more information about choosing the right number of SUs, see this page: Scale Azure Stream Analytics jobs to increase throughput

Notes

Le choix du nombre d’unités SU requises pour un travail particulier dépend de la configuration de la partition pour les entrées et de la requête définie pour le travail.Choosing how many SUs are required for a particular job depends on the partition configuration for the inputs and on the query defined for the job. Vous pouvez sélectionner votre quota en unités SU pour un travail.You can select up to your quota in SUs for a job. Par défaut, chaque abonnement Azure dispose d’un quota pouvant atteindre 500 unités de streaming pour tous les travaux Stream Analytics d’une région spécifique.By default, each Azure subscription has a quota of up to 500 SUs for all the analytics jobs in a specific region. Pour augmenter ce quota d’unités SU pour vos abonnements, contactez le Support Microsoft.To increase SUs for your subscriptions beyond this quota, contact Microsoft Support. Valeurs valides pour les unités SU par travail : 1, 3, 6 et au-dessus par incréments de 6.Valid values for SUs per job are 1, 3, 6, and up in increments of 6.

Facteurs qui augmentent l’utilisation du % SUFactors that increase SU% utilization

Les éléments de requête temporelle (orientée sur le temps) sont l’ensemble des opérateurs fournis par Stream Analytics.Temporal (time-oriented) query elements are the core set of stateful operators provided by Stream Analytics. Stream Analytics gère l’état de ces opérations en interne au nom de l’utilisateur, grâce à la gestion de la consommation de mémoire, les points de contrôle pour la résilience et la récupération de l’état au cours des mises à niveau du service.Stream Analytics manages the state of these operations internally on user’s behalf, by managing memory consumption, checkpointing for resiliency, and state recovery during service upgrades. Même si Stream Analytics gère totalement les états, il existe un nombre de recommandations de meilleure pratique que les utilisateurs doivent prendre en compte.Even though Stream Analytics fully manages the states, there are a number of best practice recommendations that users should consider.

Notez qu’un travail avec une logique de requête complexe peut avoir une utilisation élevée d’unités de streaming, même s’il ne reçoit pas continuellement des événements d’entrée.Note that a job with complex query logic could have high SU% utilization even when it is not continuously receiving input events. Cela peut se produire après un pic soudain des événements d’entrée et de sortie.This can happen after a sudden spike in input and output events. Le travail peut continuer à maintenir l’état en mémoire si la requête est complexe.The job might continue to maintain state in memory if the query is complex.

Le pourcentage d'utilisation des unités de streaming peut soudainement et brièvement passer à 0 avant de revenir aux niveaux prévus.SU% utilization may suddenly drop to 0 for a short period before coming back to expected levels. Ce phénomène est dû à des erreurs transitoires ou à des mises à niveau lancées par le système.This happens due to transient errors or system initiated upgrades. Augmenter le nombre d’unités de streaming d’un travail ne diminue pas forcément le pourcentage d’utilisation des unités de streaming si votre requête n’est pas entièrement parallèle.Increasing number of streaming units for a job might not reduce SU% Utilization if your query is not fully parallel.

Lorsque vous comparez l’utilisation sur une période donnée, utilisez les métriques de taux d’événements.While comparing utilization over a period of time, use event rate metrics. Les métriques InputEvents et OutputEvents montrent le nombre d’événements qui ont été lus et traités.InputEvents and OutputEvents metrics show how many events were read and processed. Des métriques indiquent également le nombre d’événements d’erreur, tels que les erreurs de désérialisation.There are metrics that indicate number of error events as well, such as deserialization errors. Lorsque le nombre d’événements par unité de temps augmente, le pourcentage de SU augmente dans la plupart des cas.When the number of events per time unit increases, SU% increases in most cases.

Logique de requête avec état dans les éléments temporelsStateful query logic in temporal elements

L’une des caractéristiques propres à un travail Azure Stream Analytics consiste à effectuer un traitement avec état, comme des agrégations fenêtrées, jointures temporelles et fonctions d’analyse temporelle.One of the unique capability of Azure Stream Analytics job is to perform stateful processing, such as windowed aggregates, temporal joins, and temporal analytic functions. Chacun de ces opérateurs conserve des informations d’état.Each of these operators keeps state information.  La taille maximale de la fenêtre pour ces éléments de requête est de sept jours.The maximum window size for these query elements is seven days.

Le concept de fenêtre temporelle apparaît dans plusieurs éléments de requête Stream Analytics :The temporal window concept appears in several Stream Analytics query elements:

  1. Agrégats fenêtrés : GROUP BY fenêtres de Bascule, Récurrente et GlissanteWindowed aggregates: GROUP BY of Tumbling, Hopping, and Sliding windows

  2. Jointures temporelles : JOIN à la fonction DATEDIFFTemporal joins: JOIN with DATEDIFF function

  3. Fonctions analytiques temporelles : ISFIRST, LAST et LAG avec LIMIT DURATIONTemporal analytic functions: ISFIRST, LAST, and LAG with LIMIT DURATION

Les facteurs suivants influencent la mémoire utilisée (qui fait partie de la métrique des unités de streaming) par les travaux Stream Analytics :The following factors influence the memory used (part of streaming units metric) by Stream Analytics jobs:

Agrégations fenêtréesWindowed aggregates

La mémoire consommée (taille de l’état) pour un agrégat fenêtré n’est pas toujours directement proportionnelle à la taille de la fenêtre.The memory consumed (state size) for a windowed aggregate is not always directly proportional to the window size. Au lieu de cela, la mémoire consommée est proportionnelle à la cardinalité des données ou le nombre de groupes dans chaque fenêtre de temps.Instead, the memory consumed is proportional to the cardinality of the data, or the number of groups in each time window.

Par exemple, dans la requête suivante, le nombre associé à clusterid est la cardinalité de la requête.For example, in the following query, the number associated with clusterid is the cardinality of the query.

SELECT count(*)
FROM input 
GROUP BY  clusterid, tumblingwindow (minutes, 5)

Afin d’atténuer les problèmes provoqués par une cardinalité élevée dans la requête précédente, vous pouvez envoyer des événements à Event Hub avec un partitionnement par clusterid, et effectuer un scale-out de la requête en autorisant le système à traiter chaque partition d’entrée séparément à l’aide de PARTITION BY, comme indiqué dans l’exemple ci-dessous :In order to mitigate any issues caused by high cardinality in the previous query, you can send events to Event Hub partitioned by clusterid, and scale out the query by allowing the system to process each input partition separately using PARTITION BY as shown in the example below:

SELECT count(*) 
FROM input PARTITION BY PartitionId
GROUP BY PartitionId, clusterid, tumblingwindow (minutes, 5)

Une fois que la requête est partitionnée, elle est répartie sur plusieurs nœuds.Once the query is partitioned out, it is spread out over multiple nodes. Par conséquent, le nombre de clusterid arrivant dans chaque nœud est réduit, ce qui réduit d’autant la cardinalité du groupe par opérateur.As a result, the number of clusterid values coming into each node is reduced thereby reducing the cardinality of the group by operator.

Les partitions Event Hub doivent être partitionnées par la clé de regroupement pour éviter une étape de réduction.Event Hub partitions should be partitioned by the grouping key to avoid the need for a reduce step. Pour plus d'informations, consultez la Vue d'ensemble des Concentrateurs d’événements.For more information, see Event Hubs overview.

Jointures temporellesTemporal joins

La mémoire consommée (taille de l’état) d’une jointure temporelle est proportionnelle au nombre d’événements dans la marge de manœuvre temporelle de la jointure, qui est la vitesse d’entrée des événements multipliée par la taille de la marge de manœuvre.The memory consumed (state size) of a temporal join is proportional to the number of events in the temporal wiggle room of the join, which is event input rate multiplied by the wiggle room size. En d’autres termes, la mémoire consommée par les jointures est proportionnelle à l’intervalle de temps DateDiff multipliée par le taux d’événements moyen.In other words, the memory consumed by joins is proportional to the DateDiff time range multiplied by average event rate.

Le nombre d’événements sans correspondance de la jointure affecte la consommation de mémoire pour la requête.The number of unmatched events in the join affect the memory utilization for the query. La requête suivante vise à identifier l’exposition publicitaire qui génère des clics :The following query is looking to find the ad impressions that generate clicks:

SELECT clicks.id
FROM clicks 
INNER JOIN impressions ON impressions.id = clicks.id AND DATEDIFF(hour, impressions, clicks) between 0 AND 10.

Dans cet exemple, il est possible qu’un grand nombre de publicités s’affichent et que quelques personnes cliquent dessus ; cette configuration est requise pour conserver l’ensemble des événements dans la fenêtre de temps.In this example, it is possible that lots of ads are shown and few people click on it and it is required to keep all the events in the time window. La consommation de mémoire est proportionnelle à la taille de la fenêtre et au taux d’événements.Memory consumed is proportional to the window size and event rate.

Pour corriger ce problème, envoyez des événements à Event Hub avec un partitionnement par clés de jointure (ID dans ce cas) et augmentez la taille des instances de la requête en autorisant le système à traiter chaque partition d’entrée séparément à l’aide de PARTITION BY comme indiqué :To remediate this, send events to Event Hub partitioned by the join keys (ID in this case), and scale out the query by allowing the system to process each input partition separately using PARTITION BY as shown:

SELECT clicks.id
FROM clicks PARTITION BY PartitionId
INNER JOIN impressions PARTITION BY PartitionId 
ON impression.PartitionId = clicks.PartitionId AND impressions.id = clicks.id AND DATEDIFF(hour, impressions, clicks) between 0 AND 10 

Une fois que la requête est partitionnée, elle est répartie sur plusieurs nœuds.Once the query is partitioned out, it is spread out over multiple nodes. Par conséquent, le nombre d’événements arrivant dans chaque nœud est réduit, ce qui réduit d’autant la taille de l’état dans la fenêtre de jointure.As a result the number of events coming into each node is reduced thereby reducing the size of the state kept in the join window.

Fonctions analytiques temporellesTemporal analytic functions

La mémoire consommée (taille de l’état) d’une fonction analytique temporelle est proportionnelle au taux d’événements multiplié par la durée.The memory consumed (state size) of a temporal analytic function is proportional to the event rate multiply by the duration. La mémoire consommée par les fonctions analytiques n’est pas proportionnelle à la taille de la fenêtre, mais plutôt le nombre de partitions dans chaque fenêtre de temps.The memory consumed by analytic functions is not proportional to the window size, but rather partition count in each time window.

La solution est similaire à celle de la jointure temporelle.The remediation is similar to temporal join. Vous pouvez augmenter la taille des instances de la requête à l’aide de PARTITION BY.You can scale out the query using PARTITION BY.

Mémoire tampon d’événements en désordreOut of order buffer

L’utilisateur peut configurer la taille de la mémoire tampon d’événements en désordre dans le volet de configuration Ordre des événements.User can configure the out of order buffer size in the Event Ordering configuration pane. La mémoire tampon est utilisée pour contenir des entrées pendant la durée d’affichage de la fenêtre et les réorganiser.The buffer is used to hold inputs for the duration of the window, and reorder them. La taille de la mémoire tampon est proportionnelle à la vitesse d’entrée des événements multipliée par la taille de la fenêtre d’événements en désordre.The size of the buffer is proportional to the event input rate multiply by the out of order window size. La taille de fenêtre par défaut est égale à 0.The default window size is 0.

Pour corriger le dépassement de capacité de la mémoire tampon, augmenter la taille des instances de la requête à l’aide de PARTITION BY.To remediate overflow of the out of order buffer, scale out query using PARTITION BY. Une fois que la requête est partitionnée, elle est répartie sur plusieurs nœuds.Once the query is partitioned out, it is spread out over multiple nodes. Par conséquent, le nombre d’événements arrivant dans chaque nœud est réduit, ce qui réduit d’autant le nombre d’événements dans chaque mémoire tampon de réorganisation.As a result, the number of events coming into each node is reduced thereby reducing the number of events in each reorder buffer.

Nombre de partitions d’entréeInput partition count

Chaque partition d’entrée d’une entrée de travail a une mémoire tampon.Each input partition of a job input has a buffer. Plus le nombre de partitions d’entrée est élevé, plus le travail consomme de ressources.The larger number of input partitions, the more resource the job consumes. Pour chaque unité de streaming, Azure Stream Analytics peut traiter environ 1 Mo/s d’entrée.For each streaming unit, Azure Stream Analytics can process roughly 1 MB/s of input. Par conséquent, vous pouvez optimiser en faisant correspondre le nombre d’unités de streaming Stream Analytics avec le nombre de partitions dans votre Concentrateur d’événements.Therefore, you can optimize by matching the number of Stream Analytics streaming units with the number of partitions in your Event Hub.

En règle générale, un travail configuré avec une unité de streaming est suffisante pour un Concentrateur d’événements avec deux partitions (qui est la valeur minimale du Concentrateur d’événements).Typically, a job configured with one streaming unit is sufficient for an Event Hub with two partitions (which is the minimum for Event Hub). Si le Concentrateur d'événements a davantage de partitions, votre travail Stream Analytics consomme davantage de ressources, mais n’utilise pas nécessairement le débit supplémentaire fourni par le Concentrateur d’événements.If the Event Hub has more partitions, your Stream Analytics job consumes more resources, but not necessarily uses the extra throughput provided by Event Hub.

Pour un travail avec 6 unités de streaming, vous devrez peut-être demander 4 ou 8 partitions du Concentrateur d’événements.For a job with 6 streaming units, you may need 4 or 8 partitions from the Event Hub. Toutefois, évitez de trop nombreuses partitions inutiles car cela provoque l’utilisation excessive des ressources.However, avoid too many unnecessary partitions since that causes excessive resource usage. Par exemple, un Concentrateur d’événements avec 16 partitions ou plus dans un travail Stream Analytics qui possède 1 unité de streaming.For example, an Event Hub with 16 partitions or larger in a Stream Analytics job that has 1 streaming unit.

Données de référenceReference data

Les données de référence dans ASA sont chargées en mémoire pour la recherche rapide.Reference data in ASA are loaded into memory for fast lookup. Avec l’implémentation actuelle, chaque opération de jointure avec les données de référence conserve une copie des données de référence en mémoire, même si vous effectuez la jointure plusieurs fois avec les mêmes données de référence.With the current implementation, each join operation with reference data keeps a copy of the reference data in memory, even if you join with the same reference data multiple times. Pour les requêtes avec PARTITION BY, comme chaque partition possède une copie des données de référence, les partitions sont entièrement découplées.For queries with PARTITION BY, each partition has a copy of the reference data, so the partitions are fully decoupled. Avec l’effet multiplicateur, l’utilisation de la mémoire peut être rapidement très élevée si vous effectuez la jointure avec les données de référence plusieurs fois avec plusieurs partitions.With the multiplier effect, memory usage can quickly get very high if you join with reference data multiple times with multiple partitions.

Utilisation de fonctions UDFUse of UDF functions

Quand vous ajoutez une fonction UDF, Azure Stream Analytics charge le runtime JavaScript en mémoire.When you add a UDF function, Azure Stream Analytics loads the JavaScript runtime into memory. Cela affecte le pourcentage d’utilisation d’unités de streaming.This will affect the SU%.

Étapes suivantesNext steps