Disponibilidad y coherencia en Event Hubs

En este artículo se proporciona información sobre la disponibilidad y la coherencia que admite Azure Event Hubs.

Disponibilidad

Azure Event Hubs extiende el riesgo de errores catastróficos de máquinas individuales o incluso de bastidores completos en clústeres que abarcan varios dominios de error dentro de un centro de recursos. Implementa la detección transparente de errores y los mecanismos de conmutación por error para que el servicio siga funcionando dentro de los niveles de servicio garantizados y, normalmente, sin interrupciones perceptibles cuando se producen estos errores.

Si se creó un espacio de nombres de Event Hubs con zonas de disponibilidad, el riesgo de interrupción se reparte entre tres instalaciones separadas físicamente, y el servicio tiene suficientes reservas de capacidad para hacer frente de inmediato a la pérdida completa y catastrófica de toda la instalación. Para más información, consulte Azure Event Hubs: recuperación ante desastres geográfica.

Cuando una aplicación cliente envía eventos a un centro de eventos sin especificar una partición, los eventos se distribuyen automáticamente entre las particiones del centro de eventos. Si una partición no está disponible por algún motivo, los eventos se distribuyen entre las particiones restantes. Este comportamiento permite disfrutar del máximo tiempo de actividad. En los casos de uso que requieren el tiempo de actividad máximo, se prefiere este modelo en lugar de enviar eventos a una partición específica.

Coherencia

En algunos escenarios, el orden de los eventos puede ser importante. Por ejemplo, puede que prefiera el sistema back-end para procesar un comando de actualización antes que un comando de eliminación. En este escenario, una aplicación cliente envía eventos a una partición específica para que se conserve el orden. Cuando una aplicación de consumidor consume estos eventos de la partición, se leen por orden.

Con esta configuración, tenga en cuenta que si la partición concreta a la que se realiza el envío no se encuentra disponible, recibirá una respuesta de error. Como punto de comparación, si no tiene una afinidad para una sola partición, el servicio Event Hubs envía el evento a la siguiente partición disponible.

Por lo tanto, si la alta disponibilidad es más importante, no fije como destino una partición específica (mediante la clave o el identificador de la partición). El uso de una clave o un identificador de la partición degrada la disponibilidad de un centro de eventos en el nivel de partición. En este escenario, se realiza una selección explícita entre disponibilidad (sin identificador ni clave de partición) y coherencia (anclaje de eventos a una partición específica). Para obtener información detallada sobre las particiones en Event Hubs, vea Particiones.

Apéndice

Envío de eventos sin especificar ninguna partición

Se recomienda enviar eventos a un centro de eventos sin establecer la información de la partición para permitir que el servicio Event Hubs equilibre la carga entre las particiones. Consulte las siguientes guías de inicio rápido para aprender a hacerlo en distintos lenguajes de programación.

Envío de eventos a una partición específica

En esta sección aprenderá a enviar eventos a una partición específica mediante distintos lenguajes de programación.

Para enviar eventos a una partición específica, cree el lote mediante el método EventHubProducerClient.CreateBatchAsync. Para ello, especifique PartitionId o PartitionKey en CreateBatchOptions. El código siguiente envía un lote de eventos a una partición específica mediante la especificación de una clave 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.

var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);

También puede usar el método EventHubProducerClient.SendAsync. Para ello, especifique PartitionId o PartitionKey en SendEventOptions.

var sendEventOptions  = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)

Pasos siguientes

Para más información acerca de Event Hubs, visite los vínculos siguientes: