タイム スキュー ポリシー (Azure Stream Analytics)

Stream Analytics では、すべてのデータ ストリーム イベントに タイムスタンプ が関連付けられています。 ユーザーは TIMESTAMP BY キーワード (keyword)を使用して、次の 2 つの異なる時刻のいずれかを選択できます。

  • アプリケーション時間。つまり、イベントが生成される時刻 (イベントを生成するアプリケーション/デバイスによってマークされます)。 アプリケーション時間を使用する場合は、グローバル タイムラインを使用してすべてのイベントを処理するか、サブストリームを使用して独自のタイムラインを使用して各デバイス/パーティションを分析できます。
  • 到着時刻、イベントがクラウドに到達した時刻 (たとえば、IoT Hubまたは Event Hub の到着時刻)。

タイムスタンプの選択に加えて、ユーザーは次の問題が原因で、到着遅延ポリシーと注文外ポリシーを定義する必要がある場合があります。

  • イベントのプロデューサーにはクロック スキューがあります。 これは、プロデューサーが異なるマシンを使用しているため、クロックが異なる場合に一般的です。
  • ネットワーク待機時間のため、同じクロックから発生したイベントは、イベント ハブまたはIoT Hubに発生した日時とは異なる順序で到着する可能性があります
  • パーティション間のクロック スキュー。 パーティション分割されていないクエリを使用する場合、すべてのパーティションからのイベントは、ユーザーが選択したタイムスタンプによってマージされます。 パーティション間のクロック スキューにより処理が遅延する可能性があります。これは、合併が最も遅いパーティションを待機する必要があるためです。

順序に合わない入力ストリームは、次のいずれかになります。

  • 並べ替え済み (したがって 遅延)。
  • ユーザーが指定したポリシーに従って、システムによって調整された。

Stream Analytics では、アプリケーション時間で処理する場合、遅延と順序逸脱のイベントは許容されます。

Out of Order Policy

ストリーミング分析では、イベントを時間順に並べ替えるのが非常に重要です。 ただし、上記の 3 つの問題により、多くの場合、順序が誤って受信され、クエリの結果に影響を与える可能性があります。 Out of Order Policy を使用すると、定義された許容範囲内に到着したときに 、タイムスタンプによってイベントを並べ替えることができます 。 許容範囲より後に到着するイベントは、選択した設定に応じて 削除または調整されます

  • 調整: 許容される最新の時刻に届いたかのように調整されます。
  • 削除: 破棄されます。

この設定は、Azure portal (ジョブの [イベントの順序] タブ) で調整できます。 詳細については、 イベント順序に関する考慮事項に関するページを参照してください。

順序が 0 より大きい順序のポリシーを設定すると、Stream Analytics はイベントをそのウィンドウまでバッファーし、テンポラル変換を適用する前にユーザー定義のタイムスタンプを使用してそれらのイベントを並べ替えます。 一般に、最初に 3 秒のウィンドウから始めるのがベスト プラクティスです。次に、値を調整して、時間が調整されるイベントの数を減らします。 バッファリングのため、出力が同じ時間遅れるという副作用があることに注意してください。 その結果、順序の低いイベントの数を減らし、待機時間を短く保つために値を調整する必要があります。

到着遅延許容度

到着遅延許容期間は、上記のさまざまな理由により、入力ソースに到達するイベントの遅延を考慮するために使用されます。 簡単に言うと、到着遅延期間は、イベントが生成されてから、入力ソース側でイベントが受信されるまでの最大遅延です。 到着遅延許容に基づく調整が最初に実行され、誤順序に基づく調整が次に実行されます。 System.Timestamp() 列には、イベントに最後のタイムスタンプが割り当てられます。

この設定は、アプリケーション時間で処理する場合にのみ適用され、それ以外の場合は無視されます。 また、Azure portal (ジョブの [イベントの順序付け] タブ) で設定することもできます。 詳細については、 イベント順序に関する考慮事項に関するページを参照してください。

イベントが遅延すると、タイムスタンプは入力ソースの現在のエンキュー時間から到着遅延許容期間を差し引いた値に調整されます (選択したアクションに応じて破棄されます)。 同じ入力ストリームの複数のパーティションまたは複数の入力ストリームが組み合わされる場合、すべてのパーティションが新しいデータを待機する最大時間が到着遅延許容期間になります。

到着遅延許容度イベントとスパース イベント

遅延到着ポリシーを使用すると、Stream Analytics では、入力イベントがない場合に、時間を進め、より早い方法で出力を生成できます。 これは、入力イベントがスパース (または一部の Event Hub パーティションでまったく受信されない) 場合に非常に便利です。

たとえば、 select* クエリの入力イベントは 1 分ごとに 1 回生成されます。 このポリシーを使用しない場合、Stream Analytics では、イベントがすべての Event Hub パーティションに到着するまで (時間を進めるために) 出力結果を生成できません。 イベント ハブに 16 個のパーティションがあり、各イベントが異なるパーティションに配信される場合、これは 16 分を意味する可能性があります。 既定の 5 秒ポリシーでは、クロックは最初のイベントの 5 秒後に前方に移動されるため、出力イベントは最初のイベントの 5 秒後に生成されます。

参照

Time Management (Azure Stream Analytics)
System.Timestamp() (Stream Analytics)
TIMESTAMP BY (Azure Stream Analytics)
イベント順序に関する考慮事項