Ridimensionamento con hub eventiScaling with Event Hubs

Esistono due fattori che influenzano la scalabilità con hub eventi.There are two factors which influence scaling with Event Hubs.

  • Unità elaborateThroughput units
  • PartizioniPartitions

Unità elaborateThroughput units

La capacità di velocità effettiva di hub eventi è controllata dalle unità di velocità effettiva.The throughput capacity of Event Hubs is controlled by throughput units. Le unità elaborate sono unità di capacità pre-acquistate.Throughput units are pre-purchased units of capacity. Una singola velocità effettiva consente di:A single throughput lets you:

  • Dati in ingresso: fino a 1 MB al secondo o 1000 eventi al secondo, qualunque valore venga raggiunto per primo.Ingress: Up to 1 MB per second or 1000 events per second (whichever comes first).
  • Dati in uscita: fino a 2 MB al secondo o 4096 eventi al secondo.Egress: Up to 2 MB per second or 4096 events per second.

Oltre la capacità delle unità elaborate acquistate, i dati in ingresso vengono limitati e viene restituito un valore ServerBusyException.Beyond the capacity of the purchased throughput units, ingress is throttled and a ServerBusyException is returned. I dati in uscita non producono eccezioni di limitazione, ma sono ancora limitati alla capacità delle unità elaborate acquistate.Egress does not produce throttling exceptions, but is still limited to the capacity of the purchased throughput units. Se si ricevono eccezioni di velocità di pubblicazione o sono previste uscite maggiori, controllare il numero di unità elaborate acquistate per lo spazio dei nomi.If you receive publishing rate exceptions or are expecting to see higher egress, be sure to check how many throughput units you have purchased for the namespace. È possibile gestire le unità elaborate nel pannello Ridimensionamento dello spazio dei nomi nel portale di Azure.You can manage throughput units on the Scale blade of the namespaces in the Azure portal. È anche possibile gestire le unità elaborate a livello di programmazione usando le API degli hub eventi.You can also manage throughput units programmatically using the Event Hubs APIs.

Le unità sono pre-acquistate e vengono fatturate su base oraria.Throughput units are pre-purchased and are billed per hour. Una volta acquistate, le unità elaborate vengono fatturate per un minimo di un'ora.Once purchased, throughput units are billed for a minimum of one hour. È possibile acquistare fino a 20 unità elaborate per uno spazio dei nomi di Hub eventi, che vengono condivise in tutti gli hub eventi nello spazio dei nomi.Up to 20 throughput units can be purchased for an Event Hubs namespace and are shared across all event hubs in that namespace.

La funzionalità Aumento automatico di Hub eventi aumenta automaticamente le prestazioni aumentando il numero di unità elaborate per soddisfare le esigenze di utilizzo.The Auto-inflate feature of Event Hubs automatically scales up by increasing the number of throughput units, to meet usage needs. L'aumento delle unità elaborate previene scenari di limitazione in cui:Increasing throughput units prevents throttling scenarios, in which:

  • Le velocità di ingresso dei dati superano le unità elaborate impostate.Data ingress rates exceed set throughput units.
  • Le velocità di richiesta dei dati in uscita superano le unità elaborate impostate.Data egress request rates exceed set throughput units.

Il servizio Hub eventi aumenta la velocità effettiva quando il carico supera la soglia minima, senza che le richieste abbiano esito negativo con errori ServerBusy.The Event Hubs service increases the throughput when load increases beyond the minimum threshold, without any requests failing with ServerBusy errors.

Per altre informazioni sulla funzionalità di aumento automatico, vedere ridimensionare automaticamente le unità di velocità effettiva.For more information about the auto-inflate feature, see Automatically scale throughput units.

PartizioniPartitions

Hub eventi organizza le sequenze di eventi in una o più partizioni.Event Hub organizes sequences of events into one or more partitions. Man mano che arrivano, i nuovi eventi vengono aggiunti alla fine di questa sequenza.As newer events arrive, they're added to the end of this sequence. Una partizione può essere considerata come "registro commit".A partition can be thought of as a "commit log."

Le partizioni contengono dati dell'evento come il corpo dell'evento, un contenitore di proprietà definite dall'utente con la descrizione dell'evento e i metadati, ad esempio l'offset nella partizione, il relativo numero nella sequenza di flusso e il timestamp lato servizio in cui è stato accettato.Partitions hold event data containing the body of the event, a user-defined property bag describing the event, and metadata such as its offset in the partition, its number in the stream sequence, and the service-side timestamp at which it was accepted.

Diagramma che visualizza la sequenza di eventi dai meno recenti ai più recenti.

Hub eventi è progettato per semplificare l'elaborazione di volumi elevati di eventi e il partizionamento contribuisce a questo scopo in due modi:Event Hubs is designed to help with processing of large volumes of events, and partitioning helps with that in two ways:

Per prima cosa, anche se Hub eventi è un servizio PaaS, esiste una realtà fisica sottostante e per mantenere un log che preservi l'ordine degli eventi è necessario che questi eventi vengano tenuti insieme nell'archiviazione sottostante e nelle relative repliche e che il risultato sia un limite di velocità effettiva per tale log.First, even though Event Hubs is a PaaS service, there's a physical reality underneath, and maintaining a log that preserves the order of events requires that these events are being kept together in the underlying storage and its replicas and that results in a throughput ceiling for such a log. Il partizionamento consente di usare più log paralleli per lo stesso hub eventi, moltiplicando così la capacità di velocità effettiva di I/O non elaborata disponibile.Partitioning allows for multiple parallel logs to be used for the same Event Hub and therefore multiplying the available raw IO throughput capacity.

In secondo luogo, le applicazioni devono essere in grado di tenere il passo con l'elaborazione del volume di eventi inviati a un hub eventi.Second, your own applications must be able to keep up with processing the volume of events that are being sent into an Event Hub. Questa operazione può essere complessa e richiede una capacità di elaborazione parallela sostanziale e scale-out.It may be complex and requires substantial, scaled-out, parallel processing capacity. La logica per le partizioni è uguale a quella descritta sopra: la capacità di un singolo processo di gestire gli eventi è limitata, pertanto sono necessari diversi processi e le partizioni rappresentano il modo in cui la soluzione invia tali processi, garantendo tuttavia che ogni evento abbia un proprietario di elaborazione ben definito.The rationale for partitions is the same as above: The capacity of a single process to handle events is limited, and therefore you need several processes, and partitions are how your solution feeds those processes and yet ensures that each event has a clear processing owner.

Hub eventi mantiene gli eventi per un periodo di conservazione configurato che viene applicato a tutte le partizioni.Event Hubs retains events for a configured retention time that applies across all partitions. Gli eventi vengono rimossi automaticamente al raggiungimento del periodo di conservazione.Events are automatically removed when the retention period has been reached. Se si specifica un periodo di conservazione di un giorno, l'evento diventerà non disponibile esattamente 24 ore dopo che è stato accettato.If you specify a retention period of one day, the event will become unavailable exactly 24 hours after it has been accepted. Non è possibile eliminare in modo esplicito gli eventi.You cannot explicitly delete events.

Il periodo di conservazione massimo consentito è di 7 giorni per Hub eventi Standard e di 90 giorni per Hub eventi Dedicato.The allowed retention time is up to 7 days for Event Hubs Standard and up to 90 days for Event Hubs Dedicated. Se è necessario archiviare gli eventi oltre il periodo di conservazione consentito, è possibile memorizzarli automaticamente in Archiviazione di Azure o in Azure Data Lake attivando la funzionalità di acquisizione di hub eventi e, se è necessario eseguire ricerche o analisi in tali archivi profondi, è possibile importarli facilmente in Azure Synapse o in altri archivi e piattaforme di analisi simili.If you need to archive events beyond the allowed retention period, you can have them automatically stored in Azure Storage or Azure Data Lake by turning on the Event Hubs Capture feature, and if you need to search or analyze such deep archives, you can easily import them into Azure Synapse or other similar stores and analytics platforms.

Il motivo del limite temporale di Hub eventi per la conservazione dei dati è di impedire che volumi elevati di dati cronologici dei clienti vengano intrappolati in un archivio profondo che viene indicizzato solo in base a timestamp e consente solo l'accesso sequenziale.The reason for Event Hubs' limit on data retention based on time is to prevent large volumes of historic customer data getting trapped in a deep store that is only indexed by a timestamp and only allows for sequential access. La filosofia alla base dell'architettura è che i dati cronologici richiedono un'indicizzazione più avanzata e un accesso più diretto rispetto all'interfaccia eventi in tempo reale fornita da Hub eventi o Kafka.The architectural philosophy here is that historic data needs richer indexing and more direct access than the real-time eventing interface that Event Hubs or Kafka provide. I motori dei flussi di eventi non sono particolarmente adatti per l'uso come data lake o come archivi a lungo termine per l'origine eventi.Event stream engines are not well suited to play the role of data lakes or long-term archives for event sourcing.

Poiché le partizioni sono indipendenti e contengono una sequenza specifica di dati, presentano spesso velocità di crescita diverse.Because partitions are independent and contain their own sequence of data, they often grow at different rates. In Hub eventi, questo non è un problema che richiede un intervento amministrativo come sarebbe, ad esempio, in Apache Kafka, ma la distribuzione non uniforme comporterà un carico non uniforme sui processori di eventi downstream.In Event Hubs, that is no concern that requires administrative intervention as it would be, for instance, in Apache Kafka, but uneven distribution will lead to uneven load on your downstream event processors.

Hub eventi

In Hub eventi Standard il numero di partizioni viene specificato in fase di creazione e deve essere compreso tra 1 e 32.The number of partitions is specified at creation and must be between 1 and 32 in Event Hubs Standard. In Hub eventi Dedicato il numero di partizioni può essere composto da un massimo di 2000 partizioni per unità di capacità.The partition count can be up to 2000 partitions per Capacity Unit in Event Hubs Dedicated.

È consigliabile scegliere almeno il numero di partizioni che si prevede siano necessarie in unità elaborate sostenute durante il picco del carico dell'applicazione per uno specifico hub eventi.We recommend that you choose at least as many partitions as you expect to require in sustained throughput units (TU) during the peak load of your application for that particular Event Hub. È necessario eseguire il calcolo con una singola partizione con una capacità di unità elaborate pari a 1 (1 MByte in ingresso, 2 MByte in uscita).You should calculate with a single partition having a throughput capacity of 1 TU (1 MByte in, 2 MByte out). È possibile dimensionare le unità elaborate nello spazio dei nomi o le unità di capacità del cluster indipendentemente dal numero di partizioni.You can scale the TUs on your namespace or the capacity units of your cluster independent of the partition count. Un hub eventi con 32 partizioni e uno con una partizione comportano esattamente lo stesso costo se lo spazio dei nomi è impostato su una capacità di 1 unità elaborata.An Event Hub with 32 partitions or an Event Hub with 1 partition incur the exact same cost when the namespace is set to 1 TU capacity.

Le applicazioni controllano il mapping degli eventi alle partizioni in uno dei tre modi seguenti:Applications control the mapping of events to partitions in one of three ways:

  • Specificando la chiave di partizione, mappata in modo coerente (usando una funzione hash) a una delle partizioni disponibili.By specifying partition key, which is consistently mapped (using a hash function) to one of the available partitions.
  • Non specificando una chiave di partizione, il che consente al broker di scegliere in modo casuale una partizione per un determinato evento.By not specifying a partition key, which enables to broker to randomly choose a partition for a given event.
  • Inviando esplicitamente gli eventi a una partizione specifica.By explicitly sending events to a specific partition.

La specifica di una chiave di partizione consente di mantenere insieme gli eventi correlati nella stessa partizione e nell'ordine esatto in cui sono stati inviati.Specifying a partition key enables keeping related events together in the same partition and in the exact order in which they were sent. La chiave di partizione è una stringa derivata dal contesto dell'applicazione che identifica l'interrelazione degli eventi.The partition key is some string that is derived from your application context and identifies the interrelationship of the events.

Una sequenza di eventi identificata da una chiave di partizione è un flusso.A sequence of events identified by a partition key is a stream. Una partizione è un archivio di log multiplex per molti flussi di questo tipo.A partition is a multiplexed log store for many such streams.

Il numero di partizioni relativo a un hub eventi in un cluster di Hub eventi dedicato può essere aumentato dopo la creazione dell'hub eventi, ma in tal caso la distribuzione dei flussi tra le partizioni cambierà perché il mapping delle chiavi di partizione alle partizioni cambia, di conseguenza è consigliabile provare a evitare tali modifiche se l'ordine relativo degli eventi è importante nell'applicazione.The partition count for an event hub in a dedicated Event Hubs cluster can be increased after the event hub has been created, but the distribution of streams across partitions will change when it's done as the mapping of partition keys to partitions changes, so you should try hard to avoid such changes if the relative order of events matters in your application.

Si potrebbe essere tentati di impostare il numero di partizioni sul valore massimo consentito, ma tenere sempre presente che i flussi di eventi devono essere strutturati in modo da consentire di usufruire di più partizioni.Setting the number of partitions to the maximum permitted value is tempting, but always keep in mind that your event streams need to be structured such that you can indeed take advantage of multiple partitions. Se è necessario preservare l'ordine assoluto in tutti gli eventi o solo in pochi sottoflussi, è possibile che non si riesca a sfruttare molte partizioni.If you need absolute order preservation across all events or only a handful of substreams, you may not be able to take advantage of many partitions. Inoltre, molte partizioni rendono l'elaborazione più complessa.Also, many partitions make the processing side more complex.

Anche se è possibile, non è consigliabile inviare eventi direttamente alle partizioni.While partitions can be sent to directly, it's not recommended. È invece possibile usare i costrutti più generici introdotti nella sezione Autori di eventi.Instead, you can use higher level constructs introduced in the Event publishers section.

Per altre informazioni sulle partizioni e il necessario equilibrio tra disponibilità e affidabilità, vedere la Guida alla programmazione di Hub eventi e l'articolo Disponibilità e coerenza nell'Hub eventi.For more information about partitions and the trade-off between availability and reliability, see the Event Hubs programming guide and the Availability and consistency in Event Hubs article.

Chiave di partizionePartition key

È possibile usare una chiave di partizione per mappare i dati dell'evento in ingresso in partizioni specifiche ai fini dell'organizzazione dei dati.You can use a partition key to map incoming event data into specific partitions for the purpose of data organization. La chiave di partizione è un valore fornito dal mittente che viene passato a un hub eventi.The partition key is a sender-supplied value passed into an event hub. Viene elaborato tramite una funzione di hashing statica, che crea l'assegnazione di partizione.It is processed through a static hashing function, which creates the partition assignment. Se non si specifica una chiave di partizione quando si pubblica un evento, viene usata un'assegnazione round robin.If you don't specify a partition key when publishing an event, a round-robin assignment is used.

L'autore di eventi è a conoscenza solo della chiave di partizione, non la partizione in cui gli eventi vengono pubblicati.The event publisher is only aware of its partition key, not the partition to which the events are published. Questa separazione tra chiave e partizione evita che il mittente debba conoscere troppe informazioni sull'elaborazione downstream.This decoupling of key and partition insulates the sender from needing to know too much about the downstream processing. Un’identità univoca per dispositivo o utente crea una chiave di partizione efficace, ma è possibile utilizzare anche altri attributi, ad esempio l’area geografica, per raggruppare gli eventi correlati in un'unica partizione.A per-device or user unique identity makes a good partition key, but other attributes such as geography can also be used to group related events into a single partition.

Passaggi successiviNext steps

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti:You can learn more about Event Hubs by visiting the following links: