Problemen met invoerverbindingen oplossen

In dit artikel worden veelvoorkomende problemen met invoerverbindingen van Azure Stream Analytics beschreven, hoe u deze problemen kunt oplossen en hoe u deze kunt corrigeren.

Voor veel stappen voor probleemoplossing moet u resourcelogboeken inschakelen voor uw Stream Analytics-taak. Als u geen resourcelogboeken hebt ingeschakeld, raadpleegt u Problemen met Azure Stream Analytics oplossen met behulp van resourcelogboeken.

Taak ontvangt geen invoerevenementen

  1. Controleer uw connectiviteit met invoer en uitvoer. Gebruik de knop Test Verbinding maken ion voor elke invoer en uitvoer.

  2. Controleer uw invoergegevens:

    1. Gebruik de knop Voorbeeldgegevens voor elke invoer. Download de voorbeeldgegevens van de invoer.

    2. Inspecteer de voorbeeldgegevens om inzicht te hebben in het schema en de gegevenstypen.

    3. Controleer metrische gegevens van Azure Event Hubs om ervoor te zorgen dat gebeurtenissen worden verzonden. Metrische berichtgegevens moeten groter zijn dan nul als Event Hubs berichten ontvangt.

  3. Zorg ervoor dat u een tijdsbereik hebt geselecteerd in het invoervoorbeeld. Kies Tijdsbereik selecteren en voer een voorbeeldduur in voordat u de query test.

Belangrijk

Voor Azure Stream Analytics-taken die niet in het netwerk zijn opgenomen, vertrouwt u niet op het bron-IP-adres van verbindingen die afkomstig zijn van Stream Analytics. Dit kunnen openbare of privé-IP-adressen zijn, afhankelijk van service-infrastructuurbewerkingen die van tijd tot tijd plaatsvinden.

Onjuiste invoergebeurtenissen veroorzaken deserialisatiefouten

Deserialisatieproblemen treden op wanneer de invoerstroom van uw Stream Analytics-taak ongeldige berichten bevat. Een ontbrekend haakje of accolade in een JSON-object of een onjuiste tijdstempelnotatie in het tijdveld kan bijvoorbeeld leiden tot een onjuist opgemaakt bericht.

Wanneer een Stream Analytics-taak een onjuist ingedeeld bericht van een invoer ontvangt, wordt het bericht verwijderd en wordt u gewaarschuwd met een waarschuwing. Er wordt een waarschuwingssymbool weergegeven op de tegel Invoer van uw Stream Analytics-taak. Het waarschuwingssymbool bestaat zolang de taak actief is.

Screenshot that shows the Inputs tile for Azure Stream Analytics.

Schakel resourcelogboeken in om de details van de fout en het bericht (nettolading) te bekijken dat de fout heeft veroorzaakt. Er zijn meerdere redenen waarom deserialisatiefouten kunnen optreden. Zie Invoergegevensfouten voor meer informatie over specifieke deserialisatiefouten. Als resourcelogboeken niet zijn ingeschakeld, wordt er een korte melding weergegeven in Azure Portal.

Screenshot that shows a warning notification about input details.

Als de nettolading van het bericht groter is dan 32 kB of een binaire indeling heeft, voert u de CheckMalformedEvents.cs code uit die beschikbaar is in de opslagplaats met GitHub-voorbeelden. Met deze code wordt de partitie-id-offset gelezen en worden de gegevens in die offset afgedrukt.

Andere veelvoorkomende redenen voor invoerdeserialisatiefouten zijn:

  • Een kolom met een geheel getal met een waarde die groter is dan 9223372036854775807.
  • Tekenreeksen in plaats van een matrix met objecten of door lijnen gescheiden objecten. Geldig voorbeeld: *[{'a':1}]*. Ongeldig voorbeeld: *"'a' :1"*.
  • Met behulp van een Event Hubs-capture-blob in Avro-indeling als invoer in uw taak.
  • Twee kolommen in één invoergebeurtenis hebben die alleen verschillen in het geval. Voorbeeld: *column1* en *COLUMN1*.

Wijzigingen in het aantal partities

Het aantal partities van Event Hubs kan worden gewijzigd. Als het aantal partities van een Event Hub wordt gewijzigd, moet u de Stream Analytics-taak stoppen en opnieuw starten.

De volgende fout wordt weergegeven wanneer het aantal partities van een Event Hub wordt gewijzigd terwijl de taak wordt uitgevoerd: Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException.

Taak overschrijdt het maximum aantal Event Hubs-ontvangers

Een aanbevolen procedure voor het gebruik van Event Hubs is het gebruik van meerdere consumentengroepen voor schaalbaarheid van taken. Het aantal lezers in de Stream Analytics-taak voor een specifieke invoer is van invloed op het aantal lezers in één consumentengroep.

Het exacte aantal ontvangers is gebaseerd op interne implementatiedetails voor de uitschaaltopologielogica. Het getal wordt niet extern weergegeven. Het aantal lezers kan wijzigen wanneer een taak wordt gestart of bijgewerkt.

Het volgende foutbericht wordt weergegeven wanneer het aantal ontvangers het maximum overschrijdt. Het bericht bevat een lijst met bestaande verbindingen die zijn gemaakt met Event Hubs onder een consumentengroep. De tag AzureStreamAnalytics geeft aan dat de verbindingen afkomstig zijn van een Azure-streamingservice.

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_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1.

Notitie

Wanneer het aantal lezers tijdens een taakupgrade verandert, worden tijdelijke waarschuwingen naar auditlogboeken geschreven. Stream Analytics-taken herstellen automatisch van deze tijdelijke problemen.

Voer de volgende stappen uit om een nieuwe consumentengroep toe te voegen aan uw Event Hubs-exemplaar:

  1. Meld u aan bij het Azure-portaal.

  2. Zoek uw Event Hub.

  3. Selecteer Event Hubs onder de kop Entiteiten.

  4. Selecteer de Event Hub op naam.

  5. Selecteer op de pagina Event Hubs Instance onder de kop Entiteiten de optie Consumentengroepen. Er wordt een consumentengroep met de naam $Default weergegeven.

  6. Selecteer + Consumentengroep om een nieuwe consumentengroep toe te voegen.

    Screenshot that shows the button for adding a consumer group in Event Hubs.

  7. Wanneer u de invoer in de Stream Analytics-taak hebt gemaakt om naar de Event Hub te verwijzen, hebt u daar de consumentengroep opgegeven. Event Hubs gebruikt $Default als er geen consumentengroep is opgegeven. Nadat u een consumentengroep hebt gemaakt, bewerkt u de Event Hub-invoer in de Stream Analytics-taak en geeft u de naam van de nieuwe consumentengroep op.

Lezers per partitie overschrijden de Limiet voor Event Hubs

Als de syntaxis van uw streamingquery meerdere keren verwijst naar dezelfde resource voor Event Hub-invoer, kan de taakengine meerdere lezers per query uit dezelfde consumentengroep gebruiken. Wanneer er te veel verwijzingen naar dezelfde consumentengroep zijn, kan de taak de limiet van vijf overschrijden en een fout veroorzaken. In deze omstandigheden kunt u verder delen door meerdere invoer in meerdere consumentengroepen te gebruiken.

Scenario's waarin het aantal lezers per partitie de limiet van de Event Hubs van vijf overschrijdt, zijn:

  • Meerdere SELECT instructies: Als u meerdere SELECT instructies gebruikt die verwijzen naar dezelfde Event Hub-invoer, zorgt elke SELECT instructie ervoor dat er een nieuwe ontvanger wordt gemaakt.

  • UNION: Wanneer u gebruiktUNION, is het mogelijk om meerdere invoerwaarden te hebben die verwijzen naar dezelfdeEvent Hub en consumentengroep.

  • SELF JOIN: Wanneer u een SELF JOIN bewerking gebruikt, is het mogelijk om meerdere keren naar dezelfde Event Hub te verwijzen.

Met de volgende aanbevolen procedures kunt u scenario's beperken waarin het aantal lezers per partitie de Limiet van vijf Event Hubs overschrijdt.

Splits uw query in meerdere stappen met behulp van een WITH-component

De WITH component geeft een tijdelijke benoemde resultatenset op waarnaar een FROM component in de query kan verwijzen. U definieert de WITH component in het uitvoeringsbereik van één SELECT instructie.

Bijvoorbeeld, in plaats van deze query:

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

Gebruikt u deze query:

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

Zorg ervoor dat invoer wordt gebonden aan verschillende consumentengroepen

Voor query's waarin drie of meer invoergegevens zijn verbonden met dezelfde Event Hubs-consumentengroep, maakt u afzonderlijke consumentengroepen. Voor deze taak is het maken van extra Stream Analytics-invoer vereist.

Afzonderlijke invoer maken met verschillende consumentengroepen

U kunt afzonderlijke invoer maken met verschillende consumentengroepen voor dezelfde Event Hub. In het volgende voorbeeld van een UNION query verwijzen InputOne en InputTwo naar dezelfde Event Hubs-bron. Elke query kan afzonderlijke invoer hebben met verschillende consumentengroepen. De UNION query is slechts één voorbeeld.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Lezers per partitie overschrijden de IoT Hub-limiet

Stream Analytics-taken maken gebruik van het ingebouwde Event Hubs-compatibele eindpunt in Azure IoT Hub om verbinding te maken met gebeurtenissen en gebeurtenissen uit IoT Hub te lezen. Als uw lezers per partitie de limieten van IoT Hub overschrijden, kunt u de oplossingen voor Event Hubs gebruiken om dit op te lossen. U kunt een consumentengroep voor het ingebouwde eindpunt maken via de eindpuntsessie van de IoT Hub-portal of via de IoT Hub SDK.

Hulp vragen

Probeer de Microsoft Q&A-pagina voor Azure Stream Analytics voor meer hulp.

Volgende stappen