Availability and consistency in Event Hubs (Dostępność i spójność w usłudze Event Hubs)
Ten artykuł zawiera informacje o dostępności i spójności obsługiwanej przez usługę Azure Event Hubs.
Dostępność
Usługa Azure Event Hubs rozprzestrzenia ryzyko katastroficznych awarii poszczególnych maszyn, a nawet kompletnych stojaków w klastrach obejmujących wiele domen awarii w centrum danych. Implementuje ona przezroczyste mechanizmy wykrywania błędów i trybu failover, takie jak, że usługa będzie nadal działać w ramach zapewnianych poziomów usług i zwykle bez zauważalnych przerw w działaniu w przypadku wystąpienia takich awarii.
Jeśli przestrzeń nazw usługi Event Hubs zostanie utworzona w regionie ze strefami dostępności, ryzyko awarii jest dodatkowo rozłożone na trzy fizycznie oddzielone obiekty, a usługa ma wystarczającą ilość rezerw pojemności, aby natychmiast poradzić sobie z pełną, katastrofalną utratą całego obiektu. Aby uzyskać więcej informacji, zobacz Azure Event Hubs — odzyskiwanie po awarii geograficznej.
Gdy aplikacja kliencka wysyła zdarzenia do centrum zdarzeń bez określania partycji, zdarzenia są automatycznie dystrybuowane między partycjami w centrum zdarzeń. Jeśli partycja nie jest dostępna z jakiegoś powodu, zdarzenia są dystrybuowane między pozostałe partycje. To zachowanie pozwala na największą ilość czasu. W przypadku przypadków użycia, które wymagają maksymalnego czasu pracy, ten model jest preferowany zamiast wysyłania zdarzeń do określonej partycji.
Spójność
W niektórych scenariuszach kolejność zdarzeń może być ważna. Na przykład system zaplecza może chcieć przetworzyć polecenie aktualizacji przed poleceniem usuwania. W tym scenariuszu aplikacja kliencka wysyła zdarzenia do określonej partycji, aby kolejność została zachowana. Gdy aplikacja odbiorcy korzysta z tych zdarzeń z partycji, są one odczytywane w kolejności.
Mając tę konfigurację, należy pamiętać, że jeśli określona partycja, do której wysyłasz, jest niedostępna, otrzymasz odpowiedź o błędzie. W przypadku porównania, jeśli nie masz koligacji z jedną partycją, usługa Event Hubs wysyła zdarzenie do następnej dostępnej partycji.
W związku z tym, jeśli wysoka dostępność jest najważniejsza, nie należy kierować określonej partycji (przy użyciu identyfikatora partycji/klucza). Użycie identyfikatora partycji/klucza obniża dostępność centrum zdarzeń na poziomie partycji. W tym scenariuszu dokonujesz jawnego wyboru między dostępnością (bez identyfikatora partycji/klucza) i spójnością (przypinanie zdarzeń do określonej partycji). Aby uzyskać szczegółowe informacje o partycjach w usłudze Event Hubs, zobacz Partitions (Partycje).
Dodatek
Wysyłanie zdarzeń bez określania partycji
Zalecamy wysyłanie zdarzeń do centrum zdarzeń bez ustawiania informacji o partycji, aby umożliwić usłudze Event Hubs równoważenie obciążenia między partycjami. Zapoznaj się z poniższymi przewodnikami Szybki start, aby dowiedzieć się, jak to zrobić w różnych językach programowania.
- Wysyłanie zdarzeń przy użyciu platformy .NET
- Wysyłanie zdarzeń przy użyciu języka Java
- Wysyłanie zdarzeń przy użyciu języka JavaScript
- Wysyłanie zdarzeń przy użyciu języka Python
Wysyłanie zdarzeń do określonej partycji
W tej sekcji dowiesz się, jak wysyłać zdarzenia do określonej partycji przy użyciu różnych języków programowania.
Aby wysyłać zdarzenia do określonej partycji, utwórz partię przy użyciu metody EventHubProducerClient.CreateBatchAsync, określając PartitionId
element lub PartitionKey
w obszarze CreateBatchOptions. Poniższy kod wysyła partię zdarzeń do określonej partycji, określając klucz partycji. Usługa Event Hubs zapewnia, że wszystkie zdarzenia współużytkujące wartość klucza partycji są przechowywane razem i dostarczane w kolejności przyjazdu.
var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);
Możesz również użyć metody EventHubProducerClient.SendAsync, określając wartość PartitionId lub PartitionKey w eleme SendEventOptions.
var sendEventOptions = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)
Następne kroki
Następujące linki pozwalają dowiedzieć się więcej na temat usługi Event Hubs: