Dela via


Felsöka indataanslutningar

Den här artikeln beskriver vanliga problem med Azure Stream Analytics-indataanslutningar, hur du felsöker dessa problem och hur du korrigerar dem.

Många felsökningssteg kräver att du aktiverar resursloggar för ditt Stream Analytics-jobb. Om du inte har aktiverat resursloggar kan du läsa Felsöka Azure Stream Analytics med hjälp av resursloggar.

Jobbet tar inte emot indatahändelser

  1. Kontrollera anslutningen till indata och utdata. Använd knappen Test Anslut ion för varje indata och utdata.

  2. Granska dina indata:

    1. Använd knappen Exempeldata för varje indata. Ladda ned indataexempeldata.

    2. Granska exempeldata för att förstå schema- och datatyperna.

    3. Kontrollera måtten för Azure Event Hubs för att se till att händelser skickas. Meddelandemåtten bör vara större än noll om Event Hubs tar emot meddelanden.

  3. Kontrollera att du har valt ett tidsintervall i förhandsversionen av indata. Välj Välj tidsintervall och ange sedan en exempelvaraktighet innan du testar frågan.

Viktigt!

För Azure Stream Analytics-jobb som inte matas in i nätverket ska du inte förlita dig på källans IP-adress för anslutningar som kommer från Stream Analytics på något sätt. De kan vara offentliga eller privata IP-adresser, beroende på tjänstinfrastrukturåtgärder som sker då och då.

Felaktiga indatahändelser orsakar deserialiseringsfel

Deserialiseringsproblem uppstår när indataströmmen för ditt Stream Analytics-jobb innehåller felaktiga meddelanden. En parentes eller klammerparentes som saknas i ett JSON-objekt eller ett felaktigt tidsstämpelformat i tidsfältet kan till exempel orsaka ett felaktigt meddelande.

När ett Stream Analytics-jobb tar emot ett felaktigt formaterat meddelande från en indata släpper det meddelandet och meddelar dig med en varning. En varningssymbol visas på panelen Indata i Stream Analytics-jobbet. Varningssymbolen finns så länge jobbet är i ett körningstillstånd.

Screenshot that shows the Inputs tile for Azure Stream Analytics.

Aktivera resursloggar för att visa information om felet och meddelandet (nyttolasten) som orsakade felet. Det finns flera orsaker till att deserialiseringsfel kan inträffa. Mer information om specifika deserialiseringsfel finns i Indatafel. Om resursloggar inte är aktiverade visas ett kort meddelande i Azure-portalen.

Screenshot that shows a warning notification about input details.

Om meddelandets nyttolast är större än 32 KB eller är i binärt format kör du den CheckMalformedEvents.cs kod som är tillgänglig på GitHub-exempellagringsplatsen. Den här koden läser partitions-ID-förskjutningen och skriver ut data som finns i förskjutningen.

Andra vanliga orsaker till indatadeserialiseringsfel är:

  • En heltalskolumn som har ett värde som är större än 9223372036854775807.
  • Strängar i stället för en matris med objekt eller radavgränsade objekt. Giltigt exempel: *[{'a':1}]*. Ogiltigt exempel: *"'a' :1"*.
  • Använda en Event Hubs-avbildningsblob i Avro-format som indata i ditt jobb.
  • Att ha två kolumner i en enda indatahändelse som bara skiljer sig åt i fall. Exempel: *column1* och *COLUMN1*.

Ändringar i antal partitioner

Partitionsantalet för händelsehubbar kan ändras. Om partitionsantalet för en händelsehubb ändras måste du stoppa och starta om Stream Analytics-jobbet.

Följande fel visas när partitionsantalet för en händelsehubb ändras medan jobbet körs: Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException.

Jobbet överskrider det maximala antalet Event Hubs-mottagare

Bästa praxis för att använda Event Hubs är att använda flera konsumentgrupper för jobbskalbarhet. Antalet läsare i Stream Analytics-jobbet för specifika indata påverkar antalet läsare i en enskild konsumentgrupp.

Det exakta antalet mottagare baseras på intern implementeringsinformation för utskalningstopologilogik. Talet exponeras inte externt. Antalet läsare kan ändras när ett jobb startas eller uppgraderas.

Följande felmeddelande visas när antalet mottagare överskrider maxgränsen. Meddelandet innehåller en lista över befintliga anslutningar som gjorts till Event Hubs under en konsumentgrupp. Taggen AzureStreamAnalytics anger att anslutningarna kommer från en Azure-strömningstjänst.

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.

Kommentar

När antalet läsare ändras under en jobbuppgradering skrivs tillfälliga varningar till granskningsloggar. Stream Analytics-jobb återställs automatiskt från dessa tillfälliga problem.

Följ dessa steg om du vill lägga till en ny konsumentgrupp i din Event Hubs-instans:

  1. Logga in på Azure-portalen.

  2. Leta upp din händelsehubb.

  3. Under rubriken Entiteter väljer du Event Hubs.

  4. Välj händelsehubben efter namn.

  5. På sidan Event Hubs-instans går du till rubriken Entiteter och väljer Konsumentgrupper. En konsumentgrupp med namnet $Default visas.

  6. Välj + Konsumentgrupp för att lägga till en ny konsumentgrupp.

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

  7. När du skapade indata i Stream Analytics-jobbet för att peka på händelsehubben angav du konsumentgruppen där. Event Hubs använder $Default om ingen konsumentgrupp har angetts. När du har skapat en konsumentgrupp redigerar du händelsehubbens indata i Stream Analytics-jobbet och anger namnet på den nya konsumentgruppen.

Läsare per partition överskrider gränsen för Event Hubs

Om din strömmande frågesyntax refererar till samma resurs för händelsehubbens indata flera gånger kan jobbmotorn använda flera läsare per fråga från samma konsumentgrupp. När det finns för många referenser till samma konsumentgrupp kan jobbet överskrida gränsen på fem och utlösa ett fel. Under dessa omständigheter kan du dela upp ytterligare genom att använda flera indata mellan flera konsumentgrupper.

Scenarier där antalet läsare per partition överskrider gränsen för Event Hubs på fem är:

  • Flera SELECT instruktioner: Om du använder flera SELECT instruktioner som refererar till samma händelsehubbindata skapar varje SELECT instruktion en ny mottagare.

  • UNION: När du använder UNIONkan du ha flera indata som refererar till samma händelsehubb och konsumentgrupp.

  • SELF JOIN: När du använder en SELF JOIN åtgärd går det att referera till samma händelsehubb flera gånger.

Följande metodtips kan hjälpa till att minimera scenarier där antalet läsare per partition överskrider gränsen för Event Hubs på fem.

Dela upp frågan i flera steg med hjälp av en WITH-sats

Satsen WITH anger en tillfällig namngiven resultatuppsättning som en FROM sats i frågan kan referera till. Du definierar WITH satsen i körningsomfånget för en enda SELECT instruktion.

I stället för den här frågan:

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

Använder du den här frågan:

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

Se till att indata binder till olika konsumentgrupper

Skapa separata konsumentgrupper för frågor där tre eller flera indata är anslutna till samma event hubs-konsumentgrupp. Den här uppgiften kräver att ytterligare Stream Analytics-indata skapas.

Skapa separata indata med olika konsumentgrupper

Du kan skapa separata indata med olika konsumentgrupper för samma händelsehubb. I följande exempel på en UNION fråga refererar InputOne och InputTwo till samma Event Hubs-källa. Alla frågor kan ha separata indata med olika konsumentgrupper. Frågan UNION är bara ett exempel.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Läsare per partition överskrider IoT Hub-gränsen

Stream Analytics-jobb använder den inbyggda Event Hubs-kompatibla slutpunkten i Azure IoT Hub för att ansluta och läsa händelser från IoT Hub. Om läsarna per partition överskrider gränserna för IoT Hub kan du lösa problemet med hjälp av lösningarna för Event Hubs . Du kan skapa en konsumentgrupp för den inbyggda slutpunkten via IoT Hub-portalens slutpunktssession eller via IoT Hub SDK.

Få hjälp

Om du vill ha mer hjälp kan du prova microsofts Q&A-sida för Azure Stream Analytics.

Nästa steg