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 gekochte eenheden van capaciteit. Met één doorvoereenheid kunt u het volgende doen:
- Inkomend verkeer: maximaal 1 MB per seconde of 1000 gebeurtenissen per seconde (afhankelijk van wat het eerst komt).
- Uitgaand verkeer: maximaal 2 MB per seconde of 4.096 gebeurtenissen per seconde.
Buiten de capaciteit van de aangeschafte doorvoereenheden wordt inkomend verkeer beperkt en Event Hubs genereert een ServerBusyException. Uitgaand verkeer produceert geen beperkingen, maar is nog steeds beperkt tot de capaciteit van de aangeschafte 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 pagina 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 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 automatisch vergroten van Event Hubs wordt automatisch opgeschaald door het aantal doorvoereenheden te verhogen om te voldoen aan de gebruiksbehoeften. Het verhogen van doorvoereenheden voorkomt beperkingsscenario's, waarin:
- Gegevensingressies overschrijden de ingestelde doorvoereenheden.
- Aanvraagsnelheden voor uitgaande gegevens overschrijden 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 binnen 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, 6, 8, 10, 12 of 16 verwerkingseenheden kopen voor elke Event Hubs Premium-naamruimte.
Hoeveel u kunt opnemen en streamen met een verwerkingseenheid, 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 één PU en één Event Hub (100 partities) kan bijvoorbeeld een kerncapaciteit bieden van ongeveer 5-10 MB/s inkomend verkeer en 10-20 MB/s 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.
Partities
Event Hubs organiseert reeksen gebeurtenissen die naar een Event Hub worden verzonden naar een of meer partities. Als er nieuwere gebeurtenissen plaatsvinden, worden deze toegevoegd aan het einde van deze reeks.
Een partitie kan worden beschouwd als een doorvoerlogboek. Partities bevatten gebeurtenisgegevens die de volgende informatie bevatten:
- Hoofdtekst van de gebeurtenis
- Door de gebruiker gedefinieerde eigenschapsverzameling die de gebeurtenis beschrijft
- Metagegevens zoals de offset in de partitie, het nummer in de stroomreeks
- Tijdstempel aan de servicezijde waarop deze is geaccepteerd
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 daaronder een fysieke realiteit. Als u een logboek onderhoudt waarin de volgorde van gebeurtenissen behouden blijft, moeten deze gebeurtenissen samen worden bewaard in de onderliggende opslag en de bijbehorende replica's. Dit resulteert in een doorvoermaximum voor een dergelijk logboek. Partitionering maakt het mogelijk om meerdere parallelle logboeken te gebruiken voor dezelfde Event Hub en daarom de beschikbare capaciteit voor onbewerkte invoer-uitvoer (IO) te vermenigvuldigen.
- Uw eigen toepassingen moeten in staat zijn om het aantal gebeurtenissen dat naar een Event Hub wordt verzonden, bij te houden. Het kan complex zijn en vereist aanzienlijke, uitgeschaalde, 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 voedt 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 één 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 u verwacht dat deze vereist zijn tijdens de piekbelasting van uw toepassing voor die specifieke Event Hub. Voor andere lagen dan de premium- en toegewezen lagen kunt u het aantal partities voor een Event Hub niet wijzigen nadat deze is gemaakt. Voor een Event Hub in een premium- of toegewezen laag kunt u het aantal partities verhogen nadat deze zijn gemaakt, maar u kunt ze niet verlagen. De distributie van streams tussen partities wordt gewijzigd wanneer deze wordt uitgevoerd als de toewijzing van partitiesleutels aan partities verandert. Probeer deze wijzigingen dus moeilijk te voorkomen 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 absolute volgordebehoud nodig hebt voor alle gebeurtenissen of slechts een handvol substreams, kunt u mogelijk niet profiteren 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 is afhankelijk van het aantal prijseenheden (doorvoereenheden (RU'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 één TU-capaciteit. U kunt ook TU's of RU's schalen op uw naamruimte of CA'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. We raden u aan om schaaleenheden (doorvoereenheden voor de standard-laag, verwerkingseenheden voor de Premium-laag of capaciteitseenheden voor de toegewezen laag) en partities te verdelen om optimale schaal te bereiken. Over het algemeen raden we een maximale doorvoer van 1 MB/s per partitie aan. Daarom is een vuistregel voor het berekenen van het aantal partities het delen van de maximale verwachte doorvoer met 1 MB/s. Als uw use-case bijvoorbeeld 20 MB/s vereist, raden we u aan ten minste 20 partities te kiezen om de optimale doorvoer te bereiken.
Als u echter een model hebt waarin uw toepassing een affiniteit met een bepaalde partitie heeft, is het verhogen van het aantal partities niet nuttig. 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. Het wordt verwerkt via een statische hashfunctie, waarmee de partitietoewijzing wordt gemaakt. 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, met name 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: