Konfigurace zásad řazení událostí pro Azure Stream Analytics

Tento článek popisuje, jak v Azure Stream Analytics nastavit a používat zásady pozdních příjezdů a událostí mimo pořadí. Tyto zásady se použijí jenom v případě, že v dotazu použijete klauzuli TIMESTAMP BY a použijí se jenom pro cloudové vstupní zdroje.

Čas události a čas příjezdu

Vaše úloha Stream Analytics může zpracovávat události buď podle času události, nebo podle času doručení. Čas události nebo aplikace je časové razítko, které se nachází v datové části události (při vygenerování události). Čas příjezdu je časové razítko, kdy byla událost přijata ve vstupním zdroji (Event Hubs, IoT Hub nebo Blob Storage).

Stream Analytics ve výchozím nastavení zpracovává události podle času příjezdu, ale můžete se rozhodnout zpracovávat události podle času události pomocí klauzule TIMESTAMP BY v dotazu. Zásady pro pozdní příchod a zpracování mimo pořadí se použijí pouze tehdy, pokud události zpracováváte podle času události. Při konfiguraci těchto nastavení zvažte požadavky na latenci a správnost vašeho scénáře.

Co jsou zásady pozdního přijetí?

Někdy události přicházejí pozdě z různých důvodů. Například událost, která přijde o 40 sekund zpoždění, bude mít čas události = 00:10:00 a čas příjezdu = 00:10:40. Pokud nastavíte zásadu pozdního příjezdu na 15 sekund, všechny události, které dorazí později než 15 sekund, se buď zahodí (nezpracují stream Analytics), nebo se upraví čas události. Ve výše uvedeném příkladu, protože událost dorazila se zpožděním 40 sekund (více, než stanovují zásady), bude její čas události upraven na maximální hodnotu podle zásady opožděného příchodu 00:10:25 (čas příchodu – hodnota zásady opožděného příchodu). Výchozí zásada pozdního příjezdu je 5 sekund.

Co jsou zásady mimo pořadí?

Události mohou také dorazit v nesprávném pořadí. Po úpravě času události na základě zásad pozdního příjezdu můžete také zvolit automatické vyhození nebo úpravu událostí, které jsou mimo pořadí. Pokud tuto zásadu nastavíte na 8 sekund, všechny události, které dorazí v nesprávném pořadí, ale v rámci 8sekundového okna, budou znovu seřazeny podle času události. Události, které dorazí pozdě, budou buď zahozény, nebo upraveny na maximální hodnotu podle zásady pro události mimo pořadí. Výchozí hodnota zásady pro zpracování mimo pořadí je 0 sekund.

Úprava nebo vyřazení zpožděných a zastaralých událostí

Pokud události přicházejí pozdě nebo mimo pořadí na základě nakonfigurovaných zásad, můžete tyto události buď vyřadit (nezpracovávají stream Analytics), nebo upravit čas jejich události.

Následující příklad ukazuje tyto zásady v akci.

  • Zásady pozdního příjezdu: 15 sekund
  • Zásada pro položky mimo pořadí: 5 sekund
Č. události Čas události Čas příjezdu System.Timestamp Vysvětlení
1 00:10:00 00:10:40 00:10:25 Událost přišla pozdě a mimo úroveň tolerance. Čas události se tedy upraví na maximální tolerance pozdního příjezdu.
2 00:10:30 00:10:41 00:10:30 Událost přišla pozdě, ale v rámci úrovně tolerance. Čas události se tedy neupraví.
3 00:10:42 00:10:42 00:10:42 Událost přišla včas. Není potřeba žádné úpravy.
4 00:10:38 00:10:43 00:10:38 Událost přišla mimo pořadí, ale v rámci tolerance 5 sekund. Čas události se tedy neupraví. Pro účely analýzy se tato událost považuje za předchozí číslo události 3 (s ohledem na celkový počet 5 událostí. Skutečné pořadí je: 1, 2, 5, 4, 3).
5 00:10:35 00:10:45 00:10:37 Událost dorazila mimo pořadí a mimo toleranci 5 sekund. Čas události se tedy upraví na maximální hodnotu tolerance pro události přicházející mimo pořadí.

Mohou zásady pro opožděné doručení a zpracování mimo pořadí zpozdit výstup úlohy?

Ano. Ve výchozím nastavení je zásada pro data mimo pořadí nastavena na nulu (00 minut a 00 sekund). Pokud změníte výchozí hodnotu, první výstup vaší úlohy se zpozdí touto hodnotou (nebo vyšší).

Pokud některý z oddílů vstupu nepřijímá události, můžete očekávat, že se výstup zpozdí o hodnotu zásady pro pozdní příchod. Proč, viz zprávy InputPartitionNotProgressing.

V protokolu aktivit se zobrazují zprávy LateInputEvents

Tyto zprávy se zobrazují, aby vás informovaly o tom, že události dorazily se zpožděním a podle vašeho nastavení jsou buď zahazovány, nebo upravovány. Tyto zprávy můžete ignorovat, pokud jste správně nakonfigurovali zásady pozdního příjezdu.

Tady je příklad této zprávy:

{"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"}

V protokolu aktivit se mi zobrazuje InputPartitionNotProgressing

Váš vstupní zdroj (Event Hub nebo IoT Hub) má pravděpodobně více oddílů. Azure Stream Analytics vygeneruje výstup pro časové razítko t1 teprve poté, co všechny kombinované oddíly dosáhnou alespoň času t1. Předpokládejme například, že dotaz čte z oddílu ve službě Event Hubs, která má dva oddíly. Jeden z oddílů, P1, obsahuje události až do času t1. Druhý oddíl P2 obsahuje události do doby t1 + x. Výstup se pak generuje až do času t1. Pokud je ale zadána explicitní klauzule Partition by PartitionId, obě partition postupují nezávisle.

Když se zkombinuje více oddílů ze stejného vstupního datového proudu, tolerance pozdního doručení je maximální doba, po kterou každý oddíl čeká na nová data. Pokud je v centru událostí jen jeden oddíl nebo pokud centrum IoT Hub nepřijímá vstupy, časová osa tohoto oddílu se neposouvá, dokud nedosáhne meze tolerance pozdního doručení. Tím se váš výstup zpozdí o prahovou hodnotu tolerance pozdního příchodu. V takových případech se může zobrazit následující zpráva:

{"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"}

Tato zpráva vás informuje, že alespoň jeden oddíl ve vašich vstupních datech je prázdný a zpozdí váš výstup o práh pozdního příchodu. Pokud chcete tento krok překonat, doporučujeme:

  • Ujistěte se, že všechny oddíly centra událostí nebo IoT Hub přijímají vstup.
  • V dotazu použijte klauzuli Partition by PartitionID.

Proč se mi zobrazuje zpoždění 5 sekund, i když je zásada pozdního příjezdu nastavená na 0?

K tomu dochází, když existuje vstupní oddíl, do kterého nikdy nepřišla žádná vstupní data. Můžete ověřit vstupní metriky podle oddílu, abyste toto chování ověřili.

Pokud oddíl neobsahuje žádná data po dobu delší než nakonfigurovaný práh pozdního příchodu dat, Stream Analytics posune časové razítko aplikace dopředu, jak je vysvětleno v části o aspektech řazení událostí. To vyžaduje odhadovanou dobu příjezdu. Pokud oddíl nikdy neměl žádná data, Stream Analytics odhaduje čas příjezdu jako místní čas – 5 sekund. V důsledku toho mohly partitiony, které nikdy neobsahovaly žádná data, vykazovat zpoždění watermarku 5 sekund.

Další kroky