イベント配信の保証 (Azure Stream Analytics)

Azure Stream Analytics クエリ言語は、SQL 構文を拡張して、イベントのストリームに対する複雑な計算を可能にします。 Stream Analytics では、イベント配信に関連するいくつかの概念について説明する価値があります。

  • 1 回だけ処理する
  • 厳密に 1 回の配信
  • 重複するレコード

以下で詳しく説明するこれらの概念に加えて、データ損失が発生しないようにジョブ の開始オプション を検討することが重要です。

正確に 1 回の処理

正確に 1 回の処理保証は、入力のセットを指定すると、システムは常に同じ結果を返します。 これは繰り返し性のために非常に重要であり、ジョブの再起動の場合でも、または同じ入力で並列で実行されている複数のジョブに適用されます。 Azure Stream Analytics では、1 回の処理が保証されます。

正確に 1 回の配信

正確に 1 回限りの配信保証は、正確に 1 回の処理からのすべての出力が出力シンクに正確に 1 回配信されるため、重複する出力がないことを意味します。 そのためには、出力アダプターのトランザクション機能を実現する必要があります。

Azure Stream Analytics では、出力シンクへの少なくとも 1 回の配信が保証されます。これにより、すべての結果が出力されますが、重複した結果が発生する可能性があります。 ただし、Azure Cosmos DB や Azure SQL などの複数の出力を使用して、正確に 1 回限り配信を実現できます。

重複するレコード

少なくとも 1 回の配信保証により、Stream Analytics ジョブが実行されている場合、出力データに重複するレコードが見られる場合があります。 これらの重複するレコードは、Azure Stream Analytics 出力アダプターが出力イベントをトランザクションで書き込まないためです。 この "重複レコード" シナリオは、次のいずれかの条件が発生した場合に発生する可能性があります。

  • ジョブの実行中に Azure インスタンスがアップグレードされる
  • Stream Analytics ジョブがアップグレードされるか、ジョブ出力への接続または信頼性に関する問題が発生する
  • ジョブを実行している Azure インスタンスが停止している
  • Stream Analytics ジョブは、 [最後に停止されたとき ] オプションを使用して開始されます

出力イベントのダウンストリーム コンシューマーは、イベントの論理 ID を使用してイベントをデデュースする必要があります。 たとえば、タンブリング ウィンドウ内のグループ別にイベントを集計する場合、イベントの論理 ID はグループとタンブリング ウィンドウの終了時刻です。 パススルー クエリを実行している場合は、重複除去するためにイベントに一意の ID を保持する必要がある場合があります。

Azure Stream Analytics を使用した正確な 1 回の配信をサポートする出力

Azure Cosmos DB

Azure Cosmos DB を使用すると、Azure Stream Analytics によって 1 回だけ配信が保証されます。 Azure Stream Analytics では upsert が使用されるため、ユーザーがアクションを実行する必要はありません。 Azure Cosmos DB への Azure Stream Analytics 出力の詳細を参照してください。

SQL

SQL 出力を使用する場合、次の要件が満たされている場合、ユーザーは 1 回だけ配信を実現できます。

  • すべての出力ストリーミング イベントには自然なキーがあります。つまり、フィールドまたはフィールドの組み合わせによって一意に識別されます。
  • 出力 SQL テーブルには、出力イベントの自然キーを使用して作成された一意の制約 (または主キー) があります。

SQL 出力では、一意の制約違反を引き起こすイベントをスキップすることで、テーブルに配置された制約が優先されるため、重複を回避するのに十分です。

Azure テーブル

Azure Storage テーブル内のすべてのエンティティは、 フィールドと PartitionKey フィールドのRowKey連結によって一意に識別されます。 Azure Stream Analytics ではエンティティがアップサートされるため、テーブル エンティティの値は、対応する RowKey/PartitionKey 組み合わせの最新の出力イベントになります。 したがって、1 回だけ配信を実現するには、各出力イベントに一意 RowKey/PartitionKey の組み合わせがあることを確認します。 この操作を行うと、重複するイベントによって以前のバージョンが上書きされます。 (エンティティの最終変更時刻であるシステム定義 Timestamp フィールドは、この場合も変更されます)。

参照

時間管理