Schalen met Event Hubs

Er zijn twee factoren die van invloed zijn op schalen met Event Hubs.

  • Doorvoereenheden (standard-laag) of verwerkingseenheden (Premium-laag)
  • Partities

Doorvoereenheden

De doorvoercapaciteit van Event Hubs wordt beheerd door doorvoereenheden. Doorvoereenheden zijn vooraf aangeschafte capaciteitseenheden. Met één doorvoer kunt u het volgende doen:

  • Inkomend verkeer: maximaal 1 MB per seconde of 1000 gebeurtenissen per seconde (afhankelijk van wat het eerst komt).
  • Egress: maximaal 2 MB per seconde of 4096 gebeurtenissen per seconde.

Wanneer de capaciteit van de aangekochte doorvoereenheden wordt overschreven, wordt de invoer vertraagd en een ServerBusyException afgegeven. De uitvoer geeft geen vertragingsuitzonderingen af, maar is nog steeds beperkt tot de capaciteit van de aangekochte doorvoereenheden. Als zich uitzonderingen met betrekking tot de publicatiesnelheid voordoen of als u meer uitgaande gegevens verwacht, controleert u hoeveel doorvoereenheden u hebt aangeschaft voor de naamruimte. U kunt doorvoereenheden beheren op de blade Schaal van de naamruimten in Azure Portal. U kunt doorvoereenheden ook programmatisch beheren met behulp van de Event Hubs-API's.

Doorvoereenheden worden vooraf aangeschaft en worden per uur gefactureerd. Nadat u doorvoereenheden hebt aangeschaft, worden deze voor minimaal één uur in rekening gebracht. Er kunnen maximaal 40 doorvoereenheden worden aangeschaft voor een naamruimte in Event Hubs. Deze worden gedeeld door alle event hubs in die naamruimte.

De functie voor automatisch vergroten van Event Hubs wordt automatisch omhoog geschaald door het aantal doorvoereenheden te verhogen om te voldoen aan de gebruiksbehoeften. Het verhogen van doorvoereenheden voorkomt beperkingsscenario's, waarin:

  • Gegevensinvoersnelheden overschrijden de ingestelde doorvoereenheden.
  • De aanvraagsnelheid voor uitgaande gegevens overschrijdt de ingestelde doorvoereenheden.

De Event Hubs-service verhoogt de doorvoer wanneer de belasting hoger is dan de minimumdrempel, zonder dat aanvragen mislukken met ServerBusy-fouten.

Zie Doorvoereenheden automatisch schalen voor meer informatie over de functie voor automatisch vergroten.

Verwerkingseenheden

Event Hubs Premium biedt superieure prestaties en betere isolatie met in een beheerde PaaS-omgeving met meerdere tenants. De resources in een Premium laag worden geïsoleerd op cpu- en geheugenniveau, zodat elke tenantworkload geïsoleerd wordt uitgevoerd. Deze resourcecontainer wordt een verwerkingseenheid (PU) genoemd. U kunt 1, 2, 4, 8 of 16 verwerkingseenheden aanschaffen voor elke Event Hubs Premium naamruimte.

Hoeveel u met een verwerkingseenheid kunt opnemen en streamen, is afhankelijk van verschillende factoren, zoals uw producenten, consumenten, het tarief waarmee u gegevens opneemt en verwerkt, en nog veel meer.

Event Hubs Premium naamruimte met 1 PU- en 1 Event Hub(100 partities) kunnen bijvoorbeeld ongeveer kerncapaciteit bieden van ongeveer 5-10 MB/s inkomend verkeer en 10-20 MB/uitgaand verkeer voor zowel AMQP- als Kafka-workloads.

Zie Verwerkingseenheden configureren voor meer informatie over het configureren van PU's voor een naamruimte in de Premium-laag.

Notitie

Zie Azure Event Hubs - quota en limieten voor meer informatie over quota en limieten.

Partities

Event Hubs organiseert reeksen gebeurtenissen die naar een Event Hub worden verzonden in een of meer partities. Als er nieuwere gebeurtenissen plaatsvinden, worden deze toegevoegd aan het einde van deze reeks.

Event Hubs

Een partitie kan worden beschouwd als een 'doorvoerlogboek'. Partities bevatten gebeurtenisgegevens die de hoofdtekst van de gebeurtenis bevatten, een door de gebruiker gedefinieerde eigenschapsverzameling die de gebeurtenis beschrijft, metagegevens zoals de offset in de partitie, het nummer in de stroomreeks en het tijdstempel aan de servicezijde waarop deze is geaccepteerd.

Diagram that displays the older to newer sequence of events.

Voordelen van het gebruik van partities

Event Hubs is ontworpen om te helpen bij het verwerken van grote hoeveelheden gebeurtenissen. Partitioneren draagt hier op twee manieren aan bij:

  • Hoewel Event Hubs een PaaS-service is, is er een fysieke realiteit onder en onderhoudt u een logboek waarin de volgorde van gebeurtenissen behouden blijft, is vereist dat deze gebeurtenissen samen worden gehouden in de onderliggende opslag en de bijbehorende replica's en dat resulteert in een doorvoermaximum voor een dergelijk logboek. Partitioneren maakt het mogelijk om meerdere parallelle logboeken te gebruiken voor dezelfde Event Hub en daarom de beschikbare onbewerkte IO-doorvoercapaciteit te vermenigvuldigen.
  • Uw eigen toepassingen moeten in staat zijn om het aantal gebeurtenissen dat naar een Event Hub wordt verzonden, bij te houden. Dit kan complex zijn en vereist aanzienlijke, uitgeschaalde en parallelle verwerkingscapaciteit. De capaciteit van één proces voor het afhandelen van gebeurtenissen is beperkt, dus u hebt verschillende processen nodig. Partities zijn hoe uw oplossing deze processen invoert en toch zorgt ervoor dat elke gebeurtenis een duidelijke verwerkingseigenaar heeft.

Aantal partities

Het aantal partities wordt opgegeven op het moment van het maken van een Event Hub. Het moet tussen 1 en het maximumaantal partities zijn dat is toegestaan voor elke prijscategorie. Zie dit artikel voor de limiet voor het aantal partities voor elke laag.

U wordt aangeraden ten minste zoveel partities te kiezen als verwacht dat deze vereist zijn tijdens de piekbelasting van uw toepassing voor die specifieke Event Hub. U kunt het aantal partities voor een Event Hub niet wijzigen na het maken ervan, met uitzondering van de Event Hub in een toegewezen cluster en premium-laag. Het aantal partities van een Event Hub in een toegewezen Event Hubs-cluster kan worden verhoogd nadat de Event Hub is gemaakt, maar de distributie van stromen over partities verandert als deze klaar is, omdat de toewijzing van partitiesleutels aan partities verandert. U kunt dus het beste proberen om dergelijke wijzigingen zoveel mogelijk te vermijden als de relatieve volgorde van gebeurtenissen in uw toepassing van belang is.

Het instellen van het aantal partities op de maximaal toegestane waarde is verleidelijk, maar u moet er altijd rekening mee houden dat uw gebeurtenissenstromen zo moeten worden gestructureerd dat u wel kunt profiteren van meerdere partities. Als u de volgorde van alle gebeurtenissen of voor een klein aantal substromen echt moet behouden, kunt u misschien niet profiteren van het gebruik van veel partities. Daarnaast maken veel partities de verwerkingszijde complexer.

Het maakt niet uit hoeveel partities zich in een Event Hub bevinden als het gaat om prijzen. Dit hangt af van het aantal prijseenheden (doorvoereenheden (TU's) voor de standard-laag, verwerkingseenheden (PU's) voor de Premium-laag en capaciteitseenheden (CA's) voor de toegewezen laag) voor de naamruimte of het toegewezen cluster. Een Event Hub van de standard-laag met 32 partities of met één partitie kost bijvoorbeeld exact dezelfde kosten wanneer de naamruimte is ingesteld op 1 TU-capaciteit. U kunt ook TU's of PU's schalen op uw naamruimte of CU's van uw toegewezen cluster, onafhankelijk van het aantal partities.

Als partitie is een mechanisme voor gegevensorganisatie waarmee u gegevens parallel kunt publiceren en gebruiken, raden we u aan om schaaleenheden (RU's, RU's of RU's) en partities te verdelen om optimale schaal te bereiken. Over het algemeen raden we gebruikers aan om een maximale doorvoer van 1 MB/s per partitie te behouden en het aantal partities te kiezen dat overeenkomt met de maximale doorvoer die u wilt verwerken. Als uw use-case bijvoorbeeld 20 MB/s vereist, is het raadzaam om ten minste 20 partities te kiezen om de optimale doorvoer te bereiken.

Als u echter een model hebt waarin uw toepassing een affiniteit heeft met een bepaalde partitie, is het verhogen van het aantal partities mogelijk geen voordeel voor u. Zie beschikbaarheid en consistentie voor meer informatie.

Toewijzing van gebeurtenissen aan partities

U kunt een partitiesleutel gebruiken om inkomende gebeurtenisgegevens toe te wijzen aan specifieke partities, zodat de gegevens kunnen worden geordend. De partitiesleutel is een door de afzender opgegeven waarde die aan een Event Hub wordt doorgegeven. De partitiesleutel wordt verwerkt door een statische hash-functie, die zorgt voor de partitietoewijzing. Als u bij het publiceren van een gebeurtenis geen partitiesleutel opgeeft, wordt er gebruikgemaakt van round robin-toewijzing.

De gebeurtenisuitgever is alleen op de hoogte van de partitiesleutel en niet van de partitie waarop de gebeurtenissen worden gepubliceerd. Deze ontkoppeling van sleutel en partitie schermt de afzender af, zodat deze niet te veel te weten hoeft te komen over de downstreamverwerking. Goede partitiesleutels zijn bijvoorbeeld een apparaatspecifieke of een gebruikersspecifieke identiteit, maar voor het groeperen van gerelateerde gebeurtenissen in dezelfde partitie kunnen ook andere kenmerken, zoals geografie, worden gebruikt.

Als u een partitiesleutel opgeeft, kunt u gerelateerde gebeurtenissen bijeenhouden in dezelfde partitie en in de exacte volgorde waarin ze zijn aangekomen. De partitiesleutel is een tekenreeks die is afgeleid van uw toepassingscontext en identificeert de relatie tussen de gebeurtenissen. Een reeks gebeurtenissen die wordt geïdentificeerd door een partitiesleutel is een stroom. Een partitie is een multiplex-logboekopslag voor veel van zulke stromen.

Notitie

Hoewel u gebeurtenissen rechtstreeks naar partities kunt verzenden, raden we dit niet aan, vooral wanneer hoge beschikbaarheid belangrijk voor u is. Het downgradet de beschikbaarheid van een Event Hub naar partitieniveau. Zie Beschikbaarheid en consistentie voor meer informatie.

Volgende stappen

U kunt meer informatie over Event Hubs vinden via de volgende koppelingen: