次の方法で共有


イベント配信の保証

✅ Azure Stream Analytics

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

  • 正確に1回だけの処理
  • 配信が 1 回だけ
  • Duplicate records

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

Exactly-once processing

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

Exactly-once delivery

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

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

Duplicate records

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

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

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

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

Azure Cosmos DB

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

SQL

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

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

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

Azure Table

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

See Also

Time Management