Considerazioni sull'ordine degli eventi con Analisi di flusso di AzureAzure Stream Analytics event order considerations

Ora di arrivo e tempo applicazioneArrival time and application time

In un flusso di dati temporale degli eventi, a ogni evento viene assegnato un timestamp.In a temporal data stream of events, each event is assigned a time stamp. Analisi di flusso di Azure assegna timestamp a ogni evento usando l'ora di arrivo o il tempo applicazione.Azure Stream Analytics assigns a time stamp to each event by using either arrival time or application time. La colonna System.Timestamp include il timestamp assegnato all'evento.The System.Timestamp column has the time stamp assigned to the event.

L'ora di arrivo viene assegnata nell'origine di input quando l'evento raggiunge l'origine.Arrival time is assigned at the input source when the event reaches the source. È possibile accedere all'ora di arrivo usando la proprietà EventEnqueuedTime per l'input dell'hub eventi e la proprietà BlobProperties.LastModified per l'input del BLOB.You can access arrival time by using the EventEnqueuedTime property for event hub input and using the BlobProperties.LastModified property for blob input.

Il tempo applicazione viene assegnato quando l'evento viene generato e fa parte del payload.Application time is assigned when the event is generated and it is part of the payload. Per elaborare gli eventi in base al tempo applicazione, usare la clausola Timestamp by nella query di selezione.To process events by application time, use the Timestamp by clause in the select query. Se la clausola Timestamp by è assente, gli eventi vengono elaborati in base all'ora di arrivo.If the Timestamp by clause is absent, events are processed by arrival time.

Analisi di flusso di Azure genera l'output in base all'ordine del timestamp e fornisce impostazioni per gestire i dati non in ordine.Azure Stream Analytics produces output in the time-stamp order and provides settings to deal with out-of-order data.

Gestione di più flussiHandling of multiple streams

Un processo di Analisi di flusso di Azure combina gli eventi di più sequenze temporali in casi come i seguenti:An Azure Stream Analytics job combines events from multiple timelines in cases like the following:

  • Generazione di output da più partizioni.Producing output from multiple partitions. Le query in cui non è presente una clausola esplicita Partition by PartitionId devono combinare gli eventi da tutte le partizioni.Queries that don't have an explicit Partition by PartitionId clause must combine events from all the partitions.
  • Unione di due o più origini di input differenti.Union of two or more different input sources.
  • Join delle origini di input.Joining input sources.

Negli scenari in cui vengono combinate più sequenze temporali, Analisi di flusso di Azure genera un output per il timestamp t1 solo dopo che tutte le origini combinate sono almeno all'ora t1.In scenarios where multiple timelines are combined, Azure Stream Analytics produces output for time stamp t1 only after all the sources that are combined are at least at time t1. Ad esempio, si supponga che la query legga da una partizione dell'hub eventi che ha due partizioni.For example, assume that the query reads from an event hub partition that has two partitions. Una delle partizioni, P1, ha eventi fino all'ora t1.One of the partitions, P1, has events until time t1. L'altra partizione, P2, ha eventi fino all'ora t1 + x.The other partition, P2, has events until time t1 + x. L'output viene quindi generato fino all'ora t1.Output is then produced until time t1. Tuttavia, se è presente una clausola esplicita Partition by PartitionId, entrambe le partizioni avanzano in modo indipendente.But if there's an explicit Partition by PartitionId clause, both the partitions progress independently.

L'impostazione della tolleranza per arrivo in ritardo viene usata per gestire l'assenza di dati in alcune partizioni.The setting for late arrival tolerance is used to deal with the absence of data in some partitions.

Configurazione di tolleranza per arrivo in ritardo e tolleranza elementi non in ordineConfiguring late arrival tolerance and out-of-order tolerance

I flussi di input che non sono in ordine vengono:Input streams that are not in order are either:

  • Ordinati (e perciò ritardati)Sorted (and therefore delayed)
  • Regolati dal sistema, in base al criterio specificato dall'utenteAdjusted by the system, according to the user-specified policy

Analisi di flusso di Azure tollera eventi in ritardo e non in ordine durante l'elaborazione in base al tempo applicazione.Stream Analytics tolerates late and out-of-order events when you're processing by application time. Le impostazioni seguenti sono disponibili nell'opzione Ordinamento eventi nel portale di Azure:The following settings are available in the Event ordering option in the Azure portal:

Gestione degli eventi con Analisi di flusso

Tolleranza per arrivo in ritardoLate arrival tolerance

La tolleranza per arrivo in ritardo è applicabile solo quando l'elaborazione si basa sul tempo applicazione.Late arrival tolerance is applicable only when you're processing by application time. In caso contrario, l'impostazione viene ignorata.Otherwise, the setting is ignored.

La tolleranza per arrivo in ritardo è la differenza massima tra l'ora di arrivo e il tempo applicazione.Late arrival tolerance is the maximum difference between arrival time and application time. Se un evento arriva più tardi rispetto alla tolleranza per arrivo in ritardo (ad esempio, tempo applicazione app_t < ora di arrivo arr_t -tolleranza per arrivo in ritardo late_t), l'evento viene allineato al valore massimo della tolleranza per arrivo in ritardo (arr_t - late_t).If an event arrives later than the late arrival tolerance (for example, application time app_t < arrival time arr_t - late arrival policy tolerance late_t), the event is adjusted to the maximum of the late arrival tolerance (arr_t - late_t). La finestra di arrivo in ritardo è il ritardo massimo tra la generazione dell'evento e la ricezione dello stesso nell'origine di input.The late arrival window is the maximum delay between event generation and receipt of the event at the input source.

Quando più partizioni dello stesso flusso di input o più flussi di input vengono combinate, la tolleranza per arrivo in ritardo è la quantità massima di tempo che ogni partizione resta in attesa di nuovi dati.When multiple partitions from the same input stream or multiple input streams are combined, late arrival tolerance is the maximum amount of time that every partition waits for new data.

La regolazione in base alla tolleranza per arrivo in ritardo viene eseguita per prima,Adjustment based on late arrival tolerance happens first. seguita da quella degli elementi non in ordine.Adjustment based on out-of-order tolerance happens next. La colonna System.Timestamp contiene il timestamp finale assegnato all'evento.The System.Timestamp column has the final time stamp assigned to the event.

Tolleranza elementi non in ordineOut-of-order tolerance

Gli eventi che non arrivano in ordine, ma entro la finestra di tolleranza degli elementi non in ordine stabilita, vengono riordinati in base al timestamp.Events that arrive out of order but within the set out-of-order tolerance window are reordered by time stamp. Gli eventi che arrivano con un ritardo maggiore rispetto alla finestra di tolleranza vengono:Events that arrive later than the tolerance window are either:

  • Regolati: regolati in modo che sembrino arrivati nel momento di massimo ritardo accettabile.Adjusted: Adjusted to appear to have arrived at the latest acceptable time.
  • Eliminati: rimossi.Dropped: Discarded.

Quando Analisi di flusso di Azure riordina gli eventi ricevuti entro la finestra di tolleranza degli elementi non in ordine, l'output della query è ritardato in base alla finestra di tolleranza elementi non in ordine.When Stream Analytics reorders events that are received within the out-of-order tolerance window, the output of the query is delayed by the out-of-order tolerance window.

Eventi anticipatiEarly events

Durante l'elaborazione in base al tempo applicazione, gli eventi con tempo applicazione superiore di 5 minuti rispetto alla rispettiva ora di arrivo vengono eliminati o modificati in base all'opzione di configurazione selezionata.When processing by application time, events whose application time is more than 5 minutes ahead of their arrival time are either dropped or adjusted according to the configuration option selected.

EsempioExample

  • Tolleranza per arrivo in ritardo = 10 minutiLate Arrival tolerance = 10 minutes
  • Tolleranza elementi non in ordine = 3 minutiOut-of-order tolerance = 3 minutes
  • Elaborazione in base al tempo applicazioneProcessing by application time
  • Eventi:Events:
    1. Tempo applicazione = 00:00:00, Ora di arrivo = 00:10:01, System.Timestamp = 00:00:01, regolato perché (Ora di arrivo - Tempo applicazione) è maggiore rispetto alla tolleranza per arrivo in ritardo.Application Time = 00:00:00, Arrival Time = 00:10:01, System.Timestamp = 00:00:01, adjusted because (Arrival Time - Application Time) is more than the late arrival tolerance.
    2. Tempo applicazione = 00:00:01, Ora di arrivo = 00:10:01, System.Timestamp = 00:00:01, non regolato perché il tempo applicazione rientra nella finestra di arrivo in ritardo.Application Time = 00:00:01, Arrival Time = 00:10:01, System.Timestamp = 00:00:01, not adjusted because application time is within the late arrival window.
    3. Tempo applicazione = 00:10:00, Ora di arrivo = 00:10:02, System.Timestamp = 00:10:00, non regolato perché il tempo applicazione rientra nella finestra di arrivo in ritardo.Application Time = 00:10:00, Arrival Time = 00:10:02, System.Timestamp = 00:10:00, not adjusted because application time is within the late arrival window.
    4. Tempo applicazione = 00:09:00, Ora di arrivo = 00:10:03, System.Timestamp = 00:09:00, accettato con il timestamp originale perché il tempo applicazione rientra nella tolleranza elementi non ordine.Application Time = 00:09:00, Arrival Time = 00:10:03, System.Timestamp = 00:09:00, accepted with the original time stamp because application time is within the out-of-order tolerance.
    5. Tempo applicazione = 00:06:00, Ora di arrivo = 00:10:04, System.Timestamp = 00:07:00, regolato perché il tempo applicazione è precedente alla tolleranza elementi non in ordine.Application Time = 00:06:00, Arrival Time = 00:10:04, System.Timestamp = 00:07:00, adjusted because application time is older than the out-of-order tolerance.

Considerazioni pratichePractical considerations

Come già detto, la tolleranza per arrivo in ritardo è la differenza massima tra il tempo applicazione e l'ora di arrivo.As mentioned earlier, late arrival tolerance is the maximum difference between application time and arrival time. Durante l'elaborazione in base al tempo applicazione, gli eventi successivi rispetto alla tolleranza per arrivo in ritardo configurata vengono regolato prima che sia applicata l'impostazione tolleranza elementi non in ordine.When you're processing by application time, events that are later than the configured late arrival tolerance are adjusted before the out-of-order tolerance setting is applied. Pertanto, gli elementi non in ordine effettivi sono la differenza minima tra la tolleranza per arrivo in ritardo e la tolleranza elementi non in ordine.So, effective out of order is the minimum of late arrival tolerance and out-of-order tolerance.

Gli eventi non in ordine all'interno di un flusso si verificano a causa di vari motivi, tra cui:Reasons for out-of-order events within a stream include:

  • Sfasamento di orario tra i mittenti.Clock skew among the senders.
  • Latenza variabile tra il mittente e l'origine evento di input.Variable latency between the sender and the input event source.

I motivi di arrivo in ritardo includono:Reasons for late arrival include:

  • I mittenti elaborano gli eventi in batch e li inviano per un intervallo successivo, dopo l'intervallo.Senders batching and sending the events for an interval later, after the interval.
  • La latenza tra l'invio dell'evento da parte del mittente e la sua ricezione in corrispondenza dell'origine di input.Latency between sending the event by sender and receiving the event at the input source.

Quando si configurano la tolleranza per arrivo in ritardo e la tolleranza elementi non in ordine per un processo specifico, occorre considerare la correttezza, i requisiti di latenza e i fattori elencati in precedenza.When you're configuring late arrival tolerance and out-of-order tolerance for a specific job, consider correctness, latency requirements, and the preceding factors.

Di seguito sono riportati alcuni esempi.Following are a few examples.

Esempio 1Example 1

La query ha una clausola Partition by PartitionId.The query has a Partition by PartitionId clause. All'interno di una singola partizione, gli eventi vengono inviati con metodi di invio sincrono.Within a single partition, events are sent via synchronous send methods. I metodi di invio sincrono si bloccano finché non vengono inviati gli eventi.Synchronous send methods block until the events are sent.

In questo caso, gli elementi non in ordine sono pari a zero poiché gli eventi vengono inviati in ordine con la conferma esplicita prima di inviare l'evento successivo.In this case, out of order is zero because events are sent in order with explicit confirmation before the next event is sent. L'arrivo in ritardo è il ritardo massimo tra la generazione dell'evento e l'invio dell'evento, più la latenza massima tra il mittente e l'origine di input.Late arrival is the maximum delay between generating the event and sending the event, plus the maximum latency between the sender and the input source.

Esempio 2Example 2

La query ha una clausola Partition by PartitionId.The query has a Partition by PartitionId clause. All'interno di una singola partizione, gli eventi vengono inviati con metodi di invio asincrono.Within a single partition, events are sent via asynchronous send methods. I metodi di invio asincrono possono avviare più invii contemporaneamente, che possono causare eventi non in ordine.Asynchronous send methods can initiate multiple sends at the same time, which can cause out-of-order events.

In questo caso, sia gli elementi non in ordine che l'arrivo in ritardo sono almeno il ritardo massimo tra la generazione dell'evento e l'invio dell'evento, più la latenza massima tra il mittente e l'origine di input.In this case, both out of order and late arrival are at least the maximum delay between generating the event and sending the event, plus the maximum latency between the sender and the input source.

Esempio 3Example 3

La query non include la clausola Partition by PartitionId e sono presenti almeno due partizioni.The query does not have a Partition by PartitionId clause, and there are at least two partitions.

La configurazione è la stessa dell'esempio 2.Configuration is the same as example 2. Tuttavia, l'assenza di dati in una delle partizioni può ritardare l'output di un'ulteriore finestra di tolleranza per arrivo in ritardo.However, absence of data in one of the partitions can delay the output by an additional late arrival tolerance window.

Gestione di producer di eventi con sequenze temporali diverseHandling event producers with differing timelines

Spesso un flusso di eventi di input contiene eventi provenienti da più producer di eventi, ad esempio singoli dispositivi.A single input event stream often contains events that originate from multiple event producers, such as individual devices. Questi eventi possono arrivare non in ordine per i motivi descritti in precedenza.These events might arrive out of order due to the reasons discussed earlier. In questi scenari, anche se il disordine tra producer di eventi potrebbe essere consistente, il disordine tra gli eventi di un singolo producer è minimo o inesistente.In these scenarios, although the disorder across event producers might be large, the disorder within the events from a single producer is small (or even nonexistent).

Analisi di flusso di Azure offre meccanismi generali per la gestione degli eventi non in ordine.Azure Stream Analytics provides general mechanisms for dealing with out-of-order events. Questi meccanismi producono ritardi di elaborazione (nell'attesa che gli eventi non in ordine raggiungano il sistema), eliminazione o modifica degli eventi o entrambi.Such mechanisms result in processing delays (while waiting for the straggling events to reach the system), dropped or adjusted events, or both.

Tuttavia, in molti scenari, la query desiderata sta elaborando gli eventi di diversi producer in modo indipendente.Yet in many scenarios, the desired query is processing events from different event producers independently. Ad esempio, potrebbe star eseguendo l'aggregazione degli eventi per finestra, per dispositivo.For instance, it might be aggregating events per window, per device. In questi casi non è necessario ritardare l'output che corrisponde a un producer di eventi nell'attesa del recupero da parte degli altri producer.In these cases, there's no need to delay the output that corresponds to one event producer while waiting for the other event producers to catch up. In altre parole, non è necessario gestire lo sfasamento dell'ora tra i producer.In other words, there's no need to deal with the time skew between producers. È possibile ignorarla.You can ignore it.

Naturalmente, questo significa che gli eventi di output stessi non sono in ordine rispetto ai relativi timestamp.Of course, this means that the output events themselves are out of order with respect to their timestamps. Il consumer a valle deve essere in grado di gestire tale comportamento.The downstream consumer must be able to deal with such behavior. Tuttavia, ogni evento nell'output è corretto.But every event in the output is correct.

Analisi di flusso di Azure implementa questa funzionalità usando la clausola TIMESTAMP BY OVER.Azure Stream Analytics implements this functionality by using the TIMESTAMP BY OVER clause.

SummarySummary

  • Configurare la tolleranza per arrivo in ritardo e la finestra di tolleranza elementi non in ordine in base ai requisiti di latenza e correttezza.Configure late arrival tolerance and the out-of-order window based on correctness and latency requirements. Considerare inoltre la modalità di invio degli eventi.Also consider how the events are sent.
  • È consigliabile che la tolleranza elementi non in ordine sia inferiore alla tolleranza per arrivo in ritardo.We recommend that out-of-order tolerance is smaller than late arrival tolerance.
  • Quando si combinano più sequenze temporali, la mancanza di dati in una delle origini o delle partizioni può ritardare l'output di un'ulteriore finestra di tolleranza per arrivo in ritardo.When you're combining multiple timelines, lack of data in one of the sources or partitions can delay the output by an additional late arrival tolerance window.

Ottenere aiutoGet help

Per ottenere assistenza aggiuntiva, provare ad accedere al forum di Analisi di flusso di Azure.For additional assistance, try the Azure Stream Analytics forum.

Passaggi successiviNext steps