Garanzie di recapito eventi (Analisi di flusso di Azure)
Il linguaggio di query di Analisi di flusso di Azure estende la sintassi SQL per abilitare calcoli complessi su flussi di eventi. Con Analisi di flusso sono disponibili alcuni concetti correlati al recapito eventi che vale la pena discutere:
- Esattamente una volta l'elaborazione
- Esattamente una volta consegna
- Record duplicati
Oltre a questi concetti dettagliati di seguito, è importante considerare l'opzione iniziale di un processo per assicurarsi che non si verifichi alcuna perdita di dati.
Elaborazione esattamente una volta
L'elaborazione esattamente una volta garantisce che, dato un set di input, il sistema restituisce sempre gli stessi risultati. Questo è molto importante per la ripetibilità e si applica anche in caso di riavvio del processo o in più processi in esecuzione in parallelo sullo stesso input. Analisi di flusso di Azure garantisce esattamente una volta l'elaborazione.
Consegna esattamente una volta
La garanzia di recapito esattamente una volta significa che tutti gli output dell'elaborazione esattamente una volta vengono recapitati al sink di output, quindi non esiste alcun output duplicato. Ciò richiede funzionalità transazionali nell'adattatore di output da ottenere.
Analisi di flusso di Azure garantisce il recapito almeno una volta ai sink di output, che garantisce che tutti i risultati vengano restituiti, ma possono verificarsi risultati duplicati. Tuttavia, è possibile ottenere esattamente una volta il recapito con diversi output, ad esempio Azure Cosmos DB o Azure SQL.
Record duplicati
A causa della garanzia di recapito almeno una volta, quando un processo di Analisi di flusso è in esecuzione, i record duplicati possono essere occasionalmente notati nei dati di output. Questi record duplicati sono previsti perché gli adattatori di output di Analisi di flusso di Azure non scrivono gli eventi di output in modo transazionale. Questo scenario "record duplicato" può risultare se si verifica una delle condizioni seguenti:
- L'istanza di Azure viene aggiornata durante l'esecuzione del processo
- Il processo di Analisi di flusso viene aggiornato o si verifica un problema con la connettività o l'affidabilità dell'output del processo
- L'istanza di Azure che esegue il processo ha un'interruzione
- Il processo di Analisi di flusso viene avviato con l'ultima opzione arrestata
Il consumer downstream degli eventi di output deve deduplicare gli eventi usando l'identità logica degli eventi. Ad esempio, se si aggregano eventi per gruppi in una finestra di tumbling, l'identità logica dell'evento è i gruppi e l'ora di fine della finestra di tuming. Se si esegue una query pass through, potrebbe essere necessario portare un ID univoco sull'evento per deduplicare.
Output che supporta il recapito esatto una volta con Analisi di flusso di Azure
Azure Cosmos DB
Con Azure Cosmos DB, Analisi di flusso di Azure garantisce esattamente una volta il recapito. Poiché Analisi di flusso di Azure usa upsert, non è necessaria alcuna azione dall'utente. Vedere altre informazioni sull'output di Analisi di flusso di Azure in Azure Cosmos DB.
SQL
Quando si usa l'output SQL, gli utenti possono ottenere esattamente una volta il recapito se vengono soddisfatti i requisiti seguenti:
- tutti gli eventi di streaming di output hanno una chiave naturale, ovvero sono identificabili in modo univoco da un campo o da una combinazione di campi.
- la tabella SQL di output ha un vincolo univoco (o chiave primaria) creato usando la chiave naturale degli eventi di output.
Ciò è sufficiente per evitare duplicati perché l'output SQL rispetta eventuali vincoli inseriti nella tabella ignorando eventuali eventi che causano una violazione univoca dei vincoli.
Tabella di Azure
Tutte le entità in una tabella di archiviazione di Azure sono identificate in modo univoco dalla concatenazione dei RowKey
campi e PartitionKey
. Entità upserts di Analisi di flusso di Azure, pertanto il valore di un'entità di tabella sarà l'evento di output più recente con la combinazione corrispondente RowKey
/PartitionKey
. Pertanto, per ottenere esattamente una volta il recapito, assicurarsi che ogni evento di output abbia una combinazione univoca RowKey
/PartitionKey
. Se questa operazione viene eseguita, gli eventi duplicati sovrascriveranno le versioni precedenti. Il campo definito Timestamp
dal sistema, ovvero l'ultima volta modificata per l'entità, cambierà comunque in questo caso.