Funzionalità e terminologia di Hub eventi di AzureFeatures and terminology in Azure Event Hubs

Hub eventi di Azure è una servizio di elaborazione degli eventi scalabile che inserisce ed elabora grandi volumi di eventi e dati, con bassa latenza e affidabilità elevata.Azure Event Hubs is a scalable event processing service that ingests and processes large volumes of events and data, with low latency and high reliability. Vedere Che cos'è Hub eventi? per una panoramica generale.See What is Event Hubs? for a high-level overview.

Questo articolo si basa sulle informazioni presenti nella panoramica e contiene dettagli tecnici e informazioni sull'implementazione relativi ai componenti e alle funzionalità di Hub eventi.This article builds on the information in the overview article, and provides technical and implementation details about Event Hubs components and features.

Suggerimento

Il supporto del protocollo per client Apache Kafka (versioni >= 1,0) fornisce endpoint di rete che consentono alle applicazioni compilate di usare Apache Kafka con qualsiasi client per l'uso di hub eventi.The protocol support for Apache Kafka clients (versions >=1.0) provides network endpoints that enable applications built to use Apache Kafka with any client to use Event Hubs. La maggior parte delle applicazioni Kafka esistenti può semplicemente essere riconfigurata in modo che punti a uno spazio dei nomi dell'hub eventi invece che a un server bootstrap del cluster Kafka.Most existing Kafka applications can simply be reconfigured to point to an Event Hub namespace instead of a Kafka cluster bootstrap server.

Dal punto di vista dei costi, dello sforzo operativo e dell'affidabilità, Hub eventi di Azure è un'ottima alternativa alla distribuzione e alla gestione dei propri cluster Kafka e Zookeeper e alle offerte Kafka come servizio non native in Azure.From the perspective of cost, operational effort, and reliability, Azure Event Hubs is a great alternative to deploying and operating your own Kafka and Zookeeper clusters and to Kafka-as-a-Service offerings not native to Azure.

Oltre a ottenere le stesse funzionalità di base di Apache Kafka broker, è anche possibile accedere alle funzionalità dell'hub eventi di Azure, ad esempio l'invio automatico di batch e l'archiviazione tramite l' acquisizione di hub eventi, la scalabilità e il bilanciamento automatici, il ripristino di emergenza, il supporto per la zona di disponibilità indipendente dai costi, l'integrazione di rete flessibile e sicura e il supporto per più protocolli, inclusoIn addition to getting the same core functionality as of the Apache Kafka broker, you also get access to Azure Event Hub features like automatic batching and archiving via Event Hubs Capture, automatic scaling and balancing, disaster recovery, cost-neutral availability zone support, flexible and secure network integration, and multi-protocol support including the firewall-friendly AMQP-over-WebSockets protocol.

Spazio dei nomiNamespace

Uno spazio dei nomi di hub eventi fornisce endpoint di rete integrati DNS e una gamma di funzionalità di controllo di accesso e di gestione dell'integrazione di rete, ad esempio il filtro IP, l' endpoint del servizio di rete virtualee il collegamento privato ed è il contenitore di gestione per una di più istanze di hub eventi (o argomenti, nel gergo Kafka).An Event Hubs namespace provides DNS integrated network endpoints and a range of access control and network integration management features such as IP filtering, virtual network service endpoint, and Private Link and is the management container for one of multiple Event Hub instances (or topics, in Kafka parlance).

Autori di eventiEvent publishers

Qualsiasi entità che invia dati a un hub eventi è un autore di eventi (usato in genere con il Producer di eventi).Any entity that sends data to an Event Hub is an event publisher (synonymously used with event producer). Gli autori di eventi possono pubblicare eventi usando HTTPS o AMQP 1,0 o il protocollo Kafka.Event publishers can publish events using HTTPS or AMQP 1.0 or the Kafka protocol. Gli autori di eventi usano l'autorizzazione basata su Azure Active Directory con token JWT rilasciati da OAuth2 o un token di firma di accesso condiviso (SAS) specifico dell'hub eventi per ottenere l'accesso alla pubblicazione.Event publishers use Azure Active Directory based authorization with OAuth2-issued JWT tokens or an Event Hub-specific Shared Access Signature (SAS) token gain publishing access.

Pubblicazione di un eventoPublishing an event

È possibile pubblicare un evento tramite AMQP 1,0, il protocollo Kafka o HTTPS.You can publish an event via AMQP 1.0, the Kafka protocol, or HTTPS. Il servizio Hub eventi fornisce l' API REST e le librerie client .NET, Java, Python, JavaScripte go per la pubblicazione di eventi in un hub eventi.The Event Hubs service provides REST API and .NET, Java, Python, JavaScript, and Go client libraries for publishing events to an event hub. Per altre piattaforme e runtime, è possibile utilizzare qualsiasi client AMQP 1.0, ad esempio Apache Qpid.For other runtimes and platforms, you can use any AMQP 1.0 client, such as Apache Qpid.

La scelta di utilizzare AMQP o HTTPS dipende dallo scenario di utilizzo.The choice to use AMQP or HTTPS is specific to the usage scenario. AMQP richiede di stabilire un socket bidirezionale persistente oltre alla sicurezza a livello di trasporto (TLS) o SSL/TLS.AMQP requires the establishment of a persistent bidirectional socket in addition to transport level security (TLS) or SSL/TLS. AMQP presenta costi di rete maggiori durante l'inizializzazione della sessione, tuttavia HTTPS richiede un sovraccarico TLS aggiuntivo per ogni richiesta.AMQP has higher network costs when initializing the session, however HTTPS requires additional TLS overhead for every request. AMQP offre prestazioni significativamente superiori per gli editori frequenti e può ottenere una latenza molto inferiore se utilizzata con codice di pubblicazione asincrono.AMQP has significantly higher performance for frequent publishers and can achieve much lower latencies when used with asynchronous publishing code.

È possibile pubblicare eventi singolarmente o in batch.You can publish events individually or batched. Una singola pubblicazione ha un limite di 1 MB, indipendentemente dal fatto che si tratti di un singolo evento o di un batch.A single publication has a limit of 1 MB, regardless of whether it is a single event or a batch. La pubblicazione di eventi di dimensioni superiori a questa soglia verrà rifiutata.Publishing events larger than this threshold will be rejected.

La velocità effettiva di hub eventi viene ridimensionata usando le partizioni e le allocazioni di unità di velocità effettiva (vedere di seguito).Event Hubs throughput is scaled by using partitions and throughput-unit allocations (see below). È consigliabile che gli editori rimangano a conoscenza del modello di partizionamento specifico scelto per un hub eventi e specifichino solo una chiave di partizione utilizzata per assegnare in modo coerente gli eventi correlati alla stessa partizione.It is a best practice for publishers to remain unaware of the specific partitioning model chosen for an Event Hub and to only specify a partition key that is used to consistently assign related events to the same partition.

Chiavi di partizione

Hub eventi garantisce che tutti gli eventi che condividono un valore di chiave di partizione vengano archiviati insieme e recapitati in ordine di arrivo.Event Hubs ensures that all events sharing a partition key value are stored together and delivered in order of arrival. Se si usano chiavi di partizione con i criteri di autore, l'identità dell’autore e il valore della chiave di partizione devono corrispondere.If partition keys are used with publisher policies, then the identity of the publisher and the value of the partition key must match. In caso contrario si verificherà un errore.Otherwise, an error occurs.

Conservazione degli eventiEvent Retention

Gli eventi pubblicati vengono rimossi da un hub eventi in base a un criterio di conservazione configurabile e basato su temporizzato.Published events are removed from an Event Hub based on a configurable, timed-based retention policy. Di seguito sono riportate alcune considerazioni importanti:Here are a few important points:

  • Il valore predefinito e il periodo di memorizzazione più breve possibile sono 1 giorno (24 ore).The default value and shortest possible retention period is 1 day (24 hours).
  • Per lo standard di hub eventi, il periodo di conservazione massimo è di 7 giorni.For Event Hubs Standard, the maximum retention period is 7 days.
  • Per gli hub eventi dedicati, il periodo di conservazione massimo è di 90 giorni.For Event Hubs Dedicated, the maximum retention period is 90 days.
  • Se si modifica il periodo di conservazione, questo si applica a tutti i messaggi, inclusi quelli già presenti nell'hub eventi.If you change the retention period, it applies to all messages including messages that are already in the event hub.

Nota

Hub eventi è un motore di flusso di eventi in tempo reale e non è progettato per essere usato al posto di un database e/o come archivio permanente per i flussi di eventi conservati all'infinito.Event Hubs is a real-time event stream engine and is not designed to be used instead of a database and/or as a permanent store for infinitely held event streams.

Più approfondita è la cronologia di un flusso di eventi, più sono necessari indici ausiliari per trovare una particolare sezione cronologica di un determinato flusso.The deeper the history of an event stream gets, the more you will need auxiliary indexes to find a particular historical slice of a given stream. L'ispezione dei payload dell'evento e dell'indicizzazione non rientra nell'ambito di funzionalità degli hub eventi (o Apache Kafka).Inspection of event payloads and indexing are not within the feature scope of Event Hubs (or Apache Kafka). I database e gli archivi e i motori di analisi specializzati, ad esempio Azure Data Lake Store, Azure Data Lake Analytics e le sinapsi di Azure , sono pertanto molto più adatti per l'archiviazione di eventi cronologici.Databases and specialized analytics stores and engines such as Azure Data Lake Store, Azure Data Lake Analytics and Azure Synapse are therefore far better suited for storing historic events.

L' acquisizione di hub eventi si integra direttamente con archiviazione BLOB di Azure e Azure Data Lake storage e, tramite tale integrazione, consente anche la propagazione di eventi direttamente in sinapsi di Azure.Event Hubs Capture integrates directly with Azure Blob Storage and Azure Data Lake Storage and, through that integration, also enables flowing events directly into Azure Synapse.

Se si vuole usare il modello di origine eventi per l'applicazione, è necessario allineare la strategia snapshot con i limiti di conservazione degli hub eventi.If you want to use the Event Sourcing pattern for your application, you should align your snapshot strategy with the retention limits of Event Hubs. Non puntare a ricompilare viste materializzate da eventi non elaborati a partire dall'inizio del tempo.Do not aim to rebuild materialized views from raw events starting at the beginning of time. Probabilmente si rimpiangerebbe una strategia di questo tipo quando l'applicazione è in produzione per un periodo di tempo e viene usata correttamente e il generatore di proiezione deve derivare da anni di eventi di modifica durante il tentativo di recuperare le modifiche più recenti e in corso.You would surely come to regret such a strategy once your application is in production for a while and is well used, and your projection builder has to churn through years of change events while trying to catch up to the latest and ongoing changes.

Criteri di autorePublisher policy

Hub eventi consente un controllo granulare degli autori di eventi tramite criteri di autore.Event Hubs enables granular control over event publishers through publisher policies. I criteri di autore sono funzionalità di runtime progettate per consentire un numero elevato di autori di eventi indipendenti.Publisher policies are run-time features designed to facilitate large numbers of independent event publishers. Con i criteri di autore, ogni autore usa il proprio identificatore univoco durante la pubblicazione di eventi in un hub eventi, con il meccanismo seguente:With publisher policies, each publisher uses its own unique identifier when publishing events to an event hub, using the following mechanism:

//<my namespace>.servicebus.windows.net/<event hub name>/publishers/<my publisher name>

Non è necessario creare nomi di autore prima di procedere, ma devono corrispondere al token SAS utilizzato quando si pubblica un evento, al fine di garantire le identità di autore indipendenti.You don't have to create publisher names ahead of time, but they must match the SAS token used when publishing an event, in order to ensure independent publisher identities. Quando si usano i criteri dei publisher, il valore di PartitionKey è impostato sul nome del publisher.When using publisher policies, the PartitionKey value is set to the publisher name. Per il corretto funzionamento, questi valori devono corrispondere.To work properly, these values must match.

AcquisizioneCapture

Acquisizione di Hub eventi consente di acquisire automaticamente i dati in streaming in Hub eventi e salvarli, a propria scelta, in un account di archiviazione BLOB o un account del servizio Azure Data Lake.Event Hubs Capture enables you to automatically capture the streaming data in Event Hubs and save it to your choice of either a Blob storage account, or an Azure Data Lake Service account. È possibile abilitare la funzione di acquisizione dal portale di Azure e specificare una dimensione minima e l'intervallo di tempo per eseguire l'acquisizione.You can enable Capture from the Azure portal, and specify a minimum size and time window to perform the capture. L'acquisizione di Hub eventi consente di specificare un contenitore e un account di Archiviazione BLOB di Azure oppure un account del servizio Azure Data Lake da usare per archiviare i dati acquisiti.Using Event Hubs Capture, you specify your own Azure Blob Storage account and container, or Azure Data Lake Service account, one of which is used to store the captured data. I dati acquisiti vengono scritti nel formato di Apache Avro.Captured data is written in the Apache Avro format.

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.

Token di firma di accesso condivisoSAS tokens

Hub eventi usa le firme di accesso condiviso, disponibili a livello di spazio dei nomi e hub eventi.Event Hubs uses Shared Access Signatures, which are available at the namespace and event hub level. Un token SAS viene generato da una chiave SAS ed è un hash SHA di un URL, codificato in un formato specifico.A SAS token is generated from a SAS key and is an SHA hash of a URL, encoded in a specific format. Usando il nome della chiave (criterio) e il token, Hub eventi può rigenerare l'hash e quindi autenticare il mittente.Using the name of the key (policy) and the token, Event Hubs can regenerate the hash and thus authenticate the sender. In genere, i token di firma di accesso condiviso per gli autori di eventi vengono creati con privilegi di invio solo in un hub eventi specifico.Normally, SAS tokens for event publishers are created with only send privileges on a specific event hub. Questo meccanismo di URL token SAS costituisce la base per l'identificazione dell’autore introdotta nei criteri di autore.This SAS token URL mechanism is the basis for publisher identification introduced in the publisher policy. Per altre informazioni sull'uso di SAS, vedere Autenticazione della firma di accesso condiviso con il bus di servizio.For more information about working with SAS, see Shared Access Signature Authentication with Service Bus.

Consumer di eventiEvent consumers

Qualsiasi entità che legge i dati dell'evento da un hub eventi è un consumer di eventi.Any entity that reads event data from an event hub is an event consumer. Tutti i consumer di Hub eventi si connettono tramite la sessione AMQP 1.0 e gli eventi vengono recapitati tramite la sessione appena disponibili.All Event Hubs consumers connect via the AMQP 1.0 session and events are delivered through the session as they become available. Il client non deve eseguire il polling per la disponibilità dei dati.The client does not need to poll for data availability.

Gruppi di consumerConsumer groups

Il meccanismo di pubblicazione/sottoscrizione di Hub eventi viene abilitato tramite gruppi di consumer.The publish/subscribe mechanism of Event Hubs is enabled through consumer groups. Un gruppo di consumer è una vista (stato, posizione o offset) di un intero hub eventi.A consumer group is a view (state, position, or offset) of an entire event hub. I gruppi di consumer consentono a più applicazioni costose di avere una visualizzazione separata del flusso di eventi e di leggere il flusso in modo indipendente in base alle proprie esigenze e con i propri gli offset.Consumer groups enable multiple consuming applications to each have a separate view of the event stream, and to read the stream independently at their own pace and with their own offsets.

In un’architettura di elaborazione flusso, ogni applicazione a valle equivale a un gruppo di consumer.In a stream processing architecture, each downstream application equates to a consumer group. Se si desidera scrivere i dati dell’evento nell’archiviazione a lungo termine, tale applicazione writer di archiviazione è un gruppo di consumer.If you want to write event data to long-term storage, then that storage writer application is a consumer group. L'elaborazione di eventi complessi può essere quindi eseguita da un altro gruppo di consumer separato.Complex event processing can then be performed by another, separate consumer group. È possibile accedere alla partizioni solo tramite un gruppo di consumer.You can only access partitions through a consumer group. In un hub eventi è sempre presente un gruppo di consumer predefinito e per un hub eventi di livello Standard è possibile creare fino a 20 gruppi di consumer.There is always a default consumer group in an event hub, and you can create up to 20 consumer groups for a Standard tier event hub.

In una partizione per un gruppo di consumer ci possono essere al massimo cinque lettori simultanei; è tuttavia consigliabile che in una partizione per un gruppo di consumer ci sia solo un ricevitore attivo.There can be at most 5 concurrent readers on a partition per consumer group; however it is recommended that there is only one active receiver on a partition per consumer group. All'interno di una singola partizione, ogni lettore riceve tutti i messaggi.Within a single partition, each reader receives all of the messages. Se si hanno più lettori nella stessa partizione, si elaborano i messaggi duplicati.If you have multiple readers on the same partition, then you process duplicate messages. È necessario gestire questa situazione nel codice. Benché tale operazione possa non rivelarsi semplice,You need to handle this in your code, which may not be trivial. si tratta di un approccio valido in alcuni scenari.However, it's a valid approach in some scenarios.

Alcuni client offerti dagli Azure SDK sono agenti consumer intelligenti che gestiscono automaticamente i dettagli per verificare che ogni partizione disponga di un singolo lettore e che tutte le partizioni per un hub eventi vengano lette da.Some clients offered by the Azure SDKs are intelligent consumer agents that automatically manage the details of ensuring that each partition has a single reader and that all partitions for an event hub are being read from. Ciò consente al codice di concentrarsi sull'elaborazione degli eventi letti dall'hub eventi, in modo che possa ignorare molti dei dettagli delle partizioni.This allows your code to focus on processing the events being read from the event hub so it can ignore many of the details of the partitions. Per altre informazioni, vedere connettersi a una partizione.For more information, see Connect to a partition.

Gli esempi seguenti illustrano la convenzione dell'URI del gruppo di consumer:The following examples show the consumer group URI convention:

//<my namespace>.servicebus.windows.net/<event hub name>/<Consumer Group #1>
//<my namespace>.servicebus.windows.net/<event hub name>/<Consumer Group #2>

La figura seguente illustra l'architettura di elaborazione del flusso di Hub eventi:The following figure shows the Event Hubs stream processing architecture:

Architettura di hub eventi

Offset di flussoStream offsets

Un offset è la posizione di un evento all'interno di una partizione.An offset is the position of an event within a partition. Un offset può essere considerato come un cursore sul lato client.You can think of an offset as a client-side cursor. L'offset è la numerazione di byte dell'evento.The offset is a byte numbering of the event. Questo offset consente a un consumer di eventi (lettore) di specificare un punto nel flusso di eventi da cui iniziare la lettura degli eventi.This offset enables an event consumer (reader) to specify a point in the event stream from which they want to begin reading events. È possibile specificare l'offset come un timestamp o un valore di offset.You can specify the offset as a timestamp or as an offset value. I consumer sono responsabili di archiviare i propri valori di offset all'esterno del servizio Hub eventi.Consumers are responsible for storing their own offset values outside of the Event Hubs service. All'interno di una partizione, ogni evento include un offset.Within a partition, each event includes an offset.

Offset partizione

CheckpointCheckpointing

Checkpoint è un processo mediante il quale i lettori contrassegnano o eseguono il commit della propria posizione all'interno di una sequenza di eventi di partizione.Checkpointing is a process by which readers mark or commit their position within a partition event sequence. Il checkpoint è responsabilità del consumer e si verifica per partizione all'interno di un gruppo di consumer.Checkpointing is the responsibility of the consumer and occurs on a per-partition basis within a consumer group. Questa responsabilità significa che per ogni gruppo di consumer, ogni lettore di partizione deve tenere traccia della posizione corrente nel flusso di eventi e può informare il servizio quando considera completo il flusso di dati.This responsibility means that for each consumer group, each partition reader must keep track of its current position in the event stream, and can inform the service when it considers the data stream complete.

Se un lettore si disconnette da una partizione, quando riconnette inizia a leggere in corrispondenza del checkpoint inviato in precedenza dall’ulitimo lettore di tale partizione in tale gruppo di consumer.If a reader disconnects from a partition, when it reconnects it begins reading at the checkpoint that was previously submitted by the last reader of that partition in that consumer group. Quando il lettore si connette, passa l'offset all'hub eventi per specificare la posizione da cui iniziare la lettura.When the reader connects, it passes the offset to the event hub to specify the location at which to start reading. In questo modo è possibile usare la funzionalità di checkpoint sia per contrassegnare gli eventi come "completi" dalle applicazioni a valle sia per fornire la resilienza in caso di failover tra i lettori in esecuzione in computer diversi.In this way, you can use checkpointing to both mark events as "complete" by downstream applications, and to provide resiliency if a failover between readers running on different machines occurs. È possibile tornare a dati precedenti specificando un offset inferiore da questo processo di checkpoint.It is possible to return to older data by specifying a lower offset from this checkpointing process. Tramite questo meccanismo il checkpoint consente sia la resilienza del failover che la riproduzione del flusso di eventi.Through this mechanism, checkpointing enables both failover resiliency and event stream replay.

Importante

Gli offset sono forniti dal servizio Hub eventi.Offsets are provided by the Event Hubs service. È responsabilità del consumer effettuare il checkpoint durante l'elaborazione degli eventi.It is the responsibility of the consumer to checkpoint as events are processed.

Nota

Se si usa l'archivio BLOB di Azure come archivio di checkpoint in un ambiente che supporta una versione diversa di storage BLOB SDK rispetto a quelli generalmente disponibili in Azure, sarà necessario usare il codice per modificare la versione dell'API del servizio di archiviazione nella versione specifica supportata da tale ambiente.If you are using Azure Blob Storage as the checkpoint store in an environment that supports a different version of Storage Blob SDK than those typically available on Azure, you'll need to use code to change the Storage service API version to the specific version supported by that environment. Ad esempio, se si esegue Hub eventi in un hub Azure stack versione 2002, la versione più recente disponibile per il servizio di archiviazione è la versione 2017-11-09.For example, if you are running Event Hubs on an Azure Stack Hub version 2002, the highest available version for the Storage service is version 2017-11-09. In questo caso, è necessario usare il codice per fare riferimento alla versione dell'API del servizio di archiviazione a 2017-11-09.In this case, you need to use code to target the Storage service API version to 2017-11-09. Per un esempio su come definire come destinazione una versione specifica dell'API di archiviazione, vedere questi esempi su GitHub:For an example on how to target a specific Storage API version, see these samples on GitHub:

Attività comuni del consumerCommon consumer tasks

Tutti i consumer di Hub eventi si connettono tramite una sessione AMQP 1.0 e un canale di comunicazione bidirezionale in grado di riconoscere lo stato.All Event Hubs consumers connect via an AMQP 1.0 session, a state-aware bidirectional communication channel. Ogni partizione ha una sessione AMQP 1.0 che facilita il trasporto di eventi separati dalla partizione.Each partition has an AMQP 1.0 session that facilitates the transport of events segregated by partition.

Connettersi a una partizioneConnect to a partition

Quando ci si connette alle partizioni, è pratica comune usare un meccanismo di leasing per coordinare le connessioni di lettura a partizioni specifiche.When connecting to partitions, it's common practice to use a leasing mechanism to coordinate reader connections to specific partitions. In questo modo, è possibile che ogni partizione in un gruppo di consumer disponga di un solo lettore attivo.This way, it's possible for every partition in a consumer group to have only one active reader. Il checkpoint, il leasing e la gestione dei lettori sono semplificati tramite i client all'interno degli SDK di hub eventi, che fungono da agenti di consumer intelligenti.Checkpointing, leasing, and managing readers are simplified by using the clients within the Event Hubs SDKs, which act as intelligent consumer agents. Si tratta di:These are:

Leggere gli eventiRead events

Dopo l'apertura di una sessione AMQP 1.0 e del collegamento per una partizione specifica, gli eventi vengono recapitati al client AMQP 1.0 dal servizio Hub eventi.After an AMQP 1.0 session and link is opened for a specific partition, events are delivered to the AMQP 1.0 client by the Event Hubs service. Questo meccanismo di recapito permette una velocità effettiva più elevata e una latenza più bassa rispetto ai meccanismi basati su pull, ad esempio HTTP GET.This delivery mechanism enables higher throughput and lower latency than pull-based mechanisms such as HTTP GET. Quando gli eventi vengono inviati al client, ogni istanza dei dati dell'evento contiene metadati importanti, ad esempio l’offset e il numero di sequenza utilizzati per facilitare il checkpoint sulla in sequenza di eventi.As events are sent to the client, each event data instance contains important metadata such as the offset and sequence number that are used to facilitate checkpointing on the event sequence.

Dati evento:Event data:

  • OffsetOffset
  • Numero di sequenzaSequence number
  • CorpoBody
  • Proprietà utenteUser properties
  • Proprietà di sistemaSystem properties

L'utente è responsabile della gestione dell'offset.It is your responsibility to manage the offset.

Passaggi successiviNext steps

Per altre informazioni su Hub eventi, vedere i collegamenti seguenti:For more information about Event Hubs, visit the following links: