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.

Espacio de nombresNamespace

Un espacio de nombres de Event Hubs proporciona un contenedor con un único ámbito, al que hace referencia su nombre de dominio completo, en el que puede crear uno o varios centros de eventos o temas de Kafka.An Event Hubs namespace provides a unique scoping container, referenced by its fully qualified domain name, in which you create one or more event hubs or Kafka topics.

Event Hubs para Apache KafkaEvent Hubs for Apache Kafka

Esta característica proporciona un punto de conexión que permite a los clientes comunicarse con Event Hubs mediante el protocolo de Kafka.This feature provides an endpoint that enables customers to talk to Event Hubs using the Kafka protocol. Esta integración proporciona a los clientes un punto de conexión de Kafka.This integration provides customers a Kafka endpoint. Esto permite a los clientes configurar sus aplicaciones existentes de Kafka para comunicarse con Event Hubs, lo que proporciona una alternativa a ejecutar sus propios clústeres de Kafka.This enables customers to configure their existing Kafka applications to talk to Event Hubs, giving an alternative to running their own Kafka clusters. Event Hubs para Apache Kafka es compatible con el protocolo de Kafka 1.0 y versiones posterior.Event Hubs for Apache Kafka supports Kafka protocol 1.0 and later.

Con esta integración, no es necesario ejecutar clústeres de Kafka ni administrarlos con Zookeeper.With this integration, you don't need to run Kafka clusters or manage them with Zookeeper. Esto también permite trabajar con algunas de las características más exigentes de Event Hubs, como captura, inflado automático y recuperación ante desastres geográfica.This also allows you to work with some of the most demanding features of Event Hubs like Capture, Auto-inflate, and Geo-disaster Recovery.

Esta integración también permite a las aplicaciones, como Mirror Maker, o a marcos como Kafka Connect, funcionar sin clúster con tan solo unos cambios de configuración.This integration also allows applications like Mirror Maker or framework like Kafka Connect to work clusterless with just configuration changes.

Publicadores de eventosEvent publishers

Cualquier entidad que envíe datos a un centro de eventos es un productor de eventos o un publicador de eventos.Any entity that sends data to an event hub is an event producer, or event publisher. Los publicadores de eventos pueden publicar eventos mediante HTTPS o AMQP 1.0 o Kafka 1.0 y versiones posteriores.Event publishers can publish events using HTTPS or AMQP 1.0 or Kafka 1.0 and later. Los publicadores de eventos usan un token de firma de acceso compartido (SAS) para identificarse en un centro de eventos y pueden tener una identidad única o usar un token de SAS común.Event publishers use a Shared Access Signature (SAS) token to identify themselves to an event hub, and can have a unique identity, or use a common SAS token.

Publicación de un eventoPublishing an event

Puede publicar un evento a través de AMQP 1.0, Kafka 1.0 y versiones posteriores o HTTPS.You can publish an event via AMQP 1.0, Kafka 1.0 (and later), or HTTPS. Event Hubs ofrece bibliotecas cliente y clases para publicar eventos en un centro de eventos de clientes .NET.Event Hubs provides client libraries and classes for publishing events to an event hub from .NET clients. 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. Puede publicar eventos individualmente o por lotes.You can publish events individually, or batched. Una sola publicación (instancia de datos de eventos) tiene un límite de 1 MB, independientemente de si es un evento único o un lote.A single publication (event data instance) 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 producirá un error.Publishing events larger than this threshold results in an error. Es una práctica recomendada para los publicadores desconocer las particiones en el centro de eventos y solo especificar una clave de partición (que se presenta en la sección siguiente), o su identidad mediante su token de SAS.It is a best practice for publishers to be unaware of partitions within the event hub and to only specify a partition key (introduced in the next section), or their identity via their SAS token.

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 SSL adicional para cada solicitud.AMQP has higher network costs when initializing the session, however HTTPS requires additional SSL overhead for every request. AMQP tiene un mayor rendimiento para los publicadores frecuentes.AMQP has higher performance for frequent publishers.

Event Hubs

Event Hubs garantiza que todos los eventos que comparten un valor de clave de partición se entregan por orden y en la misma partición.Event Hubs ensures that all events sharing a partition key value are delivered in order, and to the same partition. 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.

Directiva del publicadorPublisher policy

Los Centros de eventos 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.

CaptureCapture

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 proporciona streaming de mensajes mediante un patrón de consumidor con particiones en el que cada consumidor lee solo un subconjunto específico o una partición del flujo de mensajes.Event Hubs provides message streaming through a partitioned consumer pattern in which each consumer only reads a specific subset, or partition, of the message stream. Este patrón permite un escalado horizontal para el procesamiento de eventos y ofrece otras características centradas en los flujos que no están disponibles en las colas y los temas.This pattern enables horizontal scale for event processing and provides other stream-focused features that are unavailable in queues and topics.

Una partición es una secuencia ordenada de eventos que se mantiene en un centro de eventos.A partition is an ordered sequence of events that is held in an event hub. A medida que llegan eventos más recientes, se agregan al final de esta secuencia.As newer events arrive, they are 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."

Event Hubs

Event Hubs retiene datos durante un tiempo de retención configurado que se aplica a todas las particiones del centro de eventos.Event Hubs retains data for a configured retention time that applies across all partitions in the event hub. Los eventos expiran en función del tiempo; no se pueden eliminar explícitamente.Events expire on a time basis; you cannot explicitly delete them. 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.

Event Hubs

El número de particiones se especifica en el momento de la creación y debe estar comprendido entre 2 y 32.The number of partitions is specified at creation and must be between 2 and 32. El número de particiones no es modificable, por lo que debería tener en cuenta la escala a largo plazo a la hora de configurar este número.The partition count is not changeable, so you should consider long-term scale when setting partition count. Las particiones son un mecanismo de organización de datos relacionado con el paralelismo de bajada necesario para consumir las aplicaciones.Partitions are a data organization mechanism that relates to the downstream parallelism required in consuming applications. El número de particiones de un centro de eventos está directamente relacionado con el número de lectores simultáneos que espera tener.The number of partitions in an event hub directly relates to the number of concurrent readers you expect to have. Puede aumentar el número de particiones más allá de 32 poniéndose en contacto con el equipo de Event Hubs.You can increase the number of partitions beyond 32 by contacting the Event Hubs team.

Es posible que quiera establecer el valor lo más alto posible, que es 32, en el momento de la creación.You may want to set it to be the highest possible value, which is 32, at the time of creation. Recuerde que, si hay más de una partición, los eventos se enviarán a varias particiones sin conservar el orden, a menos que configure los remitentes para que solo realicen el envío a una única partición de las 32, lo que hará que las 31 restantes sean redundantes.Remember that having more than one partition will result in events sent to multiple partitions without retaining the order, unless you configure senders to only send to a single partition out of the 32 leaving the remaining 31 partitions redundant. En el primer caso, tendrá que leer eventos en las 32 particiones.In the former case, you will have to read events across all 32 partitions. En el último caso, no hay ningún costo adicional obvio aparte de la configuración adicional que debe realizar en el host del procesador de eventos.In the latter case, there is no obvious additional cost apart from the extra configuration you have to make on Event Processor Host.

Aunque las particiones son identificables y se pueden realizar envíos a estas directamente, no se recomienda hacerlo.While partitions are identifiable and can be sent to directly, sending directly to a partition is 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.

Las particiones se rellenan con una secuencia de datos de eventos que contienen el cuerpo del evento, un contenedor de propiedades definidas por el usuario y diversos metadatos, como su desplazamiento en la partición y su número en la secuencia de streaming.Partitions are filled with a sequence of event data that contains the body of the event, a user-defined property bag, and metadata such as its offset in the partition and its number in the stream sequence.

Se recomienda equilibrar las unidades de procesamiento y las particiones 1:1 para lograr una escalabilidad óptima.We recommend that you balance 1:1 throughput units and partitions to achieve optimal scale. Una sola partición tiene una entrada y una salida garantizadas de hasta una unidad de procesamiento.A single partition has a guaranteed ingress and egress of up to one throughput unit. Aunque puede lograr un mayor procesamiento en una partición, no se garantiza el rendimiento.While you may be able to achieve higher throughput on a partition, performance is not guaranteed. Por este motivo, se recomienda encarecidamente que el número de particiones en un centro de eventos sea mayor o igual que el número de unidades de procesamiento.This is why we strongly recommend that the number of partitions in an event hub be greater than or equal to the number of throughput units.

Dado el procesamiento total que planea necesitar, conoce el número de unidades de procesamiento que precisa y el número mínimo de particiones, pero, ¿cuántas particiones debería tener?Given the total throughput you plan on needing, you know the number of throughput units you require and the minimum number of partitions, but how many partitions should you have? Elija el número de particiones en función del paralelismo de bajada que quiere conseguir, así como de las futuras necesidades de procesamiento.Choose number of partitions based on the downstream parallelism you want to achieve as well as your future throughput needs. No hay ningún cargo por el número de particiones que tiene dentro de un centro de eventos.There is no charge for the number of partitions you have within an Event Hub.

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 más información acerca de cómo trabajar 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.

A continuación se muestran ejemplos de la convención URI del grupo de consumidores:The following are examples of 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:

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 los Centros de eventos.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.

Event Hubs

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.

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 is 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 is 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 simplifica mediante el uso de la clase EventProcessorHost para los clientes de .NET.Checkpointing, leasing, and managing readers are simplified by using the EventProcessorHost class for .NET clients. El host del procesador de eventos es un agente de consumidor inteligente.The Event Processor Host is an intelligent consumer agent.

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
  • CuerpoBody
  • 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: