이벤트 배달 보장(Azure Stream Analytics)

Azure Stream Analytics 쿼리 언어는 SQL 구문을 확장하여 이벤트 스트림을 통해 복잡한 계산을 사용하도록 설정합니다. Stream Analytics를 사용하면 이벤트 배달과 관련된 몇 가지 개념에 대해 논의할 가치가 있습니다.

  • 정확히 한 번 처리
  • 정확히 한 번만 배달
  • 중복 레코드

아래에 자세히 설명된 이러한 개념 외에도 데이터 손실이 발생하지 않도록 작업의 시작 옵션을 고려하는 것이 중요합니다.

정확히 한 번 처리

정확히 한 번 처리 보장은 입력 집합을 지정하면 시스템이 항상 동일한 결과를 반환한다는 것을 의미합니다. 이는 반복성에 매우 중요하며 작업을 다시 시작할 때나 동일한 입력에서 병렬로 실행되는 여러 작업에 적용됩니다. Azure Stream Analytics는 정확히 한 번 처리를 보장합니다.

정확히 한 번 배달

정확히 한 번 배달 보장은 정확히 한 번 처리의 모든 출력이 출력 싱크에 정확히 한 번 전달되므로 중복 출력이 없음을 의미합니다. 이를 위해서는 출력 어댑터에 대한 트랜잭션 기능이 필요합니다.

Azure Stream Analytics는 출력 싱크에 한 번 이상 배달되도록 보장하므로 모든 결과가 출력되지만 중복 결과가 발생할 수 있습니다. 그러나 정확히 한 번 배달은 Azure Cosmos DB 또는 Azure SQL 같은 여러 출력으로 달성될 수 있습니다.

중복 레코드

한 번 이상의 배달 보장으로 인해 Stream Analytics 작업이 실행 중일 때 출력 데이터에서 중복 레코드가 가끔 발견될 수 있습니다. 이러한 중복 레코드는 Azure Stream Analytics 출력 어댑터가 출력 이벤트를 트랜잭션으로 작성하지 않기 때문에 예상됩니다. 이 '중복 레코드' 시나리오는 다음 조건 중 하나가 발생하는 경우 발생할 수 있습니다.

  • 작업이 실행되는 동안 Azure instance 업그레이드됩니다.
  • Stream Analytics 작업이 업그레이드되었거나 작업 출력에 대한 연결 또는 안정성으로 문제가 발생합니다.
  • 작업을 실행하는 Azure instance 중단이 발생했습니다.
  • Stream Analytics 작업은 마지막으로 중지된 경우 옵션으로 시작됩니다.

출력 이벤트의 다운스트림 소비자는 이벤트의 논리적 ID를 사용하여 이벤트를 중복 제거해야 합니다. 예를 들어 연속 창에서 그룹별로 이벤트를 집계하는 경우 이벤트의 논리적 ID는 그룹 및 연속 창의 종료 시간입니다. 통과 쿼리를 실행하는 경우 중복 제거를 위해 이벤트에 고유한 ID를 전달해야 할 수 있습니다.

Azure Stream Analytics를 사용하여 정확히 한 번 배달을 지원하는 출력

Azure Cosmos DB

Azure Cosmos DB를 사용하여 Azure Stream Analytics는 정확히 한 번 배달을 보장합니다. Azure Stream Analytics는 upsert를 사용하므로 사용자가 아무 작업도 필요하지 않습니다. Azure Cosmos DB에 대한 Azure Stream Analytics 출력에 대한 자세한 내용을 참조하세요.

SQL

SQL 출력을 사용하는 경우 사용자는 다음 요구 사항이 충족되는 경우 정확히 한 번 배달할 수 있습니다.

  • 모든 출력 스트리밍 이벤트에는 자연 키가 있습니다. 즉, 필드 또는 필드 조합으로 고유하게 식별할 수 있습니다.
  • 출력 SQL 테이블에는 출력 이벤트의 자연 키를 사용하여 만든 고유 제약 조건(또는 기본 키)이 있습니다.

SQL 출력은 고유한 제약 조건 위반을 일으키는 이벤트를 건너뛰어 테이블에 배치된 제약 조건을 적용하므로 중복을 방지하기에 충분합니다.

Azure Table

Azure Storage 테이블의 모든 엔터티는 및 PartitionKey 필드의 RowKey 연결로 고유하게 식별됩니다. Azure Stream Analytics는 엔터티를 upsert하므로 테이블 엔터티의 값은 해당 RowKey/PartitionKey 조합이 포함된 최신 출력 이벤트가 됩니다. 따라서 정확히 한 번 배달하려면 각 출력 이벤트에 고유한 RowKey/PartitionKey 조합이 있는지 확인합니다. 이 작업을 수행하면 중복 이벤트가 이전 버전을 덮어씁 수 있습니다. (이 경우 엔터티에 대해 마지막으로 수정된 시간인 시스템 정의 Timestamp 필드가 계속 변경됩니다.)

참고 항목

시간 관리