.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합니다. 이러한 오류의 대부분은 복구할 수 있습니다.
다음 단계
변경 피드 샘플 시작:
- 헬로 월드: 스토리지 계정에서 발생한 변경 내용 가져오기(또는 비동기식)
- 인증: 연결 문자열, 공용 액세스, 공유 키, 공유 액세스 서명 및 Azure Active Directory를 사용하여 인증합니다.
참여
이 라이브러리의 빌드, 테스트 및 기여에 대한 자세한 내용은 스토리지 CONTRIBUTING.md 참조하세요.
이 프로젝트에 대한 기여와 제안을 환영합니다. 대부분의 경우 기여하려면 권한을 부여하며 실제로 기여를 사용할 권한을 당사에 부여한다고 선언하는 CLA(기여자 라이선스 계약)에 동의해야 합니다. 자세한 내용은 cla.microsoft.com.
이 프로젝트에는 Microsoft Open Source Code of Conduct(Microsoft 오픈 소스 준수 사항)가 적용됩니다. 자세한 내용은 Code of Conduct FAQ(규정 FAQ)를 참조하세요. 또는 추가 질문이나 의견은 opencode@microsoft.com으로 문의하세요.