Event Hubs의 가용성 및 일관성
이 문서에서는 Azure Event Hubs에서 지원하는 가용성과 일관성에 대한 정보를 제공합니다.
가용성
Azure Event Hubs는 데이터 센터 내의 여러 장애 도메인에 걸쳐 있는 클러스터에서 전체 랙 또는 개별 머신의 치명적인 오류에 대한 위험을 분산합니다. 이는 투명한 오류 감지 및 장애 조치(failover) 메커니즘을 구현하여 서비스가 보장된 서비스 수준에서, 그리고 일반적으로 이러한 오류가 발생할 때 눈에 띄는 중단 없이 계속 작동되도록 합니다.
가용성 영역이 있는 지역에 Event Hubs 네임스페이스를 만든 경우 중단 위험은 물리적으로 분리된 세 가지 기능에 추가로 분산되며, 서비스에는 전체 기능의 완전히 치명적인 손실에 즉각적으로 대처하기에 충분한 용량이 예약되어 있습니다. 자세한 내용은 Azure Event Hubs - 지리적 재해 복구를 참조하세요.
클라이언트 애플리케이션에서 파티션을 지정하지 않고 이벤트 허브로 이벤트를 보내는 경우, 이벤트가 이벤트 허브의 파티션에 자동으로 분산됩니다. 어떤 이유로 파티션을 사용할 수 없는 경우에는 이벤트가 나머지 파티션에 분산됩니다. 이 동작을 사용하면 가동 시간을 최대화할 수 있습니다. 최대 작동 시간이 필요한 사용 사례의 경우, 특정 파티션으로 이벤트를 보내는 대신 이 모델이 선호됩니다.
일관성
일부 시나리오에서는 이벤트의 순서가 중요합니다. 예를 들어, 백 엔드 시스템에서 삭제 명령 전에 업데이트 명령을 처리하려고 할 수 있습니다. 이 시나리오에서 클라이언트 애플리케이션은 순서가 유지되도록 특정 파티션으로 이벤트를 보냅니다. 소비자 애플리케이션은 파티션에서 이러한 이벤트를 사용할 때 순서대로 읽습니다.
이 구성에서는 전송하는 특정 파티션을 사용할 수 없는 경우 오류 응답이 수신된다는 점을 염두에 두어야 합니다. 이에 비해 단일 파티션에 대한 선호도가 없는 경우 Event Hubs 서비스는 사용 가능한 다음 파티션에 이벤트를 보냅니다.
따라서 고가용성이 가장 중요한 경우 파티션 특정 파티션을 대상으로 지정하지 마세요(파티션 ID/키 사용). 파티션 ID/키를 사용하여 이벤트 허브의 가용성을 파티션 수준으로 다운그레이드합니다. 이 시나리오에서는 가용성(파티션 ID/키 없음) 및 일관성(이벤트를 특정 파티션에 고정) 중에서 하나를 명시적으로 선택합니다. Event Hubs의 파티션에 대한 자세한 내용은 파티션을 참조하세요.
부록
파티션을 지정하지 않고 이벤트 보내기
Event Hubs 서비스에서 파티션 간에 로드를 분산할 수 있도록 파티션 정보를 설정하지 않고 이벤트 허브에 이벤트를 전송하는 것이 좋습니다. 다른 프로그래밍 언어에서 이 작업을 수행하는 방법에 대해 알아보려면 다음의 빠른 시작을 참조하세요.
특정 파티션에 이벤트 보내기
이 섹션에서는 다양한 프로그래밍 언어를 사용하여 특정 파티션에 이벤트를 보내는 방법에 대해 알아봅니다.
특정 파티션에 이벤트를 보내려면 CreateBatchOptions에서 PartitionId
또는 PartitionKey
을(를) 지정하여 EventHubProducerClient.CreateBatchAsync 메서드를 사용해 일괄 처리를 만듭니다. 다음 코드에서는 파티션 키를 지정하여 이벤트 일괄 처리를 특정 파티션으로 보냅니다. Event Hubs는 파티션 키 값을 공유하는 모든 이벤트가 함께 저장되고 도착 순서대로 배달되도록 합니다.
var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);
또한 SendEventOptions에서 PartitionId 또는 PartitionKey를 지정하여 EventHubProducerClient.SendAsync 메서드를 사용할 수 있습니다.
var sendEventOptions = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)
다음 단계
Event Hubs에 대한 자세한 내용은 다음 링크를 참조하세요.