Beschikbaarheid en consistentie in Event Hubs
Dit artikel bevat informatie over beschikbaarheid en consistentie die wordt ondersteund door Azure Event Hubs.
Beschikbaarheid
Azure Event Hubs verspreidt het risico op onherstelbare fouten van afzonderlijke machines of zelfs volledige racks in clusters die meerdere foutdomeinen binnen een datacenter omvatten. Er worden transparante foutdetectie- en failovermechanismen geïmplementeerd, zodat de service blijft werken binnen de verzekerde serviceniveaus en doorgaans zonder merkbare onderbrekingen wanneer dergelijke fouten optreden.
Als er een Event Hubs-naamruimte wordt gemaakt in een regio met beschikbaarheidszones, wordt het risico van storing verder verdeeld over drie fysiek gescheiden faciliteiten en heeft de service voldoende capaciteitsreserves om direct te kunnen omgaan met het volledige, catastrofale verlies van de hele faciliteit. 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 maakt de grootste hoeveelheid tijd mogelijk. Voor gebruiksscenario's waarvoor de maximale tijd 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 updateopdracht vóór een verwijderopdracht verwerkt. In dit scenario verzendt een clienttoepassing gebeurtenissen naar een specifieke partitie, zodat de volgorde behouden blijft. Wanneer een consumententoepassing deze gebeurtenissen uit de partitie verbruikt, worden ze op volgorde gelezen.
Houd er met deze configuratie rekening mee dat als de specifieke partitie waarnaar u verzendt niet beschikbaar is, er een foutbericht wordt weergegeven. Als u geen affiniteit met één partitie hebt, verzendt de Event Hubs-service uw gebeurtenis naar de volgende beschikbare partitie als vergelijkingspunt.
Als hoge beschikbaarheid het belangrijkst is, richt u zich daarom niet 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
Het is raadzaam gebeurtenissen naar een Event Hub te verzenden zonder partitiegegevens in te stellen zodat de Event Hubs-service de belasting over partities kan verdelen. Zie de volgende quickstarts voor meer informatie over hoe u dit doet in verschillende programmeertalen.
- Gebeurtenissen verzenden met .NET
- Gebeurtenissen verzenden met Java
- Gebeurtenissen verzenden met JavaScript
- Gebeurtenissen verzenden met 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 de PartitionKey
in CreateBatchOptions op te geven. 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 geleverd op volgorde van aankomst.
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, sendEventOptions)
Volgende stappen
U kunt meer informatie over Event Hubs vinden via de volgende koppelingen: