Características y terminología de Azure Event HubsFeatures and terminology in Azure Event Hubs

Azure Event Hubs es un servicio escalable de procesamiento de eventos que recopila y procesa grandes volúmenes de eventos y datos, con una baja latencia y una alta fiabilidad.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. Consulte ¿Qué es Event Hubs? para obtener una introducción detallada.See What is Event Hubs? for a high-level overview.

Este artículo se basa en el contenido del artículo de información general e incluye detalles técnicos y de implementación de las características y los componentes de Event Hubs.This article builds on the information in the overview article, and provides technical and implementation details about Event Hubs components and features.

Sugerencia

La compatibilidad del protocolo con los clientes de Apache Kafka (versiones > = 1.0) proporciona puntos de conexión de red que permiten que las aplicaciones compiladas usen Apache Kafka con cualquier cliente para utilizar Event Hubs.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 mayoría de las aplicaciones de Kafka existentes se pueden volver a configurar simplemente para que apunten a un espacio de nombres del centro de eventos en lugar de a un servidor de arranque del clúster de Kafka.Most existing Kafka applications can simply be reconfigured to point to an Event Hub namespace instead of a Kafka cluster bootstrap server.

Desde la perspectiva del costo, el esfuerzo operativo y la confiabilidad, Azure Event Hubs es una excelente alternativa a la implementación y el uso de sus propios clústeres de Kafka y Zookeeper y a las ofertas de Kafka como servicio no nativas para 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.

Además de conseguir la misma funcionalidad básica que la del agente de Apache Kafka, también se obtiene acceso a las características del centro de eventos de Azure, como el procesamiento por lotes y el archivado automáticos a través de Event Hubs Capture, el equilibrio y el escalado automáticos, la recuperación ante desastres, la compatibilidad con zonas de disponibilidad sin costos adicionales, la integración de red flexible y segura y la compatibilidad con varios protocolos, como el protocolo compatible con firewall AMQP sobre WebSockets.In 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.

Espacio de nombresNamespace

Los espacios de nombres de Event Hubs proporcionan puntos de conexión de red integrados de DNS y una variedad de características de administración de control de acceso e integración de red, como filtrado de IP, punto de conexión de red virtual y Private Link, y son contenedor de administración de una de numerosas instancias de Event Hubs (o temas, en el lenguaje 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).

Publicadores de eventosEvent publishers

Toda entidad que envíe datos a un centro de eventos es un publicador de eventos (que se usa como sinónimo de productor de eventos).Any entity that sends data to an Event Hub is an event publisher (synonymously used with event producer). Los publicadores de eventos pueden publicar eventos mediante HTTPS o AMQP 1.0 o el protocolo de Kafka.Event publishers can publish events using HTTPS or AMQP 1.0 or the Kafka protocol. Para obtener acceso de publicación, los publicadores de eventos usan la autorización basada en Azure Active Directory con tokens JWT emitidos por OAuth2 o un token de firma de acceso compartido (SAS) específico del centro de eventos.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.

Publicación de un eventoPublishing an event

Puede publicar un evento a través de AMQP 1.0, el protocolo de Kafka o HTTPS.You can publish an event via AMQP 1.0, the Kafka protocol, or HTTPS. El servicio Event Hubs proporciona API REST y bibliotecas cliente para .NET, Java, Python, JavaScript y Go para publicar eventos en un centro de eventos.The Event Hubs service provides REST API and .NET, Java, Python, JavaScript, and Go client libraries for publishing events to an event hub. Para otras plataformas y tiempos de ejecución, puede usar cualquier cliente de AMQP 1.0, como Apache Qpid.For other runtimes and platforms, you can use any AMQP 1.0 client, such as Apache Qpid.

La opción de usar AMQP o HTTPS es específica para el escenario de uso.The choice to use AMQP or HTTPS is specific to the usage scenario. AMQP requiere el establecimiento de un socket bidireccional persistente, además de la seguridad de nivel de transporte (TLS) o SSL/TLS.AMQP requires the establishment of a persistent bidirectional socket in addition to transport level security (TLS) or SSL/TLS. AMQP tiene un mayor costo de red al inicializar la sesión, sin embargo, HTTPS requiere una sobrecarga de TLS adicional para cada solicitud.AMQP has higher network costs when initializing the session, however HTTPS requires additional TLS overhead for every request. AMQP presenta un rendimiento bastante mayor para publicadores frecuentes y puede lograr latencias mucho menores cuando se usa con código de publicación asincrónico.AMQP has significantly higher performance for frequent publishers and can achieve much lower latencies when used with asynchronous publishing code.

Los eventos se pueden publicar de forma individual o por lotes.You can publish events individually or batched. Una sola publicación tiene un límite de 1 MB, con independencia de si es un evento único o un lote.A single publication has a limit of 1 MB, regardless of whether it is a single event or a batch. La publicación de eventos que superen este umbral se rechazará.Publishing events larger than this threshold will be rejected.

El rendimiento de Event Hubs se ajusta mediante particiones y asignaciones de unidades de rendimiento (consulte a continuación).Event Hubs throughput is scaled by using partitions and throughput-unit allocations (see below). Se recomienda que los publicadores no estén informados del modelo de particionamiento específico elegido para un centro de eventos y que solo especifiquen una clave de partición que se usa para asignar de forma coherente eventos relacionados a la misma partición.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.

Claves de partición

Event Hubs garantiza que todos los eventos que comparten un valor de clave de partición se almacenen juntos y se entreguen en el orden de llegada.Event Hubs ensures that all events sharing a partition key value are stored together and delivered in order of arrival. Si se usan claves de partición con directivas de publicador, la identidad del publicador y el valor de la clave de partición deben coincidir.If partition keys are used with publisher policies, then the identity of the publisher and the value of the partition key must match. De lo contrario, se produce un error.Otherwise, an error occurs.

Retención de eventosEvent Retention

Los eventos publicados se quitan de un centro de eventos en función de una directiva de retención configurable basada en el tiempo.Published events are removed from an Event Hub based on a configurable, timed-based retention policy. Estos son algunos puntos importantes:Here are a few important points:

  • El valor predeterminado y el período de retención más corto posible es de 1 día (24 horas) .The default value and shortest possible retention period is 1 day (24 hours).
  • En el caso de Event Hubs estándar, el período de retención máximo es de 7 días.For Event Hubs Standard, the maximum retention period is 7 days.
  • En el caso de Event Hubs dedicado, el período de retención máximo es de 90 días.For Event Hubs Dedicated, the maximum retention period is 90 days.
  • Si cambia el período de retención, se aplica a todos los mensajes, incluidos los que ya están en el centro de eventos.If you change the retention period, it applies to all messages including messages that are already in the event hub.

Nota

Event Hubs es un motor de secuencia de eventos en tiempo real y no está diseñado para usarse en lugar de una base de datos o como almacén permanente para secuencias de eventos que se conservan por tiempo indefinido.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.

Cuanto más profundo sea el historial de una secuencia de eventos, más se necesitarán índices auxiliares para encontrar un segmento histórico determinado de una secuencia dada.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. La inspección de cargas de eventos y la indexación no se encuentran dentro del ámbito de características de Event Hubs (o Apache Kafka).Inspection of event payloads and indexing are not within the feature scope of Event Hubs (or Apache Kafka). Las bases de datos y los almacenes y motores de análisis especializados, como Azure Data Lake Store, Azure Data Lake Analytics y Azure Synapse son, por lo tanto, más adecuados para almacenar eventos históricos.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.

Event Hubs Capture se integra directamente con Azure Blob Storage y Azure Data Lake Storage y, gracias a esa integración, también permite el flujo de eventos directamente a Azure Synapse.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.

Si quiere usar el patrón Origen de eventos para la aplicación, debe alinear la estrategia de instantáneas con los límites de retención de Event Hubs.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. Su intención no debe ser la de recompilar las vistas materializadas de eventos sin procesar que se inician al principio.Do not aim to rebuild materialized views from raw events starting at the beginning of time. Probablemente lamentaría una estrategia así una vez que la aplicación esté en producción durante un tiempo y se use correctamente y el generador de proyecciones tenga que rebuscar entre años de eventos de cambios al intentar ponerse al día con los más recientes y continuos.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.

Directiva del publicadorPublisher policy

Los Event Hubs permiten un control granular sobre los publicadores de eventos a través de las directivas de publicador.Event Hubs enables granular control over event publishers through publisher policies. Las directivas de publicador son características de tiempo de ejecución diseñadas para facilitar grandes números de publicadores de eventos independientes.Publisher policies are run-time features designed to facilitate large numbers of independent event publishers. Con las directivas de publicador, cada publicador usa su propio identificador único al publicar los eventos en un centro de eventos mediante el mecanismo siguiente: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>

No tiene que crear nombres de publicador con antelación, pero deben coincidir con el token de SAS que se usa al publicar un evento, con el fin de garantizar las identidades de publicador independientes.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. Al usar directivas de publicador, el valor PartitionKey se establece como el nombre del publicador.When using publisher policies, the PartitionKey value is set to the publisher name. Para que funcione correctamente, estos valores deben coincidir.To work properly, these values must match.

CapturarCapture

Event Hubs Capture permite capturar automáticamente los datos de transmisión de Event Hubs y guardarlos en una cuenta de Blob Storage o en una cuenta de servicio de 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. Puede habilitar Capture desde Azure Portal y especificar una ventana de tiempo y de tamaño mínimos para realizar la captura.You can enable Capture from the Azure portal, and specify a minimum size and time window to perform the capture. Event Hubs Capture permite especificar una cuenta y un contenedor propios de Azure Blob Storage, o una cuenta de servicio de Azure Data Lake, uno de los cuales se usa para almacenar los datos capturados.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. Los datos capturados se escriben en el formato de Apache Avro.Captured data is written in the Apache Avro format.

ParticionesPartitions

Event Hubs organiza las secuencias de eventos en una o varias particiones.Event Hub organizes sequences of events into one or more partitions. A medida que llegan eventos más recientes, se agregan al final de esta secuencia.As newer events arrive, they're added to the end of this sequence. Una partición puede considerarse como un "registro de confirmación".A partition can be thought of as a "commit log."

Las particiones almacenan datos de eventos que contienen el cuerpo del evento, un contenedor de propiedades definido por el usuario que describe el evento y metadatos, como su desplazamiento en la partición, su número en la secuencia de la transmisión y la marca de tiempo del servicio en el momento que se aceptó.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.

Diagrama que muestra la secuencia de eventos, de más antiguo o más reciente.

Event Hubs está diseñado para ayudar en el procesamiento de grandes volúmenes de eventos y la creación de particiones ayuda a hacerlo de dos maneras:Event Hubs is designed to help with processing of large volumes of events, and partitioning helps with that in two ways:

En primer lugar, aunque Event Hubs sea un servicio PaaS, hay una realidad física subyacente, y el mantenimiento de un registro que conserva el orden de los eventos requiere que estos eventos se mantengan juntos en el almacenamiento subyacente y sus réplicas, y esto crea un límite máximo de rendimiento para este tipo de registro.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. La creación de particiones permite que se usen varios registros paralelos para el mismo centro de eventos y, por lo tanto, multiplicar la capacidad de rendimiento de E/S sin procesar disponible.Partitioning allows for multiple parallel logs to be used for the same Event Hub and therefore multiplying the available raw IO throughput capacity.

En segundo lugar, sus propias aplicaciones deben poder mantener el procesamiento del volumen de eventos que se envía a un centro de eventos.Second, your own applications must be able to keep up with processing the volume of events that are being sent into an Event Hub. Esto puede ser complejo y requiere una capacidad de procesamiento en paralelo importante con escalabilidad horizontal.It may be complex and requires substantial, scaled-out, parallel processing capacity. El razonamiento para la creación de particiones es el mismo que el anterior: la capacidad de un único proceso para controlar los eventos es limitada y, por tanto, se necesitan varios procesos, y las particiones son el modo en que la solución alimenta esos procesos y, además, garantiza que cada evento tiene un claro propietario de procesamiento.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.

Event Hubs retiene los eventos durante el tiempo de retención configurado, que se aplica a todas las particiones.Event Hubs retains events for a configured retention time that applies across all partitions. Los eventos se eliminan automáticamente cuando se alcanza el período de retención.Events are automatically removed when the retention period has been reached. Si especifica un período de retención de un día, el evento dejará de estar disponible exactamente 24 horas después de que se haya aceptado.If you specify a retention period of one day, the event will become unavailable exactly 24 hours after it has been accepted. No se pueden eliminar eventos explícitamente.You cannot explicitly delete events.

El tiempo de retención permitido es de hasta 7 días para Event Hubs Estándar y hasta 90 días para Event Hubs dedicado.The allowed retention time is up to 7 days for Event Hubs Standard and up to 90 days for Event Hubs Dedicated. Si necesita archivar eventos más allá del período de retención permitido, puede hacer que se almacenen automáticamente en Azure Storage o Azure Data Lake mediante la activación de la característica Capture de Event Hubs y, si necesita buscar o analizar estos archivos, puede importarlos fácilmente en Azure Synapse u otros almacenes y plataformas de análisis similares.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.

La razón del límite de Event Hubs en la retención de datos basada en el tiempo es evitar que grandes volúmenes de datos históricos del cliente se mantengan en un almacén que solo está indexado por una marca de tiempo y solo permite el acceso secuencial.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 filosofía arquitectónica aquí es que los datos históricos necesitan una indexación más enriquecida y un acceso más directo que la interfaz de eventos en tiempo real que proporcionan Event Hubs 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. Los motores de flujos de eventos no son adecuados para desempeñar el papel de los lagos de datos o los archivos a largo plazo para la creación de orígenes de eventos.Event stream engines are not well suited to play the role of data lakes or long-term archives for event sourcing.

Dado que las particiones son independientes y contienen sus propias secuencias de datos, a menudo crecen a velocidades diferentes.Because partitions are independent and contain their own sequence of data, they often grow at different rates. En Event Hubs, eso no supone ningún problema que requiera intervención administrativa, como sería, por ejemplo, en Apache Kafka, pero la distribución desigual conducirá a una carga desigual en los procesadores de eventos de nivel inferior.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.

Event Hubs

El número de particiones se especifica en el momento de la creación y debe estar comprendido entre 1 y 32 en Event Hubs Estándar.The number of partitions is specified at creation and must be between 1 and 32 in Event Hubs Standard. El número de particiones puede llegar hasta 2000 particiones por unidad de capacidad en Event Hubs dedicado.The partition count can be up to 2000 partitions per Capacity Unit in Event Hubs Dedicated.

Se recomienda elegir al menos tantas particiones como unidades de procesamiento (TU) sostenidas que espera necesitar durante la carga máxima de la aplicación para ese centro de eventos específico.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. Debe hacer los cálculos con una sola partición que tenga una capacidad de procesamiento de 1 TU (1 MB de entrada, 2 MB de salida).You should calculate with a single partition having a throughput capacity of 1 TU (1 MByte in, 2 MByte out). Puede escalar las unidades de procesamiento del espacio de nombres o las unidades de capacidad del clúster independientemente del número de particiones.You can scale the TUs on your namespace or the capacity units of your cluster independent of the partition count. Un centro de eventos con 32 particiones y un centro de eventos con 1 partición incurren en el mismo costo cuando el espacio de nombres se establece en una capacidad de 1 TU.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.

Las aplicaciones controlan la asignación de eventos a las particiones mediante una de estas tres maneras:Applications control the mapping of events to partitions in one of three ways:

  • Al especificar una clave de partición, que se asigna de forma coherente (mediante una función hash) a una de las particiones disponibles.By specifying partition key, which is consistently mapped (using a hash function) to one of the available partitions.
  • Cuando no se especifica una clave de partición, lo que permite al agente elegir aleatoriamente una partición para un evento determinado.By not specifying a partition key, which enables to broker to randomly choose a partition for a given event.
  • Mediante el envío explícito de eventos a una partición específica.By explicitly sending events to a specific partition.

La especificación de una clave de partición permite mantener los eventos relacionados en la misma partición y en el orden exacto en el que se enviaron.Specifying a partition key enables keeping related events together in the same partition and in the exact order in which they were sent. La clave de partición es una cadena que se deriva del contexto de la aplicación e identifica la interrelación de los eventos.The partition key is some string that is derived from your application context and identifies the interrelationship of the events.

Una secuencia de eventos identificados por una clave de partición es un flujo.A sequence of events identified by a partition key is a stream. Una partición es un almacén de registros multiplexado para muchos de estos flujos.A partition is a multiplexed log store for many such streams.

El número de particiones de un centro de eventos de un clúster de Event Hubs dedicado se puede aumentar tras su creación, pero la distribución de flujos entre las particiones cambiará cuando se realice como la asignación de claves de partición a cambios de las particiones, por lo que es preciso evitar a toda costa ese tipo de cambios si el orden relativo de los es importante en la aplicación.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.

Establecer el número de particiones en el valor máximo permitido es tentador, pero siempre debe tener en cuenta que los flujos de eventos deben estar estructurados de manera que se puedan aprovechar las ventajas de tener varias particiones.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. Si necesita conservar el orden absoluto en todos los eventos o solo en un puñado de subsecuencias, es posible que no pueda aprovechar las ventajas de tener muchas particiones.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. Además, muchas particiones hacen que el procesamiento sea más complejo.Also, many partitions make the processing side more complex.

Aunque el envío directo a las particiones es posible, no se recomienda.While partitions can be sent to directly, it's not recommended. En su lugar, puede usar las construcciones de nivel superior que se presentan en la sección Publicador de eventos.Instead, you can use higher level constructs introduced in the Event publishers section.

Para más información acerca de particiones y el equilibrio entre disponibilidad y confiabilidad, consulte los artículos Guía de programación de Event Hubs y Disponibilidad y coherencia en Event Hubs.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.

Tokens de SASSAS tokens

Event Hubs usa firmas de acceso compartido que están disponibles en el nivel del espacio de nombres y del centro de eventos.Event Hubs uses Shared Access Signatures, which are available at the namespace and event hub level. Un token de SAS se genera a partir de una clave de SAS y es un hash SHA de una dirección URL, codificado en un formato concreto.A SAS token is generated from a SAS key and is an SHA hash of a URL, encoded in a specific format. Con el nombre de la clave (directiva) y el token, Event Hubs puede volver a generar el hash y así autenticar al remitente.Using the name of the key (policy) and the token, Event Hubs can regenerate the hash and thus authenticate the sender. Normalmente, los tokens de SAS para publicadores de eventos se crean solo con privilegios de envío en un centro de eventos concreto.Normally, SAS tokens for event publishers are created with only send privileges on a specific event hub. Este mecanismo de dirección URL del token de SAS es la base para la identificación del publicador introducida en la directiva del publicador.This SAS token URL mechanism is the basis for publisher identification introduced in the publisher policy. Para obtener más información sobre el funcionamiento con SAS, consulte Autenticación con firma de acceso compartido en Service Bus.For more information about working with SAS, see Shared Access Signature Authentication with Service Bus.

Consumidores de eventosEvent consumers

Cualquier entidad que lea datos de eventos de un centro de eventos es un consumidor de eventos.Any entity that reads event data from an event hub is an event consumer. Todos los consumidores de Event Hubs se conectan a través de la sesión de AMQP 1.0, y los eventos se entregan a través de la sesión a medida que están disponibles.All Event Hubs consumers connect via the AMQP 1.0 session and events are delivered through the session as they become available. El cliente no necesita realizar un sondeo de disponibilidad de los datos.The client does not need to poll for data availability.

Grupos de consumidoresConsumer groups

El mecanismo de publicación y suscripción de Event Hubs se habilita a través de los grupos de consumidores.The publish/subscribe mechanism of Event Hubs is enabled through consumer groups. Un grupo de consumidores es una vista (estado, posición o desplazamiento) de un centro de eventos completo.A consumer group is a view (state, position, or offset) of an entire event hub. Los grupos de consumidores habilitan varias aplicaciones consumidoras para que cada una tenga una vista separada del flujo de eventos y para que lean el flujo de forma independiente a su propio ritmo y con sus propios desplazamientos.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.

En una arquitectura de procesamiento de flujos, cada aplicación de bajada se corresponde con un grupo de consumidores.In a stream processing architecture, each downstream application equates to a consumer group. Si quiere escribir datos de eventos para el almacenamiento a largo plazo, esa aplicación de escritura de almacenamiento es un grupo de consumidores.If you want to write event data to long-term storage, then that storage writer application is a consumer group. Otro grupo de consumidores independiente puede realizar el procesamiento de eventos complejos.Complex event processing can then be performed by another, separate consumer group. Solo puede obtener acceso a las particiones a través de un grupo de consumidores.You can only access partitions through a consumer group. Siempre hay un grupo de consumidores predeterminado en un centro de eventos y puede crear hasta 20 grupos de consumidores para un centro de eventos de nivel Estándar.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.

Como máximo, puede haber cinco lectores simultáneos en una partición por grupo de consumidores; pero se recomienda que solo haya un receptor activo en una partición por grupo de consumidores.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. Cada lector recibe todos los mensajes dentro de una sola partición.Within a single partition, each reader receives all of the messages. Si tiene varios lectores en la misma partición, procesará los mensajes duplicados.If you have multiple readers on the same partition, then you process duplicate messages. Debe controlar esto en su código, pues no puede ser trivial.You need to handle this in your code, which may not be trivial. Sin embargo, es un enfoque válido en algunos escenarios.However, it's a valid approach in some scenarios.

Algunos clientes que ofrecen los SDK de Azure son agentes de consumidor inteligentes que administran automáticamente los detalles para asegurarse de que cada partición tenga un lector único y que se estén leyendo todas las particiones para un centro de eventos.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. Esto permite que el código se centre en el procesamiento de los eventos que se leen desde el centro de eventos de modo que pueda omitir muchos detalles de las particiones.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. Para más información, consulte Conexión a una partición.For more information, see Connect to a partition.

A continuación se muestran ejemplos de la convención de URI del grupo de consumidores: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 siguiente ilustración muestra la arquitectura de procesamiento del flujo de Event Hubs:The following figure shows the Event Hubs stream processing architecture:

Arquitectura de Event Hubs

Desplazamientos de los flujosStream offsets

Un desplazamiento es la posición de un evento dentro de una partición.An offset is the position of an event within a partition. Puede pensar en un desplazamiento como un cursor de lado cliente.You can think of an offset as a client-side cursor. El desplazamiento es una numeración de byte del evento.The offset is a byte numbering of the event. Este desplazamiento permite que un consumidor de eventos (lector) especifique un punto en el flujo de eventos desde el que quiere empezar a leer los eventos.This offset enables an event consumer (reader) to specify a point in the event stream from which they want to begin reading events. Puede especificar el desplazamiento como una marca de tiempo o como un valor de desplazamiento.You can specify the offset as a timestamp or as an offset value. Los consumidores son responsables de almacenar sus propios valores de desplazamiento fuera del servicio de Event Hubs.Consumers are responsible for storing their own offset values outside of the Event Hubs service. Dentro de una partición, cada evento incluye un desplazamiento.Within a partition, each event includes an offset.

Desplazamiento de partición

Puntos de controlCheckpointing

Puntos de control es un proceso en el que los lectores marcan o confirman su posición dentro de la secuencia de eventos de una partición.Checkpointing is a process by which readers mark or commit their position within a partition event sequence. La creación de puntos de comprobación es responsabilidad del consumidor y se realiza por partición dentro de un grupo de consumidores.Checkpointing is the responsibility of the consumer and occurs on a per-partition basis within a consumer group. Esta responsaibilidad significa que por cada grupo de consumidores, cada lector de la partición debe realizar un seguimiento de su posición actual en el flujo del evento y puede informar al servicio cuando considere que el flujo de datos se ha completado.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.

Si se desconecta un lector de una partición, cuando se vuelve a conectar comienza a leer en el punto de comprobación que envió previamente el último lector de esa partición en ese grupo de consumidores.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. Cuando se conecta el lector, pasa este desplazamiento al centro de eventos para especificar la ubicación en la que se va a empezar a leer.When the reader connects, it passes the offset to the event hub to specify the location at which to start reading. De este modo, puede usar puntos de comprobación para marcar eventos como "completados" por las aplicaciones de bajada y para ofrecer resistencia en caso de que se produzca una conmutación por error entre lectores que se ejecutan en máquinas distintas.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. Es posible volver a los datos más antiguos especificando un desplazamiento inferior desde este proceso de puntos de comprobación.It is possible to return to older data by specifying a lower offset from this checkpointing process. Mediante este mecanismo, los puntos de comprobación permiten una resistencia a la conmutación por error y una reproducción del flujo de eventos.Through this mechanism, checkpointing enables both failover resiliency and event stream replay.

Importante

El servicio Event Hubs proporciona desplazamientos.Offsets are provided by the Event Hubs service. Es responsabilidad del consumidor crear puntos de comprobación a medida que se procesan los eventos.It is the responsibility of the consumer to checkpoint as events are processed.

Nota

Si usa Azure Blob Storage como el almacén de puntos de comprobación en un entorno que admite una versión diferente del SDK de blobs de almacenamiento que las que normalmente están disponibles en Azure, tendrá que utilizar código para cambiar la versión de la API del servicio de almacenamiento a la versión admitida por ese entorno.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. Por ejemplo, si ejecuta Event Hubs en una instancia de Azure Stack Hub versión 2002, la versión más alta disponible para el servicio Storage es 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. En este caso, tendrá que usar código para establecer como destino la versión de la API del servicio Storage en 2017-11-09.In this case, you need to use code to target the Storage service API version to 2017-11-09. Para obtener un ejemplo de cómo establecer como destino una versión específica de la API de Storage, vea estos ejemplos en GitHub:For an example on how to target a specific Storage API version, see these samples on GitHub:

Tareas comunes del consumidorCommon consumer tasks

Todos los consumidores de Event Hubs se conectan a través de una sesión de AMQP 1.0, un canal de comunicación bidireccional con estado.All Event Hubs consumers connect via an AMQP 1.0 session, a state-aware bidirectional communication channel. Cada partición tiene una sesión de AMQP 1.0 que facilita el transporte de eventos que deben separarse por partición.Each partition has an AMQP 1.0 session that facilitates the transport of events segregated by partition.

Conexión a una particiónConnect to a partition

Es una práctica habitual al conectarse a particiones usar un mecanismo de concesiones para coordinar las conexiones del lector a particiones concretas.When connecting to partitions, it's common practice to use a leasing mechanism to coordinate reader connections to specific partitions. De este modo, es posible que cada partición de un grupo de consumidores solo tenga un lector activo.This way, it's possible for every partition in a consumer group to have only one active reader. Los puntos de comprobación, la concesión y la administración de lectores se simplifican mediante el uso de los clientes de los SDK de Event Hubs, que actúan como agentes de consumidor inteligentes.Checkpointing, leasing, and managing readers are simplified by using the clients within the Event Hubs SDKs, which act as intelligent consumer agents. Dichos componentes son:These are:

Lectura de eventosRead events

Después de abrir una sesión de AMQP 1.0 y el vínculo de una partición específica, el servicio de Centros de eventos entrega los eventos al cliente de AMQP 1.0.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. Este mecanismo de entrega permite un mayor procesamiento y una menor latencia que los mecanismos basados en extracción como HTTP GET.This delivery mechanism enables higher throughput and lower latency than pull-based mechanisms such as HTTP GET. Los eventos se envían al cliente, cada instancia de datos de eventos contiene metadatos importantes, como el número de secuencia y el desplazamiento que se usan para facilitar la creación de puntos de comprobación en la secuencia de eventos.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.

Datos de evento:Event data:

  • OffsetOffset
  • Número de secuenciaSequence number
  • BodyBody
  • Propiedades de usuarioUser properties
  • Propiedades del sistemaSystem properties

Es su responsabilidad administrar el desplazamiento.It is your responsibility to manage the offset.

Pasos siguientesNext steps

Para obtener más información acerca de Event Hubs, visite los vínculos siguientes:For more information about Event Hubs, visit the following links: