Beschikbaarheid en consistentie in Event Hubs
Dit artikel bevat informatie over beschikbaarheid en consistentie die worden ondersteund door Azure Event Hubs.
Beschikbaarheid
Azure Event Hubs het risico op catastrofale fouten van afzonderlijke machines of zelfs volledige racks verspreidt over clusters die meerdere foutdomeinen binnen een datacenter omvatten. Het implementeert transparante mechanismen voor foutdetectie en failover, zodat de service blijft werken binnen de gegarandeerde serviceniveaus en meestal zonder merkbare onderbrekingen wanneer dergelijke fouten optreden.
Als een Event Hubs-naamruimte wordt gemaakt in een regio met beschikbaarheidszones, wordt het storingsrisico verder verspreid over drie fysiek gescheiden faciliteiten en heeft de service voldoende capaciteitsreserves om direct het volledige, catastrofale verlies van de hele faciliteit op te vangen. Zie Azure Event Hubs - Herstel na geo-noodgeval voor meer informatie.
Wanneer een clienttoepassing gebeurtenissen naar een Event Hub verzendt zonder een partitie op te geven, worden gebeurtenissen automatisch verdeeld over partities in uw Event Hub. Als een partitie om een of andere reden niet beschikbaar is, worden gebeurtenissen verdeeld over de resterende partities. Dit gedrag zorgt voor de grootste hoeveelheid up-time. Voor gebruiksvoorbeelden waarvoor de maximale up-time is vereist, heeft dit model de voorkeur in plaats van gebeurtenissen naar een specifieke partitie te verzenden.
Consistentie
In sommige scenario's kan de volgorde van gebeurtenissen belangrijk zijn. U wilt bijvoorbeeld dat uw back-endsysteem een bijwerkopdracht verwerkt vóór een verwijderopdracht. In dit scenario verzendt een clienttoepassing gebeurtenissen naar een specifieke partitie, zodat de volgorde behouden blijft. Wanneer een consumententoepassing deze gebeurtenissen van de partitie verbruikt, worden ze op volgorde gelezen.
Houd er bij deze configuratie rekening mee dat als de specifieke partitie waarnaar u verzendt niet beschikbaar is, u een foutbericht ontvangt. Ter vergelijking: als u geen affiniteit hebt met één partitie, verzendt de Event Hubs-service uw gebeurtenis naar de volgende beschikbare partitie.
Als hoge beschikbaarheid het belangrijkst is, moet u zich daarom niet richten op een specifieke partitie (met behulp van partitie-id/sleutel). Met behulp van partitie-id/sleutel downgradet u de beschikbaarheid van een Event Hub naar partitieniveau. In dit scenario maakt u een expliciete keuze tussen beschikbaarheid (geen partitie-id/sleutel) en consistentie (gebeurtenissen vastmaken aan een specifieke partitie). Zie Partities voor gedetailleerde informatie over partities in Event Hubs.
Bijlage
Gebeurtenissen verzenden zonder een partitie op te geven
We raden u aan gebeurtenissen naar een Event Hub te verzenden zonder partitiegegevens in te stellen, zodat de Event Hubs-service de taak over partities kan verdelen. Bekijk de volgende quickstarts voor meer informatie over hoe u dit doet in verschillende programmeertalen.
- Gebeurtenissen verzenden met behulp van .NET
- Gebeurtenissen verzenden met Java
- Gebeurtenissen verzenden met JavaScript
- Gebeurtenissen verzenden met behulp van Python
Gebeurtenissen verzenden naar een specifieke partitie
In deze sectie leert u hoe u gebeurtenissen naar een specifieke partitie verzendt met behulp van verschillende programmeertalen.
Als u gebeurtenissen naar een specifieke partitie wilt verzenden, maakt u de batch met behulp van de methode EventHubProducerClient.CreateBatchAsync door de PartitionId
of op PartitionKey
te geven in CreateBatchOptions. Met de volgende code wordt een batch gebeurtenissen naar een specifieke partitie verzonden door een partitiesleutel op te geven. Event Hubs zorgt ervoor dat alle gebeurtenissen die een partitiesleutelwaarde delen, samen worden opgeslagen en op volgorde van aankomst worden geleverd.
var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);
U kunt ook de methode EventHubProducerClient.SendAsync gebruiken door PartitionId of PartitionKey op te geven in SendEventOptions.
var sendEventOptions = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)
Volgende stappen
U kunt meer informatie over Event Hubs vinden via de volgende koppelingen: