Eseményrendezési szabályzatok konfigurálása az Azure Stream Analyticshez

Ez a cikk bemutatja, hogyan állíthatja be és használhatja a késői érkezési és a rendelésen kívüli eseményszabályzatokat az Azure Stream Analyticsben. Ezek a szabályzatok csak akkor lesznek alkalmazva, ha a lekérdezésben a TIMESTAMP BY záradékot használja, és csak a felhőbeli bemeneti forrásokra lesznek alkalmazva.

Esemény időpontja és érkezési idő

A Stream Analytics-feladat eseményidő vagy érkezési idő alapján is feldolgozhatja az eseményeket. Az esemény/alkalmazás ideje az esemény hasznos adataiban (az esemény létrehozásakor) jelen lévő időbélyeg. Az érkezési idő az az időbélyeg, amikor az esemény a bemeneti forrásnál (Event Hubs/IoT Hub/Blob Storage) érkezett.

A Stream Analytics alapértelmezés szerint az érkezési idő szerint dolgozza fel az eseményeket, de a lekérdezés TIMESTAMP BY záradékával beállíthatja, hogy eseményidő szerint dolgozza fel az eseményeket. Késői érkezési és rendelésen kívüli szabályzatok csak akkor alkalmazhatók, ha eseményeket dolgoz fel eseményidő szerint. Mindig vegye figyelembe a forgatókönyv késésre és helyes sorrendre vonatkozó követelményeit ezen beállítások konfigurálásakor.

Mi a kései érkezésre vonatkozó szabályzat?

Néha az események különböző okok miatt késve érkeznek. Például egy 40 másodperccel később érkező esemény eseményideje = 00:10:00 és érkezési idő = 00:10:40 lesz. Ha a késői érkezési szabályzatot 15 másodpercre állítja be, a 15 másodpercnél később érkező eseményeket a rendszer elveti (a Stream Analytics nem dolgozza fel), vagy módosítja az esemény időpontját. A fenti példában, mivel az esemény 40 másodperc késésben érkezett (a szabályzatkészletnél több), az eseményideje a késői érkezési szabályzat 00:10:25-ös maximális értékéhez lesz igazítva (érkezési idő – késői érkezési szabályzat értéke). Az alapértelmezett késői érkezési szabályzat 5 másodperc.

Mi az a rendelésen kívüli szabályzat?

Előfordulhat, hogy az esemény a rendelésen kívülre is érkezik. Az eseményidő késői érkezési szabályzat alapján történő módosítása után dönthet úgy is, hogy automatikusan elveti vagy módosítja a rendelésen kívüli eseményeket. Ha ezt a szabályzatot 8 másodpercre állítja be, a sorrendből, de a 8 másodperces ablakban érkező eseményeket eseményidő szerint rendezi újra a rendszer. A később érkező eseményeket a rendszer elveti vagy a rendelésen kívüli szabályzat maximális értékére módosítja. Az alapértelmezett rendelésen kívüli szabályzat 0 másodperc.

Események módosítása vagy elvetése

Ha az események a konfigurált szabályzatok alapján későn vagy sorrenden kívül érkeznek, elvetheti az ilyen eseményeket (amelyeket a Stream Analytics nem dolgoz fel), vagy módosíthatja az események időpontját.

Lássunk egy példát ezekre a szabályzatokra működés közben.
Késői érkezési szabályzat: 15 másodperc
Rendelésen kívüli szabályzat: 5 másodperc

Eseményszám Esemény időpontja Érkezési idő System.Timestamp Magyarázat
1 00:10:00 00:10:40 00:10:25 Az esemény késői és külső tűrésszinten érkezett. Az eseményidő így a maximális késői érkezési tűréshatárhoz lesz igazítva.
2 00:10:30 00:10:41 00:10:30 Az esemény késve érkezett, de a tolerancia szintjén belül. Az eseményidő tehát nem módosul.
3 00:10:42 00:10:42 00:10:42 Az esemény időben érkezett. Nincs szükség módosításra.
4 00:10:38 00:10:43 00:10:38 Az esemény rendelésen kívülre érkezett, de 5 másodperces tűréshatáron belül. Az eseményidő tehát nem módosul. Elemzési célokból ezt az eseményt a 3. számú előző eseménynek tekintjük (az összesen 5 esemény figyelembe vételével). A tényleges sorrend: 1, 2, 5, 4, 3).
5 00:10:35 00:10:45 00:10:37 Az esemény sorrenden kívül és 5 másodperces külső tűréshatáron kívül érkezett. Az eseményidő tehát a rendelésen kívüli tolerancia maximális értékére van beállítva.

Ezek a beállítások késleltethetik a feladat kimenetét?

Igen. Alapértelmezés szerint a rendelésen kívüli szabályzat értéke nulla (00 perc és 00 másodperc). Ha módosítja az alapértelmezett értéket, a feladat első kimenetét ez az érték késlelteti (vagy nagyobb).

Ha a bemenetek egyik partíciója nem fogad eseményeket, a kimenetet a késői érkezési szabályzat értéke késlelteti. A hiba okának megismeréséhez olvassa el az alábbi InputPartition hibaszakaszt.

LateInputEvents üzenetek jelennek meg a tevékenységnaplóban

Ezek az üzenetek arról tájékoztatják, hogy az események késve érkeztek, és a konfigurációnak megfelelően elvetik vagy módosítják őket. Ezeket az üzeneteket figyelmen kívül hagyhatja, ha megfelelően konfigurálta a késői érkezési szabályzatot.

Példa erre az üzenetre:
{"message Time":"2019-02-04 17:11:52Z","error":null, "message":"First Occurred: 02/04/2019 17:11:48 | Resource Name: ASAjob | Message: Source 'ASAjob' had 24 data errors of kind 'LateInputEvent' between processing times '2019-02-04T17:10:49.7250696Z' and '2019-02-04T17:11:48.7563961Z'. Input event with application timestamp '2019-02-04T17:05:51.6050000' and arrival time '2019-02-04T17:10:44.3090000' was sent later than configured tolerance.","type":"DiagnosticMessage","correlation ID":"aaaa0000-bb11-2222-33cc-444444dddddd"}

Az InputPartitionNotProgressing a tevékenységnaplóban jelenik meg

A bemeneti forrás (Event Hub/IoT Hub) valószínűleg több partícióval rendelkezik. Az Azure Stream Analytics csak akkor állítja elő a t1 időbélyeg kimenetét, ha az összes egyesített partíció legalább t1 időpontban van. Tegyük fel például, hogy a lekérdezés egy olyan eseményközpont-partícióról olvas be, amely két partícióval rendelkezik. Az egyik partíció, a P1 t1 időpontig eseményekkel rendelkezik. A másik partíció, a P2 t1 + x időpontig rendelkezik eseményekkel. A kimenet ezután a t1 időpontig lesz létrehozva. Ha azonban explicit partition by PartitionId záradék van, mindkét partíció egymástól függetlenül halad.

Ha ugyanabból a bemeneti adatfolyamból több partíciót kombinál, a késői érkezési tűrés az az idő, amelyet minden partíció az új adatokra vár. Ha egy partíció található az eseményközpontban, vagy ha az IoT Hub nem fogad bemeneteket, a partíció idővonala nem halad előre, amíg el nem éri a késői érkezési tűréshatárt. Ez késlelteti a kimenetet a késői érkezési tolerancia küszöbértékével. Ilyen esetekben a következő üzenet jelenhet meg:
{"message Time":"2/3/2019 8:54:16 PM UTC","message":"Input Partition [2] does not have additional data for more than [5] minute(s). Partition will not progress until either events arrive or late arrival threshold is met.","type":"InputPartitionNotProgressing","correlation ID":"0000000000-0000-0000-0000-00000000000000"}

Ez az üzenet arról tájékoztatja, hogy a bemenet legalább egy partíciója üres, és késlelteti a kimenetet a késői érkezési küszöbérték szerint. Ennek leküzdése érdekében a következőket javasoljuk:

  1. Győződjön meg arról, hogy az Event Hub/IoT Hub összes partíciója fogad bemenetet.
  2. Használja a Partition by PartitionID záradékot a lekérdezésben.

Miért látok 5 másodperces késést akkor is, ha a késői érkezési szabályzatom 0-ra van állítva?

Ez akkor fordul elő, ha egy bemeneti partíció soha nem kapott bemenetet. A viselkedés ellenőrzéséhez partíciónként ellenőrizheti a bemeneti metrikákat.

Ha egy partíció nem rendelkezik a konfigurált késői érkezési küszöbértéknél nagyobb adatokkal, a Stream Analytics előrelépteti az alkalmazás időbélyegét az eseményrendezési szempontok szakaszában leírtak szerint. Ehhez becsült érkezési idő szükséges. Ha a partíció soha nem rendelkezett adatokkal, a Stream Analytics a helyi idő – 5 másodperc – érkezési időt becsüli meg. Emiatt az adatokkal nem rendelkező partíciók 5 másodperces vízjel-késleltetést mutathatnak.

Következő lépések