다음을 통해 공유


.NET용 Azure Storage Blob 변경 피드 클라이언트 라이브러리 - 버전 12.0.0-preview.33

서버 버전: 2021-02-12, 2020-12-06, 2020-10-02, 2020-08-04, 2020-06-12 2020-04-08, 2020-02-10 및 2019-12-12

변경 피드는 스토리지 계정의 Blob 및 Blob 메타데이터에 발생하는 모든 변경 내용에 대한 트랜잭션 로그를 제공하기 위한 것입니다. 변경 피드는 이러한 변경 내용에 대해 순서가 지정되고, 보장되며, 내구성이 있고, 변경할 수 없는, 읽기 전용 로그를 제공합니다. 클라이언트 애플리케이션은 언제든지 이러한 로그를 읽을 수 있습니다. 변경 피드를 사용하면 Blob Storage 계정에서 발생하는 변경 이벤트를 저렴한 비용으로 처리하는 효율적이고 확장 가능한 솔루션을 빌드할 수 있습니다.

소스 코드 | 패키지(NuGet) | 제품 설명서

시작

패키지 설치

NuGet을 사용하여 .NET용 Azure Storage Blob 클라이언트 라이브러리를 설치합니다.

dotnet add package Azure.Storage.Blobs.ChangeFeed --prerelease

필수 구성 요소

이 패키지를 사용하려면 Azure 구독스토리지 계정이 필요합니다.

새 Storage 계정을 만들려면 Azure Portal, Azure PowerShell 또는 Azure CLI를 사용할 수 있습니다. 다음은 Azure CLI 사용 예입니다.

az storage account create --name MyStorageAccount --resource-group MyResourceGroup --location westus --sku Standard_LRS

클라이언트 인증

인증은 Azure.Storage.Blob에서와 동일하게 작동합니다.

주요 개념

변경 피드는 표준 Blob 가격 책정 비용으로 스토리지 계정의 특수 컨테이너에 Blob으로 저장됩니다. 요구 사항에 따라 이러한 파일의 보존 기간을 제어할 수 있습니다(현재 릴리스의 조건 참조). 변경 이벤트는 Apache Avro 형식 사양의 레코드로 변경 피드에 추가됩니다. 이 형식은 인라인 스키마를 사용하여 풍부한 데이터 구조를 제공하는 간단하고 빠른 이진 형식입니다. 이 형식은 Hadoop 에코시스템, Stream Analytics 및 Azure Data Factory에서 널리 사용됩니다.

이러한 로그를 증분 또는 전체로 처리할 수 있습니다. 많은 클라이언트 애플리케이션에서 자체의 고유한 속도로 변경 피드를 독립적으로 병렬로 읽을 수 있습니다. Apache Drill 또는 Apache Spark와 같은 분석 애플리케이션은 로그를 Avro 파일로 직접 사용할 수 있으므로 사용자 지정 애플리케이션을 작성하지 않고도 높은 대역폭을 사용하여 저렴한 비용으로 로그를 처리할 수 있습니다.

스레드로부터의 안전성

모든 클라이언트 instance 메서드가 스레드로부터 안전하고 서로 독립적임을 보장합니다(지침). 이렇게 하면 스레드 간에도 클라이언트 인스턴스를 다시 사용하는 것이 항상 안전합니다.

추가 개념

클라이언트 옵션 | 응답 | 에 액세스 장기 실행 작업 | 오류 | 처리 진단 | 조롱 | 클라이언트 수명

예제

변경 피드의 모든 이벤트 가져오기

// Get all the events in the change feed.
List<BlobChangeFeedEvent> changeFeedEvents = new List<BlobChangeFeedEvent>();
await foreach (BlobChangeFeedEvent changeFeedEvent in changeFeedClient.GetChangesAsync())
{
    changeFeedEvents.Add(changeFeedEvent);
}

시작 시간과 종료 시간 사이의 이벤트 가져오기

// Create the start and end time.  The change feed client will round start time down to
// the nearest hour, and round endTime up to the next hour if you provide DateTimeOffsets
// with minutes and seconds.
DateTimeOffset startTime = new DateTimeOffset(2017, 3, 2, 15, 0, 0, TimeSpan.Zero);
DateTimeOffset endTime = new DateTimeOffset(2020, 10, 7, 2, 0, 0, TimeSpan.Zero);

// You can also provide just a start or end time.
await foreach (BlobChangeFeedEvent changeFeedEvent in changeFeedClient.GetChangesAsync(
    start: startTime,
    end: endTime))
{
    changeFeedEvents.Add(changeFeedEvent);
}

continuationToken을 사용하여 다시 시작

string continuationToken = null;
await foreach (Page<BlobChangeFeedEvent> page in changeFeedClient.GetChangesAsync().AsPages(pageSizeHint: 10))
{
    foreach (BlobChangeFeedEvent changeFeedEvent in page.Values)
    {
        changeFeedEvents.Add(changeFeedEvent);
    }

    // Get the change feed continuation token.  The continuation token is not required to get each page of events,
    // it is intended to be saved and used to resume iterating at a later date.
    continuationToken = page.ContinuationToken;
    break;
}

// Resume iterating from the pervious position with the continuation token.
await foreach (BlobChangeFeedEvent changeFeedEvent in changeFeedClient.GetChangesAsync(
    continuationToken: continuationToken))
{
    changeFeedEvents.Add(changeFeedEvent);
}

문제 해결

모든 Blob 서비스 작업은 실패한 ErrorCode경우 RequestFailedException을 유용한 s로 throw합니다. 이러한 오류의 대부분은 복구할 수 있습니다.

다음 단계

변경 피드 샘플 시작:

  1. 헬로 월드: 스토리지 계정에서 발생한 변경 내용 가져오기(또는 비동기식)
  2. 인증: 연결 문자열, 공용 액세스, 공유 키, 공유 액세스 서명 및 Azure Active Directory를 사용하여 인증합니다.

참여

이 라이브러리의 빌드, 테스트 및 기여에 대한 자세한 내용은 스토리지 CONTRIBUTING.md 참조하세요.

이 프로젝트에 대한 기여와 제안을 환영합니다. 대부분의 경우 기여하려면 권한을 부여하며 실제로 기여를 사용할 권한을 당사에 부여한다고 선언하는 CLA(기여자 라이선스 계약)에 동의해야 합니다. 자세한 내용은 cla.microsoft.com.

이 프로젝트에는 Microsoft Open Source Code of Conduct(Microsoft 오픈 소스 준수 사항)가 적용됩니다. 자세한 내용은 Code of Conduct FAQ(규정 FAQ)를 참조하세요. 또는 추가 질문이나 의견은 opencode@microsoft.com으로 문의하세요.