Informazioni sulle unità di flusso e su come modificarleUnderstand and adjust Streaming Units

Analisi di flusso di Azure aggrega il "peso" delle prestazioni dell'esecuzione di un processo in unità di streaming.Azure Stream Analytics aggregates the performance "weight" of running a job into Streaming Units (SUs). Le unità di streaming rappresentano le risorse di elaborazione che vengono usate per eseguire un processo.SUs represent the computing resources that are consumed to execute a job. Le unità di streaming descrivono la capacità relativa di elaborazione di eventi in base a una misurazione combinata di CPU, memoria e frequenze di lettura e scrittura.SUs provide a way to describe the relative event processing capacity based on a blended measure of CPU, memory, and read and write rates. Questa capacità consente di concentrarsi sulla logica della query, senza dover conoscere il funzionamento delle prestazioni del livello di archiviazione, allocare memoria per il processo manualmente e approssimare il numero di memorie centrali di CPU necessario per eseguire il processo in modo tempestivo.This capacity lets you focus on the query logic and removes you from needing to know storage tier performance considerations, allocate memory for your job manually, and approximate the CPU core-count needed to run your job in a timely manner.

Per ottenere l'elaborazione di flussi a bassa latenza, i processi di Analisi di flusso di Azure eseguono tutta l'elaborazione in memoria.In order to achieve low latency streaming processing, Azure Stream Analytics jobs perform all processing in memory. Quando la memoria viene esaurita, il processo di streaming non riesce.When running out of memory, the streaming job fails. Di conseguenza, per un processo di produzione è importante monitorare l'utilizzo delle risorse di un processo di streaming e assicurarsi che siano state allocate risorse sufficienti per mantenere il processo in esecuzione 24 ore su 24, 7 giorni su 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 in order to keep the jobs running 24/7.

La metrica è un numero in percentuale compreso tra 0% e 100%.The metric is a percentage number ranging from 0% to 100%. Per un processo di streaming con footprint minimo, la metrica di utilizzo in percentuale delle unità di streaming è in genere compresa tra 10% e 20%.For a streaming job with minimal footprint, the SU % Utilization metric is usually between 10% to 20%. È consigliabile mantenere la metrica al di sotto dell'80% in modo da tenere conto dei picchi occasionali.It’s best to keep the metric below 80% to account for occasional spikes. È possibile impostare un avviso per la metrica. Vedere qui per configurare avvisi delle metriche.You can set an alert on the metric (see here to set up metric alerts).

Configurare le unità di streaming di Analisi di flussoConfigure Stream Analytics Streaming Units (SUs)

  1. Accedere al portale di Azure.Sign in to Azure portal
  2. Nell'elenco delle risorse trovare il processo di Analisi di flusso da ridimensionare e aprirlo.In the list of resources, find the Stream Analytics job that you want to scale and then open it.
  3. Nella pagina del processo fare clic su Ridimensiona in Configura.In the job page, under Configure, click Scale.

    Configurazione del processo di Analisi di flusso nel portale di Azure

  4. Usare il dispositivo di scorrimento per impostare le unità di streaming per il processo.Use the slider to set the SUs for the job. Si noti che è possibile definire solo impostazioni specifiche delle unità di streaming.Notice that you are limited to specific SU settings.

Monitorare le prestazioni del processoMonitor job performance

Nel portale di Azure è possibile rilevare la velocità effettiva di un processo:Using the Azure portal, you can track the throughput of a job:

Processi di monitoraggio di Analisi dei flussi di Azure

Calcolare la velocità effettiva prevista del carico di lavoro.Calculate the expected throughput of the workload. Se la velocità effettiva è inferiore al previsto, ottimizzare la partizione di input e la query, quindi aggiungere unità di streaming al processo.If the throughput is less than expected, tune the input partition, tune the query, and add SUs to your job.

Quante unità di streaming sono necessarie per un processo?How many SUs are required for a job?

Il numero di unità di streaming necessarie per un particolare processo dipende dalla configurazione della partizione per gli input e dalla query definita nel processo.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 pagina Ridimensiona consente di impostare il numero corretto di unità di streaming.The Scale page allows you to set the right number of SUs. È consigliabile allocare più unità di streaming di quelle necessarie.It is a best practice to allocate more SUs than needed. Il motore di elaborazione di Analisi di flusso è ottimizzato per la latenza e la velocità effettiva al costo di allocazione di memoria aggiuntiva.The Stream Analytics processing engine optimizes for latency and throughput at the cost of allocating additional memory.

In generale la procedura consigliata consiste nell'iniziare con 6 unità di streaming per le query che non usano PARTITION BY.In general, the best practice is to start with 6 SUs for queries that don't use PARTITION BY. Determinare quindi il punto critico usando un metodo di valutazione e correzione degli errori con cui modificare il numero di unità di streaming dopo aver passato quantità rappresentative di dati e aver esaminato la metrica di utilizzo in percentuale delle unità di streaming.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.

Per altre informazioni sulla scelta del numero corretto di unità di streaming, vedere questa pagina: Ridimensionare i processi di Analisi di flusso di Azure per aumentare la velocità effettiva dell'elaborazione dei flussi di datiFor more information about choosing the right number of SUs, see this page: Scale Azure Stream Analytics jobs to increase throughput

Nota

Il numero di unità di streaming necessarie per un particolare processo dipende dalla configurazione delle partizioni per gli input e dalla query definita per il processo.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. È prevista una quota massima di unità di streaming che è possibile selezionare per un processo.You can select up to your quota in SUs for a job. Per impostazione predefinita, ogni sottoscrizione di Azure ha una quota massima di 200 unità di streaming per tutti i processi di analisi in un'area specifica.By default, each Azure subscription has a quota of up to 200 SUs for all the analytics jobs in a specific region. Per superare la quota massima di unità di streaming per le sottoscrizioni, contattare il supporto tecnico Microsoft.To increase SUs for your subscriptions beyond this quota, contact Microsoft Support. I valori validi di unità di streaming per processo sono 1, 3, 6 e poi a salire, con incrementi di 6.Valid values for SUs per job are 1, 3, 6, and up in increments of 6.

Fattori che aumentano l'utilizzo in percentuale delle unità di streamingFactors increasing SU% utilization

Logica di query con statoStateful query logic

Una delle esclusive funzionalità dei processi di Analisi di flusso di Azure è l'esecuzione dell'elaborazione con stato, ad esempio per funzioni di aggregazione finestra, join temporali e funzioni di analisi temporali.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. Ognuno di questi operatori mantiene alcuni stati.Each of these operators keeps some states.

Funzioni di aggregazione finestraWindowed aggregates

Le dimensioni dello stato di una funzione di aggregazione finestra è proporzionale al numero di gruppi (cardinalità) nell'operatore GROUP BY.The state size of a windowed aggregate is proportional to the number of groups (cardinality) in the group by operator. Ad esempio, nella query seguente il numero associato a clusterid è la cardinalità della query.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)

Per risolvere i problemi causati dalla cardinalità elevata nella query precedente, è possibile inviare eventi partizionati in base a ''clusterid'' a Hub eventi e scalare orizzontalmente la query, consentendo al sistema di elaborare ogni partizione di input separatamente usando PARTITION BY, come mostrato nell'esempio seguente:In order to ameliorate 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 PARTITION BY PartitionId
GROUP BY PartitionId, clusterid, tumblingwindow (minutes, 5)

In seguito al partizionamento, la query viene distribuita su più nodi.Once the query is partitioned out, it is spread out over multiple nodes. Di conseguenza, il numero di elementi clusterid in arrivo in ogni nodo diminuisce, riducendo a sua volta la cardinalità dell'operatore GROUP BY.As a result, the number of clusterid coming into each node is reduced thereby reducing the cardinality of the group by operator.

Le partizioni di Hub eventi devono essere create in base alla chiave di raggruppamento per evitare la necessità di un passaggio di riduzione.Event Hub partitions should be partitioned by the grouping key to avoid the need for a reduce step. Altri dettagli sono disponibili qui.Additional details are covered here.

Join temporaleTemporal join

Le dimensioni dello stato di un join temporale sono proporzionali al numero di eventi all'interno del margine di manovra temporale del join, che corrisponde alla frequenza di input degli eventi moltiplicata per le dimensioni del margine di manovra.The 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 multiply by the wiggle room size.

Il numero di eventi senza corrispondenza nel join influisce sull'utilizzo della memoria per la query.The number of unmatched events in the join affect the memory utilization for the query. La query seguente cerca le impressioni di annunci che generano clic:The following query is looking to find the ad impressions that generate clicks:

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

In questo esempio è possibile che vengano mostrati molti annunci e che pochi utenti facciano clic sugli annunci. È anche necessario mantenere tutti gli eventi nell'intervallo di tempo.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 memoria consumata è proporzionale alle dimensioni della finestra e alla frequenza degli eventi.Memory consumed is proportional to the window size and event rate.

Per risolvere questo problema, inviare gli eventi a Hub eventi partizionandoli in base alle chiavi di join (l'ID in questo caso) e scalare orizzontalmente la query consentendo al sistema di elaborare ogni partizione di input separatamente usando PARTITION BY, come mostrato di seguito: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 id
FROM clicks PARTITION BY PartitionId
INNER JOIN impressions PARTITION BY PartitionId 
ON impression.PartitionId = clocks.PartitionId AND impressions.id = clicks.id AND DATEDIFF(hour, impressions, clicks) between 0 AND 10 

In seguito al partizionamento, la query viene distribuita su più nodi.Once the query is partitioned out, it is spread out over multiple nodes. Di conseguenza, il numero di eventi in arrivo in ogni nodo diminuisce, riducendo a sua volta le dimensioni dello stato mantenuto nell'intervallo di join.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.

Funzione di analisi temporaleTemporal analytic function

Le dimensioni dello stato di una funzione di analisi temporale sono proporzionali alla frequenza degli eventi moltiplicata per la durata.The state size of a temporal analytic function is proportional to the event rate multiply by the duration. La correzione è simile a quella per il join temporale.The remediation is similar to temporal join. È possibile scalare orizzontalmente la query usando PARTITION BY.You can scale out the query using PARTITION BY.

Buffer non in ordineOut of order buffer

L'utente può configurare le dimensioni del buffer non in ordine nel riquadro di configurazione Ordinamento eventi.User can configure the out of order buffer size in the Event Ordering configuration pane. Il buffer viene usato per contenere gli input per la durata dell'intervallo e per riordinarli.The buffer is used to hold inputs for the duration of the window, and reorder them. Le dimensioni del buffer sono proporzionali alla frequenza di input degli eventi moltiplicata per la dimensione dell'intervallo per l'ordine non corretto.The size of the buffer is proportional to the event input rate multiply by the out of order window size. La dimensione predefinita dell'intervallo è 0.The default window size is 0.

Per correggere questo problema, ridimensionare la query usando PARTITION BY.To remediate this, scale out query using PARTITION BY. In seguito al partizionamento, la query viene distribuita su più nodi.Once the query is partitioned out, it is spread out over multiple nodes. Di conseguenza, il numero di eventi in arrivo in ogni nodo diminuisce, riducendo a sua volta il numero di eventi in ogni buffer di riordinamento.As a results the number of events coming into each node is reduced thereby reducing the number of events in each reorder buffer.

Conteggio delle partizioni di inputInput partition count

Ogni partizione di input di un processo ha un buffer.Each input partition of a job input has a buffer. Maggiore è il numero di partizioni di input, maggiore è il numero di risorse utilizzate dal processo.The larger number of input partitions, the more resource the job consumes. Poiché per ogni unità di streaming Analisi di flusso di Azure può elaborare all'incirca 1 MB/s di input, potrebbe essere necessario che il numero di unità di streaming di Analisi di flusso di Azure corrisponda al numero di partizioni di Hub eventi.For each SU, Azure Stream Analytics can process roughly 1 MB/s of input, so you may want to match ASA SU number with the number of partition of your Event Hub. In genere, un processo con una unità di streaming è sufficiente per un'istanza di Hub eventi con 2 partizioni (valore minimo per Hub eventi).Typically, 1SU job is sufficient for an Event Hub with 2 partitions (which is the minimum for Event Hub). Se l'istanza di Hub eventi ha più partizioni, il processo di Analisi di flusso utilizza più risorse, ma non usa necessariamente la velocità effettiva aggiuntiva fornita da Hub eventi.If the Event Hub has more partitions, your ASA job consumes more resources, but not necessarily uses the extra throughput provided by Event Hub. Per un processo con 6 unità di streaming, possono essere necessarie 4 o 8 partizioni in Hub eventi.For a 6SU job, you may need 4 or 8 partitions from the Event Hub. L'uso di Hub eventi con 16 o più partizioni in un processo con una unità di streaming contribuisce spesso a un utilizzo di risorse eccessivo e deve essere evitato.Using an Event Hub with 16 partitions or larger in an 1SU job often contributes to excessive resource usage, and should be avoided.

Dati di riferimentoReference data

I dati di riferimento in Analisi di flusso di Azure vengono caricati in memoria per consentire la ricerca rapida.Reference data in ASA are loaded into memory for fast lookup. Con l'implementazione corrente ogni operazione di join con dati di riferimento mantiene una copia dei dati di riferimento in memoria, anche se il join viene eseguito con gli stessi dati di riferimento più volte.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. Per le query con PARTITION BY, ogni partizione include una copia dei dati di riferimento, in modo che le partizioni siano completamente separate.For queries with PARTITION BY, each partition has a copy of the reference data, so the partitions are fully decoupled. Con l'effetto moltiplicatore l'utilizzo della memoria può aumentare rapidamente se si esegue il join con i dati di riferimento più volte con più partizioni.With the multiplier effect, memory usage can quickly get very high if you join with reference data multiple times with multiple partitions.

Uso di funzioni definite dall'utenteUse of UDF functions

Quando si aggiunge una funzione definita dall'utente, Analisi di flusso di Azure carica il runtime JavaScript in memoria.When you add a UDF function, Azure Stream Analytics loads the JavaScript runtime into memory. Questo comportamento influisce sulla percentuale di unità di streaming.This will affect the SU%.

Ottenere aiutoGet help

Per ulteriore assistenza, provare il Forum di Analisi dei flussi di Azure.For further assistance, try our Azure Stream Analytics forum.

Passaggi successiviNext steps