Risolvere i problemi relativi alle connessioni di input di Analisi di flusso di Azure

Questo articolo descrive i problemi comuni relativi alle connessioni di input di Analisi di flusso di Azure, come risolverli e come correggerli. Tra i problemi trattati figurano errori di deserializzazione dovuti a eventi non validi, limiti dei ricevitori di Event Hubs, modifiche al numero di partizioni e limiti dei lettori di hub IoT.

Molti passaggi per la risoluzione dei problemi richiedono l'abilitazione dei log delle risorse per il processo di Analisi di flusso. Se i log delle risorse non sono abilitati, vedere Risolvere i problemi Analisi di flusso di Azure usando i log delle risorse.

Il processo non riceve eventi di input

  1. Verifica la connettività di ingressi e uscite. Usa il pulsante Testa connessione per ogni input e output.

  2. Esamina i dati di input:

    1. Usare il pulsante Dati di esempio per ogni input. Scarica i dati di input di esempio.

    2. Esaminare i dati di esempio per comprendere lo schema e i tipi di dati.

    3. Controllare le metriche di Hub eventi di Azure per assicurarsi che gli eventi siano inviati. Le metriche dei messaggi devono essere maggiori di zero se Hub eventi riceve messaggi.

  3. Assicurarsi di aver selezionato un intervallo di tempo nell'anteprima di input. Scegliere Seleziona intervallo di tempo e quindi immettere una durata di esempio prima di testare la query.

Importante

Per i processi di Analisi di flusso di Azure che non sono inseriti nella rete, non fate affidamento in nessun modo sull'indirizzo IP di origine delle connessioni provenienti da Stream Analytics. Possono essere indirizzi IP pubblici o privati, a seconda delle operazioni dell'infrastruttura del servizio che si verificano di tanto in tanto.

Gli eventi di input in formato non valido causano errori di deserializzazione

I problemi di deserializzazione si verificano quando il flusso di input del processo di Stream Analytics contiene messaggi non validi. Ad esempio, una parentesi mancante o una parentesi graffa in un oggetto JSON o un formato timestamp non corretto nel campo dell'ora può causare un messaggio in formato non valido.

Quando un processo di Analisi di flusso riceve un messaggio in formato non valido da un input, elimina il messaggio e invia una notifica con un avviso. Nel riquadro Inputs del processo di Analisi di flusso viene visualizzato un simbolo di avviso. Il simbolo di avviso è presente finché il processo è in esecuzione.

Screenshot che mostra il riquadro Input per Analisi di flusso di Azure.

Abilitare i log delle risorse per visualizzare i dettagli dell'errore e il messaggio (payload) che ha causato l'errore. Esistono diversi motivi per cui possono verificarsi errori di deserializzazione. Per altre informazioni sugli errori di deserializzazione specifici, vedere Errori di dati di input. Se i log delle risorse non sono abilitati, viene visualizzata una breve notifica nel portale di Azure.

Schermata che mostra una notifica di avvertimento relativa ai dettagli di input.

Se il payload del messaggio è maggiore di 32 KB o è in formato binario, eseguire il codice CheckMalformedEvents.cs disponibile nel repository degli esempi di GitHub. Questo codice legge l'offset dell'ID partizione e stampa i dati che si trovano in tale offset.

Altri motivi comuni per gli errori di deserializzazione di input includono:

  • Colonna integer con un valore maggiore di 9223372036854775807.
  • Stringhe anziché una matrice di oggetti o oggetti separati da righe. Esempio valido: [{'a':1}]. Esempio non valido: "'a' :1".
  • Un blob di acquisizione di Event Hubs in formato Avro usato come input per il processo.
  • Due colonne in un singolo evento di input che differiscono solo nel caso, ad esempio column1 e COLUMN1.

Modifiche al numero di partizioni dell'hub eventi

Quando il numero di partizioni di un hub eventi cambia durante l'esecuzione di un processo di Analisi di flusso, il processo ha esito negativo con l'errore seguente:

Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException

Per risolvere questo problema, arrestare e riavviare il processo di Analisi di flusso in modo che possa rilevare il nuovo numero di partizioni.

Il processo supera il numero massimo di ricevitori di Event Hubs

Una procedura consigliata per usare Event Hubs prevede l'uso di più gruppi di consumer per la scalabilità dei processi. Il numero di lettori nel processo di Analisi di flusso per un input specifico influisce sul numero di lettori in un singolo gruppo di consumer.

Il numero esatto di ricevitori dipende dai dettagli interni di implementazione della logica di topologia scale-out. Il numero non è esposto esternamente. Il numero di lettori può cambiare quando un processo viene avviato o aggiornato.

Il messaggio di errore seguente viene visualizzato quando il numero di ricevitori supera il valore massimo. Il messaggio contiene un elenco delle connessioni esistenti a Event Hubs all’interno di un gruppo di consumer. Il tag AzureStreamAnalytics indica che le connessioni provengono da un servizio di streaming Azure.

The streaming job failed: Stream Analytics job has validation errors: Job will exceed the maximum amount of Event Hubs Receivers.

The following information may be helpful in identifying the connected receivers: Exceeded the maximum number of allowed receivers per partition in a consumer group which is 5. List of connected receivers – 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1.

Note

Quando il numero di lettori cambia durante l'aggiornamento di un job, gli avvisi temporanei vengono registrati nei log di audit. I processi di Analisi di flusso vengono ripristinati automaticamente da questi problemi temporanei.

Per aggiungere un nuovo gruppo di consumer nell'istanza di Hub eventi, seguire questa procedura:

  1. Accedere al portale di Azure.

  2. Individua l'hub per eventi.

  3. Nell'intestazione Entità selezionare Hub eventi.

  4. Selezionare l'hub eventi in base al nome.

  5. Nella pagina Istanza di Hub eventi, sotto l'intestazione Entità, selezionare Gruppi di consumer. Viene elencato un gruppo di consumer con il nome $Default .

  6. Seleziona + Gruppo consumer per aggiungere un nuovo gruppo consumer.

    Schermata che mostra il pulsante per aggiungere un gruppo di consumer in Event Hubs.

  7. Quando hai creato l'input nel processo di Stream Analytics che punta all'hub eventi, hai specificato lì il gruppo di utilizzo. Hub eventi usa $Default se non è specificato alcun gruppo di consumer. Dopo aver creato un gruppo di consumer, modifica l'input dell'Hub eventi nel processo di Stream Analytics e specifica il nome del nuovo gruppo di consumer.

I lettori per partizione superano il limite di Event Hubs

Se la sintassi delle query di streaming fa riferimento più volte alla stessa risorsa per l'input dell'hub eventi, il motore di processi può usare più lettori per ogni query dello stesso gruppo di consumer. Quando sono presenti troppi riferimenti allo stesso gruppo di consumer, il processo può superare il limite di cinque e generare un errore. In tali circostanze, è possibile dividere ulteriormente usando più input tra più gruppi di consumer.

Gli scenari in cui il numero di lettori per partizione supera il limite di cinque di Hub eventi includono:

  • Istruzioni SELECT multiple: se si usano più istruzioni SELECT che fanno riferimento allo stesso input di Hub eventi, ogni istruzione SELECT comporta la creazione di un nuovo ricevitore.

  • UNION: Quando si utilizza UNION, è possibile avere più input che fanno riferimento allo stesso hub di eventi e allo stesso gruppo di consumer.

  • SELF JOIN: quando si usa un'operazione SELF JOIN , è possibile fare riferimento più volte allo stesso hub eventi.

Le procedure consigliate seguenti consentono di attenuare gli scenari in cui il numero di lettori per partizione supera il limite di cinque di Hub eventi.

Suddividere la query in più passaggi usando una clausola WITH

La WITH clausola specifica un set di risultati denominato temporaneo a cui può fare riferimento una FROM clausola nella query. Si definisce la clausola WITH nell'ambito di esecuzione di una singola istruzione SELECT.

Ad esempio, anziché questa query:

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

Usa questa query:

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

Assicurarsi che gli input vengano associati a gruppi di consumer diversi

Per le query in cui tre o più input sono connessi allo stesso gruppo di consumer di Hub eventi, creare gruppi di consumer separati. Questa attività richiede la creazione di input aggiuntivi di Analisi di flusso.

Creare input separati con gruppi di consumer diversi

È possibile creare input separati con gruppi di consumer diversi per lo stesso hub eventi. Nell'esempio seguente di query UNION, InputOne e InputTwo fanno riferimento alla stessa origine di Event Hubs. Qualsiasi query può avere input separati associati a gruppi di utenti diversi. La UNION query è solo un esempio.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

I lettori per partizione superano il limite previsto da hub IoT

I processi di Stream Analytics usano l'endpoint compatibile con Hub eventi integrato in hub IoT di Azure per connettersi a hub IoT e leggere gli eventi. Se i lettori per partizione superano i limiti di hub IoT, è possibile usare le soluzioni per Event Hubs per risolvere il problema. È possibile creare un gruppo di consumer per l'endpoint predefinito tramite la sessione endpoint del portale di hub IoT o tramite hub IoT SDK.

Come ottenere assistenza

Per un'ulteriore assistenza, provare la pagina Domande e risposte Microsoft per Analisi di flusso di Azure.

Passaggi successivi