Eventhubs PDF
Eventhubs PDF
Eventhubs PDF
Azure Event Hubs es una plataforma de streaming de macrodatos y un servicio de ingesta de eventos.
Puede recibir y procesar millones de eventos por segundo. Los datos enviados a un centro de eventos se
pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o adaptadores de
procesamiento por lotes y almacenamiento.
Los siguientes escenarios son algunos de los casos donde se puede usar Event Hubs:
Detección de anomalías (fraude/valores atípicos)
Registro de aplicaciones
Canalizaciones de análisis, como secuencias de clics
Paneles en vivo
Archivado de datos
Procesamiento de transacciones
Procesamiento de telemetría de usuario
Streaming de telemetría de dispositivo
https://www.youtube.com/embed/45wgY-VSk9I
Escalable
Con Event Hubs, puede comenzar con los flujos de datos en megabytes y aumentar a gigabytes o
terabytes. La característica de inflado automático es una de las muchas opciones disponibles para escalar
el número de unidades de procesamiento con el fin de satisfacer las necesidades de uso.
Ecosistema enriquecido
Event Hubs para ecosistemas de Apache Kafka permite que aplicaciones y clientes de Apache Kafka (1.0 y
posteriores) se comuniquen con Event Hubs. No es necesario configurar ni administrar sus propios
clústeres de Kafka.
Con un ecosistema amplio disponible en diversos lenguajes, como .NET, Java, Python o JavaScript, puede
empezar a procesar fácilmente los flujos desde Event Hubs. Todos los lenguajes de cliente compatibles
proporcionan integración de nivel bajo. El ecosistema también proporciona una perfecta integración con
servicios de Azure como Azure Stream Analytics y Azure Functions, lo que permite crear arquitecturas sin
servidor.
Pasos siguientes
Para empezar a usar Event Hubs, consulte los tutoriales sobre envío y recepción de eventos :
.NET Core
Java
Python
JavaScript
Go
C (solo enviar)
Apache Storm (solo recibir)
Para obtener más información sobre Event Hubs, consulte los siguientes artículos:
Información general de las características de Event Hubs
Preguntas más frecuentes.
Uso de Azure Event Hubs desde aplicaciones de
Apache Kafka
18/08/2020 • 9 minutes to read • Edit Online
Event Hubs proporciona un punto de conexión de Kafka que las aplicaciones basadas en Kafka existentes
pueden usar como alternativa a la ejecución de su propio clúster de Kafka. Event Hubs admite el protocolo de
Apache Kafka 1.0 y versiones más recientes y funciona con las aplicaciones existentes de Kafka, incluida
MirrorMaker.
Partition Partition
Offset Offset
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler;
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
NOTE
Al usar la autenticación de SAS con los clientes de Kafka, las conexiones establecidas no se desconectan cuando se vuelve
a generar la clave SAS.
Ejemplos
Para leer un tutorial con instrucciones paso a paso para crear un centro de eventos y acceder a él mediante
SAS u OAuth, consulte Inicio rápido: Streaming de datos con Event Hubs mediante el protocolo de Kafka.
Para obtener más ejemplos que muestran cómo usar OAuth con Event Hubs para Kafka, vea ejemplos en
GitHub.
Otras características de Event Hubs disponibles para Kafka
La característica Event Hubs para Kafka le permite escribir con un protocolo y leer con otro, para que los
productores de Kafka actuales puedan seguir publicando a través de Kafka y usted pueda agregar lectores con
Event Hubs, como Azure Stream Analytics o Azure Functions. Además, las características de Event Hubs como
Capture y Recuperación ante desastres geográfica también funcionan con la característica Event Hubs para
Kafka.
Pasos siguientes
En este artículo se proporciona una introducción a Event Hubs para Kafka. Para más información, consulte Guía
del desarrollador de Apache Kafka para Azure Event Hubs.
Captura de eventos a través de Azure Event Hubs
en Azure Blob Storage o Azure Data Lake Storage
18/08/2020 • 14 minutes to read • Edit Online
Azure Event Hubs permite capturar automáticamente los datos de streaming de Event Hubs de la cuenta de
Azure Blob Storage o de Azure Data Lake Storage Gen1 o Gen2 que prefiera, con la flexibilidad adicional de
especificar un intervalo de tiempo o de tamaño. La configuración de Capture es rápida, su ejecución no tiene
costes administrativos y se escala automáticamente con las unidades de procesamiento de Event Hubs. El uso
de Event Hubs Capture constituye la forma más sencilla de cargar datos de streaming en Azure y permite
centrarse en el procesamiento de datos, en lugar de en su captura.
NOTE
La configuración de Event Hubs Capture para usar Azure Data Lake Storage Gen2 es la misma que la configuración
para utilizar una instancia de Azure Blob Storage. Para obtener información, consulte Configuración de Event Hubs
Capture.
Event Hubs Capture permite procesar las canalizaciones en tiempo real y las basadas en lotes en la misma
transmisión, lo que permite crear soluciones que crecen a la par que sus necesidades. Si ya está creando
sistemas basados en lotes pensando en un futuro procesamiento en tiempo real o desea agregar una ruta de
acceso inactiva eficaz a una solución en tiempo real existente, Event Hubs Capture facilita el trabajo con datos
de streaming.
Tenga en cuenta que los valores de fecha se rellenan con ceros. Un ejemplo de nombre de archivo podría ser
el siguiente:
https://mystorageaccount.blob.core.windows.net/mycontainer/mynamespace/myeventhub/0/2017/12/08/03/03/17.av
ro
En caso de que Azure Storage Blob está temporalmente no disponible, Event Hubs Capture retendrá los datos
durante el período de retención de datos configurado en el centro de eventos y volverá a rellenar los datos
una vez que la cuenta de almacenamiento esté disponible nuevamente.
Escalado a unidades de procesamiento
El tráfico de los Event Hubs lo controlan las unidades de procesamiento. Una sola unidad de procesamiento
permite una entrada de 1 MB/s o 1000 eventos por segundo y una salida que duplica esas cifras. Event Hubs
estándar se puede configurar con entre 1 y 20 unidades de procesamiento, y puede adquirir más a través de
una solicitud de aumento de cuota al equipo de soporte técnico. El uso por encima de las unidades de
procesamiento adquiridas está limitado. Event Hubs Capture copia los datos directamente del
almacenamiento interno de Event Hubs, omite las cuotas de salida de unidades de procesamiento y guarda la
salida para otros lectores de procesamiento como Stream Analytics o Spark.
Una vez configurado, Event Hubs Capture se ejecuta automáticamente cuando se envía el primer evento y
continúa ejecutándose. Para facilitar que el procesamiento de bajada sepa que el proceso funciona, Event Hubs
escribe archivos vacíos cuando no hay datos. Este proceso proporciona un marcador y una cadencia
predecibles que puede alimentar sus procesadores de lotes.
"type":"record",
"name":"EventData",
"namespace":"Microsoft.ServiceBus.Messaging",
"fields":[
{"name":"SequenceNumber","type":"long"},
{"name":"Offset","type":"string"},
{"name":"EnqueuedTimeUtc","type":"string"},
{"name":"SystemProperties","type":{"type":"map","values":
["long","double","string","bytes"]}},
{"name":"Properties","type":{"type":"map","values":["long","double","string","bytes"]}},
{"name":"Body","type":["null","bytes"]}
]
}
Avro Tools también puede utilizarse para convertir el archivo al formato JSON y realizar otro procesamiento.
Para realizar un procesamiento más avanzado, descargue e instale Avro para la plataforma que desee. En el
momento de redactar este artículo, existen implementaciones para C, C++, C#, Java, NodeJS, Perl, PHP, Python
y Ruby.
Apache Avro tiene guías de introducción para Java y Python muy completas. También puede leer el artículo
Getting started with Event Hubs Capture (Introducción a Event Hubs Capture).
Pasos siguientes
Event Hubs Capture es el modo más sencillo de obtener datos en Azure. Con Azure Data Lake, Azure Data
Factory y Azure HDInsight, se puede realizar el procesamiento por lotes y cualquier otro análisis mediante las
plataformas y herramientas conocidas a la escala que necesite.
Aprenda a habilitar esta característica mediante Azure Portal y una plantilla de Azure Resource Manager:
Uso de Azure Portal para habilitar la captura de Event Hubs
Uso de una plantilla de Azure Resource Manager para habilitar Event Hubs Capture
Introducción a Event Hubs dedicado
18/08/2020 • 10 minutes to read • Edit Online
Los clústeres de Event Hubs disponen de implementaciones con un único inquilino, ideales para aquellos clientes
con las necesidades de streaming más exigentes. Esta oferta de inquilino único tiene un acuerdo de nivel de
servicio garantizado del 99,99 % y solo está disponible en el plan de tarifa Dedicado. Los clústeres de Event Hubs
pueden admitir la entrada de millones de eventos por segundo con una capacidad garantizada y una latencia
inferior a un segundo. Los espacios de nombres y los centros de eventos creados en el clúster Dedicado incluyen
todas las características de la oferta Estándar y muchas otras, pero sin imponer límites de entrada. También
incluye la popular característica Event Hubs Capture sin costo adicional, que permite crear lotes de flujos de
datos y transmitirlos a Azure Storage o Azure Data Lake de forma automática.
Los clústeres se aprovisionan y facturan por unidades de capacidad (CU) , una cantidad de recursos de CPU y
memoria asignada previamente. Puede adquirir 1, 2, 4, 8, 12, 16 o 20 CU para cada clúster. La cantidad de datos
que se puede ingerir y transmitir en cada unidad de capacidad depende de diversos factores, como el número de
productores y consumidores, la forma de la carga y la velocidad de salida (consulte los resultados de las pruebas
comparativas a continuación para más información).
NOTE
De forma predeterminada, todos los clústeres de Event Hubs están habilitados para Kafka y admiten puntos de conexión
de Kafka que se pueden usar en las aplicaciones existentes basadas en esta plataforma. El hecho de tener habilitado Kafka
en el clúster no afectará a otros casos de uso que no estén relacionados con Kafka, por lo que no existe la opción ni la
necesidad de deshabilitar Kafka en un clúster.
Grupos de consumidores 20 por centro de eventos Sin límite por CU, 1000 por centro de
eventos
Conexiones asincrónicas 1000 incluidas, 5000 como máximo 100 000 incluidos y como máximo
¿Cómo incorporarlo?
La experiencia de autoservicio para crear un clúster de Event Hubs en Azure Portal está ahora en versión
preliminar. Si tiene alguna pregunta o necesita ayuda para empezar a utilizar Event Hubs dedicado, póngase en
contacto con el equipo de Event Hubs.
A N C H O DE M EN SA JES A N C H O DE
F O RM A DE REC EP TO RE B A N DA DE DE B A N DA DE M EN SA JES TU
L A C A RGA S EN T RA DA EN T RA DA SA L IDA DE SA L IDA TOTA L ES T U POR C U
Lotes de 2 400 MB/s 400 000 m 800 MB/s 800 000 m 400 TU 100 TU
100 x 1 KB ensajes/s ensajes/s
Lotes de 10 2 666 MB/s 66 600 me 1,33 GB/s 133 000 m 666 TU 166 TU
x 10 KB nsajes/s ensajes/s
Pasos siguientes
Póngase en contacto con un representante de ventas o con el Soporte técnico de Microsoft para obtener detalles
adicionales sobre Event Hubs dedicado. También puede crear un clúster u obtener más información sobre los
planes de tarifa de Event Hubs en los vínculos siguientes:
Creación de un clúster de Event Hubs con Azure Portal
Precios de Event Hubs dedicado. También puede ponerse en contacto con su representante de ventas de
Microsoft o el Servicio de soporte técnico de Microsoft para obtener detalles adicionales sobre la capacidad
dedicada de Event Hubs.
En Preguntas más frecuentes sobre Event Hubs se proporciona información sobre los precios, así como
respuestas a algunas preguntas frecuentes acerca de Event Hubs.
Inicio rápido: Creación de un centro de eventos
mediante Azure Portal
18/08/2020 • 7 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y
almacenar eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos
enviados a un centro de eventos se pueden transformar y almacenar con cualquier proveedor de análisis
en tiempo real o adaptadores de procesamiento por lotes y almacenamiento. Para más información sobre
Event Hubs, consulte Introducción a Event Hubs y Características de Event Hubs.
En esta guía de inicio rápido se crea un centro de eventos mediante Azure Portal.
Prerrequisitos
Para completar esta guía de inicio rápido, asegúrese de que tiene:
Suscripción de Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Visual Studio 2019 o posterior.
SDK de .NET Standard, versión 2.0 o posterior.
NOTE
Azure Event Hubs proporciona un punto de conexión de Kafka. Este punto de conexión permite que
el espacio de nombres de Event Hubs entienda el protocolo de mensajes y las API de Apache Kafka.
Con esta funcionalidad, puede comunicarse con las instancias de Event Hubs como lo haría con
temas de Kafka sin cambiar los clientes de protocolo ni ejecutar sus propios clústeres. Admite Apache
Kafka versión 1.0. y versiones posteriores. Para más información, consulte Uso de Azure Event Hubs
desde aplicaciones de Apache Kafka.
4. Puede comprobar el estado de la creación del centro de eventos en las alertas. Una vez creado el
centro de eventos, puede verlo en la lista de centros de eventos como se muestra en la siguiente
imagen:
Pasos siguientes
En este artículo, ha creado un grupo de recursos, un espacio de nombres de Event Hubs y un centro de
eventos. Para encontrar instrucciones paso a paso sobre cómo enviar eventos a un centro de eventos o
recibirlos de este, consulte los tutoriales sobre envío y recepción de eventos :
.NET Core
Java
Python
JavaScript
Go
C (solo enviar)
Apache Storm (solo recibir)
Guía de inicio rápido: Creación de un centro de
eventos mediante la CLI de Azure
18/08/2020 • 6 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y almacenar
eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos enviados a un centro de
eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o adaptadores de
procesamiento por lotes y almacenamiento. Para más información sobre Event Hubs, consulte Introducción a Event
Hubs y Características de Event Hubs.
En esta guía de inicio rápido se crea un centro de eventos mediante la CLI de Azure.
Prerequisites
Para completar esta guía de inicio rápido, necesita una suscripción de Azure. Si no tiene una, cree una cuenta
gratuita antes de empezar.
az login
Establezca el contexto de la suscripción actual. Reemplace MyAzureSub por el nombre de la suscripción de Azure
que desea usar:
# Create an Event Hubs namespace. Specify a name for the Event Hubs namespace.
az eventhubs namespace create --name <Event Hubs namespace> --resource-group <resource group name> -l <region,
for example: East US>
Felicidades. Ha usado la CLI de Azure para crear un espacio de nombres de Event Hubs y un centro de eventos
dentro de ese espacio de nombres.
Pasos siguientes
En este artículo, ha creado un grupo de recursos, un espacio de nombres de Event Hubs y un centro de eventos.
Para encontrar instrucciones paso a paso sobre cómo enviar eventos a un centro de eventos o recibirlos de este,
consulte los tutoriales sobre envío y recepción de eventos :
.NET Core
Java
Python
JavaScript
Go
C (solo enviar)
Apache Storm (solo recibir)
Inicio rápido: Creación de un centro de eventos
mediante Azure PowerShell
18/08/2020 • 6 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y almacenar
eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos enviados a un centro de
eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o adaptadores de
procesamiento por lotes y almacenamiento. Para más información sobre Event Hubs, consulte Introducción a Event
Hubs y Características de Event Hubs.
En esta guía de inicio rápido se crea un centro de eventos mediante Azure PowerShell.
Prerrequisitos
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Felicidades. Ha usado Azure PowerShell para crear un espacio de nombres de Event Hubs y un centro de eventos
dentro de ese espacio de nombres.
Pasos siguientes
En este artículo, ha creado el espacio de nombres de Event Hubs y ha usado aplicaciones de ejemplo para enviar
eventos al centro de eventos y recibirlos de este. Para encontrar instrucciones paso a paso sobre cómo enviar
eventos a un centro de eventos o recibirlos de este, consulte los tutoriales sobre envío y recepción de eventos :
.NET Core
Java
Python
JavaScript
Go
C (solo enviar)
Apache Storm (solo recibir)
Inicio rápido: Creación de un centro de eventos
mediante una plantilla de Resource Manager
18/08/2020 • 5 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y almacenar
eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos enviados a un centro de
eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o adaptadores de
procesamiento por lotes y almacenamiento. Para más información sobre Event Hubs, consulte Introducción a Event
Hubs y Características de Event Hubs. En este inicio rápido, creará un centro de eventos mediante una plantilla de
Azure Resource Manager. Puede implementar una plantilla de Resource Manager para crear un espacio de
nombres de tipo Event Hubs, con un centro de eventos.
Una plantilla de Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define la
infraestructura y la configuración del proyecto. La plantilla usa sintaxis declarativa, lo que permite establecer lo que
pretende implementar sin tener que escribir la secuencia de comandos de programación para crearla.
Si su entorno cumple los requisitos previos y está familiarizado con el uso de plantillas de Resource Manager,
seleccione el botón Implementar en Azure . La plantilla se abrirá en Azure Portal.
Requisitos previos
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Revisión de la plantilla
La plantilla usada en este inicio rápido forma parte de las plantillas de inicio rápido de Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"projectName":{
"type": "string",
"metadata": {
"description": "Specifies a project name that is used to generate the Event Hub name and the Namespace
name."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specifies the Azure location for all resources."
}
},
"eventHubSku": {
"type": "string",
"allowedValues": [ "Basic", "Standard" ],
"defaultValue": "Standard",
"metadata": {
"description": "Specifies the messaging tier for Event Hub Namespace."
}
}
},
"variables": {
"eventHubNamespaceName": "[concat(parameters('projectName'), 'ns')]",
"eventHubName": "[parameters('projectName')]"
},
"resources": [
{
"apiVersion": "2017-04-01",
"type": "Microsoft.EventHub/namespaces",
"name": "[variables('eventHubNamespaceName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('eventHubSku')]",
"tier": "[parameters('eventHubSku')]",
"capacity": 1
},
"properties": {
"isAutoInflateEnabled": false,
"maximumThroughputUnits": 0
}
},
{
"apiVersion": "2017-04-01",
"type": "Microsoft.EventHub/namespaces/eventhubs",
"name": "[concat(variables('eventHubNamespaceName'), '/', variables('eventHubName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces', variables('eventHubNamespaceName'))]"
],
"properties": {
"messageRetentionInDays": 7,
"partitionCount": 1
}
}
]
}
Implementación de la plantilla
Para implementar la plantilla:
1. Seleccione Probar en el bloque de código siguiente y luego siga las instrucciones para iniciar sesión en
Azure Cloud Shell.
$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$resourceGroupName = "${projectName}rg"
$templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-eventhubs-
create-namespace-and-eventhub/azuredeploy.json"
Validación de la implementación
Para comprobar la implementación, puede abrir el grupo de recursos desde Azure Portal o usar el script de
Azure PowerShell siguiente. Si Cloud Shell sigue abierto, no es necesario copiar ni ejecutar la primera línea (Read-
Host).
$projectName = Read-Host -Prompt "Enter the same project name that you used in the last procedure"
$resourceGroupName = "${projectName}rg"
$namespaceName = "${projectName}ns"
Limpieza de recursos
Cuando los recursos de Azure ya no sean necesarios, limpie los recursos que implementó eliminando el grupo de
recursos. Si Cloud Shell sigue abierto, no es necesario copiar ni ejecutar la primera línea (Read-Host).
$projectName = Read-Host -Prompt "Enter the same project name that you used in the last procedure"
$resourceGroupName = "${projectName}rg"
Pasos siguientes
En este artículo, creo un espacio de nombres de Event Hubs y un centro de eventos en el espacio de nombres. Para
encontrar instrucciones paso a paso sobre cómo enviar eventos a un centro de eventos o recibirlos de este,
consulte los tutoriales sobre envío y recepción de eventos :
.NET Core
Java
Python
JavaScript
Go
C (solo enviar)
Apache Storm (solo recibir)
Envío y recepción de eventos desde Azure Event
Hubs: .NET (Azure.Messaging.EventHubs)
18/08/2020 • 14 minutes to read • Edit Online
En este inicio rápido se muestra cómo enviar y recibir eventos desde un centro de eventos mediante la
biblioteca de .NET Azure.Messaging.EventHubs .
IMPORTANT
Este inicio rápido usa la nueva biblioteca del servicio Azure.Messaging.EventHubs . Para ver un inicio rápido que use la
biblioteca Microsoft.Azure.EventHubs anterior, consulte Envío y recepción de eventos mediante la biblioteca
Microsoft.Azure.EventHubs.
Prerrequisitos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de
continuar con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure Event
Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse para
obtener una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al crear una
cuenta.
Microsoft Visual Studio 2019 . La biblioteca cliente de Azure Event Hubs utiliza las nuevas características
que se introdujeron en C# 8.0. Aunque puede seguir usando la biblioteca con versiones anteriores de C#, la
nueva sintaxis no estará disponible. Para usar la sintaxis completa, se recomienda realizar la compilación con
el SDK de .NET Core 3.0 o superior y la versión de lenguaje establecida en latest . Si usa Visual Studio, las
versiones anteriores a Visual Studio 2019 no son compatibles con las herramientas necesarias para compilar
proyectos de C# 8.0. Visual Studio 2019, incluida la edición gratuita Community, se puede descargar aquí.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso consiste
en usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio
de nombres y un centro de eventos, siga el procedimiento que se indica en este artículo. Después, obtenga la
cadena de conexión para el espacio de nombres de Event Hubs . Para ello, siga las instrucciones del
artículo: Obtenga la cadena de conexión. La utilizará más adelante en este inicio rápido.
Envío de eventos
En esta sección se muestra cómo crear una aplicación de consola de .NET Core para enviar eventos a un centro
de eventos.
Creación de una aplicación de consola
1. Inicie Visual Studio 2019.
2. Seleccione Crear un proyecto .
3. En el cuadro de diálogo Crear un nuevo proyecto , siga estos pasos: Si no ve este cuadro de diálogo,
seleccione Archivo en el menú, seleccione Nuevo y, después, seleccione Proyecto .
a. Seleccione C# como lenguaje de programación.
b. Seleccione Consola como tipo de aplicación.
c. Seleccione Aplicación de consola (.NET Core) en la lista de resultados.
d. Después, seleccione Siguiente .
Install-Package Azure.Messaging.EventHubs
2. Agregue constantes a la clase Program de la cadena de conexión de Event Hubs y del nombre del centro
de eventos. Reemplace los marcadores de posición entre llaves por los valores adecuados que recibió al
crear el centro de eventos. Asegúrese de que {Event Hubs namespace connection string} es la cadena de
conexión en el nivel de espacio de nombres y no la cadena de Event Hub.
3. Reemplace el método Main por el siguiente método async Main . Vea los comentarios de código para
obtener más detalles.
// Use the producer client to send the batch of events to the event hub
await producerClient.SendAsync(eventBatch);
Console.WriteLine("A batch of 3 events has been published.");
}
}
Recepción de eventos
En esta sección se muestra cómo escribir una aplicación de consola de .NET Core que reciba mensajes de un
centro de eventos mediante un procesador de eventos. El procesador de eventos simplifica la recepción de
eventos desde centros de eventos mediante la administración de puntos de control persistentes y las
recepciones paralelas desde esos centros de eventos. Un procesador de eventos está asociado a un centro de
eventos concreto y a un grupo de consumidores. Recibe eventos de varias particiones del centro de eventos y
los pasa a un controlador delegado para que realice el procesamiento mediante el código que se ha
especificado.
NOTE
Si trabaja en Azure Stack Hub, esa plataforma puede admitir una versión diferente del SDK de Blob Storage que las que
suelen estar disponibles en Azure. Por ejemplo, si trabaja en la versión 2002 de Azure Stack Hub, la versión más alta
disponible para el servicio Storage es 2017-11-09. En este caso, además de seguir los pasos de esta sección, también
tendrá que agregar código para usar como destino la versión 2017-11-09 de la API del servicio de almacenamiento.
Consulte este ejemplo en GitHub para ver cómo usar como destino una versión específica de la API de Storage. Para más
información sobre las versiones del servicio Azure Storage que se admiten en Azure Stack Hub, consulte Almacenamiento
de Azure Stack Hub: diferencias y consideraciones.
Install-Package Azure.Messaging.EventHubs
Install-Package Azure.Messaging.EventHubs.Processor
using System.Text;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Azure.Messaging.EventHubs;
using Azure.Messaging.EventHubs.Consumer;
using Azure.Messaging.EventHubs.Processor;
2. Agregue constantes a la clase Program de la cadena de conexión de Event Hubs y del nombre del centro
de eventos. Reemplace los marcadores de posición entre llaves por los valores adecuados que recibió al
crear el centro de eventos. Reemplace los marcadores de posición entre llaves por los valores adecuados
que recibió al crear el centro de eventos y la cuenta de almacenamiento (claves de acceso y cadena de
conexión principal). Asegúrese de que {Event Hubs namespace connection string} es la cadena de
conexión en el nivel de espacio de nombres y no la cadena de Event Hub.
3. Reemplace el método Main por el siguiente método async Main . Vea los comentarios de código para
obtener más detalles.
static async Task Main()
{
// Read from the default consumer group: $Default
string consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName;
// Create a blob container client that the event processor will use
BlobContainerClient storageClient = new BlobContainerClient(blobStorageConnectionString,
blobContainerName);
// Update checkpoint in the blob storage so that the app receives only new events the next
time it's run
await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken);
}
NOTE
Para ver el código fuente completo con comentarios muy útiles, consulte este archivo en GitHub.
Pasos siguientes
Consulte los ejemplos de GitHub.
Ejemplos de Event Hubs en GitHub
Ejemplos de procesador de eventos en GitHub
Control de acceso basado en rol (RBAC): Ejemplos
Use Java para enviar eventos a Azure Event Hubs o
recibir eventos de él (azure-messaging-eventhubs)
18/08/2020 • 12 minutes to read • Edit Online
En este inicio rápido se muestra cómo enviar y recibir eventos desde un centro de eventos mediante el paquete
de Java azure-messaging-eventhubs .
IMPORTANT
Este inicio rápido usa el nuevo paquete azure-messaging-eventhubs . Para ver un inicio rápido que use los paquetes
azure-eventhubs y azure-eventhubs-eph anteriores, consulte Envío y recepción de eventos mediante azure-
eventhubs y azure-eventhubs-eph.
Requisitos previos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de
continuar con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure Event
Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse para
obtener una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al crear una
cuenta.
Un entorno de desarrollo de Java. Este inicio rápido utiliza Eclipse. Se requiere el kit de desarrollo de Java
(JDK), versión 8 o posteriores.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso consiste
en usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio
de nombres y un centro de eventos, siga el procedimiento que se indica en este artículo. Después, obtenga la
cadena de conexión para el espacio de nombres de Event Hubs . Para ello, siga las instrucciones del
artículo: Obtenga la cadena de conexión. La utilizará más adelante en este inicio rápido.
Envío de eventos
En esta sección se muestra cómo crear una aplicación de Java para enviar eventos a un centro de eventos.
Incorporación de una referencia a la biblioteca de Azure Event Hubs
La biblioteca de cliente de Java para Event Hubs está disponible en repositorio central de Maven. Puede hacer
referencia a esta biblioteca con la siguiente declaración de dependencia en el archivo de proyecto de Maven:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.0.1</version>
</dependency>
import com.azure.messaging.eventhubs.*;
import static java.nio.charset.StandardCharsets.UTF_8;
producer.send(batch);
Cierre y limpieza
Este código cierra el productor.
producer.close();
// create a producer using the namespace connection string and event hub name
EventHubProducerClient producer = new EventHubClientBuilder()
.connectionString(connectionString, eventHubName)
.buildProducerClient();
Compile el programa y asegúrese de que no hay errores. Este programa se ejecutará después de ejecutar el
programa del destinatario.
Recepción de eventos
El código de este tutorial se basa en el ejemplo EventProcessorClient de GitHub, que se puede examinar para ver
toda la aplicación en funcionamiento.
NOTE
Si trabaja en Azure Stack Hub, esa plataforma puede admitir una versión diferente del SDK de Blob Storage que las que
suelen estar disponibles en Azure. Por ejemplo, si trabaja en la versión 2002 de Azure Stack Hub, la versión más alta
disponible para el servicio Storage es 2017-11-09. En este caso, además de seguir los pasos de esta sección, también
tendrá que agregar código para usar como destino la versión 2017-11-09 de la API del servicio de almacenamiento.
Consulte este ejemplo en GitHub para ver cómo usar como destino una versión específica de la API de Storage. Para más
información sobre las versiones del servicio Azure Storage que se admiten en Azure Stack Hub, consulte Almacenamiento
de Azure Stack Hub: diferencias y consideraciones.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
1. Agregue las siguientes instrucciones impor t en la parte superior del archivo Java.
import com.azure.messaging.eventhubs.EventHubClientBuilder;
import com.azure.messaging.eventhubs.EventProcessorClient;
import com.azure.messaging.eventhubs.EventProcessorClientBuilder;
import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore;
import com.azure.messaging.eventhubs.models.ErrorContext;
import com.azure.messaging.eventhubs.models.EventContext;
import com.azure.storage.blob.BlobContainerAsyncClient;
import com.azure.storage.blob.BlobContainerClientBuilder;
import java.util.function.Consumer;
import java.util.concurrent.TimeUnit;
2. Cree una clase denominada Receiver y agréguele las siguientes variables de cadena. Reemplace los
marcadores de posición por los valores correctos.
// Create a builder object that you will use later to build an event processor client to receive
and process events and errors.
EventProcessorClientBuilder eventProcessorClientBuilder = new EventProcessorClientBuilder()
.connectionString(EH_NAMESPACE_CONNECTION_STRING, eventHubName)
.consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME)
.processEvent(PARTITION_PROCESSOR)
.processError(ERROR_HANDLER)
.checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient));
System.out.println("Exiting process");
}
4. Agregue los dos métodos auxiliares ( PARTITION_PROCESSOR y ERROR_HANDLER ) que procesan eventos y
errores a la clase Receiver .
if (eventContext.getEventData().getSequenceNumber() % 10 == 0) {
eventContext.updateCheckpoint();
}
};
if (eventContext.getEventData().getSequenceNumber() % 10 == 0) {
eventContext.updateCheckpoint();
}
};
EventProcessorClient eventProcessorClient =
eventProcessorClientBuilder.buildEventProcessorClient();
System.out.println("Exiting process");
}
}
6. Compile el programa y asegúrese de que no hay errores.
Pasos siguientes
Consulte los siguientes ejemplos en GitHub:
Ejemplos de azure-messaging-eventhubs
Ejemplos de azure-messaging-eventhubs-checkpointstore-blob
Envío o recepción de eventos en Event Hubs
mediante Python (azure-eventhub versión 5)
18/08/2020 • 8 minutes to read • Edit Online
En este inicio rápido se muestra cómo enviar y recibir eventos desde un centro de eventos mediante el paquete
de Python azure-eventhub, versión 5 .
IMPORTANT
En este inicio rápido se usa el reciente paquete azure-eventhub, versión 5. Para ver un inicio rápido que use el antiguo
paquete de la versión 1 de azure-eventhub, consulte Envío y recepción de eventos mediante azure-eventhub, versión 1.
Prerrequisitos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar
con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure
Event Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse
para obtener una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al
crear una cuenta.
Python 2.7, 3.5 o cualquier versión posterior, con PIP instalado y actualizado.
El paquete de Python para Event Hubs.
Para instalar el paquete, ejecute este comando en un símbolo del sistema que tenga Python en su ruta de
acceso:
Instale el siguiente paquete para recibir los eventos y usar Azure Blob Storage como almacén de puntos
de control:
Envío de eventos
En esta sección, se crea un script de Python para enviar eventos al centro de eventos que creó anteriormente.
1. Abra el editor de Python que prefiera, como Visual Studio Code.
2. Cree un script llamado send.py. Este script envía un lote de eventos al centro de eventos que creó
anteriormente.
3. Pegue el siguiente código en send.py:
import asyncio
from azure.eventhub.aio import EventHubProducerClient
from azure.eventhub import EventData
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
NOTE
Para ver todo el código fuente, incluidos los comentarios informativos, vaya a la página send_async de GitHub.
Recepción de eventos
En este inicio rápido se usa Azure Blob Storage como almacén de puntos de control. El almacén de puntos de
control se usa para conservar los puntos de control (es decir, las últimas posiciones de lectura).
NOTE
Si trabaja en Azure Stack Hub, esa plataforma puede admitir una versión diferente del SDK de Blob Storage que las que
suelen estar disponibles en Azure. Por ejemplo, si trabaja en la versión 2002 de Azure Stack Hub, la versión más alta
disponible para el servicio Storage es 2017-11-09. En este caso, además de seguir los pasos de esta sección, también
tendrá que agregar código para usar como destino la versión 2017-11-09 de la API del servicio de almacenamiento. Para
ver un ejemplo de cómo usar como destino una versión de la API de Storage, consulte los ejemplos sincrónicos y
asincrónicos en GitHub. Para más información sobre las versiones del servicio Azure Storage que se admiten en Azure
Stack Hub, consulte Almacenamiento de Azure Stack Hub: diferencias y consideraciones.
import asyncio
from azure.eventhub.aio import EventHubConsumerClient
from azure.eventhub.extensions.checkpointstoreblobaio import BlobCheckpointStore
# Update the checkpoint so that the program doesn't read the events
# that it has already read when you run it next time.
await partition_context.update_checkpoint(event)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
# Run the main method.
loop.run_until_complete(main())
NOTE
Para ver todo el código fuente, incluidos los comentarios informativos adicionales, vaya a la página
recv_with_checkpoint_store_async.py de GitHub.
python recv.py
La ventana del destinatario debería mostrar los mensajes que se enviaron al centro de eventos.
Pasos siguientes
En este inicio rápido, ha enviado y recibido eventos de forma asincrónica. Para aprender a enviar y recibir
eventos de forma sincrónica, vaya a la página sync_samples de GitHub.
Para ver todos los ejemplos (tanto sincrónicos como asincrónicos) de GitHub, vaya a Biblioteca cliente de Azure
Event Hubs para ejemplos de Python.
Envío o recepción de eventos en Event Hubs
mediante JavaScript (azure/event-hubs, versión 5)
18/08/2020 • 11 minutes to read • Edit Online
En este inicio rápido se muestra cómo enviar y recibir eventos desde un centro de eventos mediante el paquete
de JavaScript azure/event-hubs, versión 5 .
IMPORTANT
En este inicio rápido se usa el reciente paquete azure/event-hubs, versión 5. Para ver un inicio rápido que use el antiguo
paquete de la versión 2 de azure/event-hubs, consulte más reciente del paquete, consulte Envío o recepción de eventos en
Event Hubs mediante Node.js ( versión 2).
Prerrequisitos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar
con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure
Event Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse
para obtener una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al
crear una cuenta.
Node.js, versión 8.x o posteriores. Descargue la versión más reciente del soporte técnico a largo plazo
(LTS).
Visual Studio Code (se recomienda) o cualquier otro entorno de desarrollo integrado (IDE).
Un espacio de nombres de Event Hubs y un centro de eventos activos. Para crearlos, siga estos pasos:
1. En Azure Portal, cree un espacio de nombres del tipo Event Hubs y obtenga las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos.
2. Para crear tanto el espacio de nombres como el centro de eventos, siga las instrucciones que
encontrará en Inicio rápido: Creación de un centro de eventos desde Azure Portal.
3. Para continuar, siga las instrucciones de este inicio rápido.
4. Para obtener la cadena de conexión del espacio de nombres del centro de eventos, siga las
instrucciones de Obtención de una cadena de conexión. Registre la cadena de conexión para usarla más
adelante en este inicio rápido.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso
consiste en usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las
credenciales de administración que la aplicación necesita para comunicarse con el centro de eventos. Para
crear un espacio de nombres y un centro de eventos, siga el procedimiento que se indica en este artículo.
Después, obtenga la cadena de conexión para el espacio de nombres de Event Hubs . Para ello,
siga las instrucciones del artículo: Obtenga la cadena de conexión. La cadena de conexión la utilizará más
adelante en este inicio rápido.
Instalación del paquete npm
Para instalar el paquete del administrador de paquetes de nodos (npm) para Event Hubs, abra un símbolo del
sistema que tenga npm en su ruta de acceso, cambie el directorio a la carpeta en la que quiere tener los ejemplos
y después ejecute este comando:
En el lado del receptor, tiene que instalar dos paquetes más. En este inicio rápido se usar Azure Blob Storage para
conservar los puntos de control, con el fin de que el programa no lea los eventos que ya ha leído. Ejecuta los
puntos de comprobación de metadatos en los mensajes recibidos a intervalos regulares en un blob. Este enfoque
facilita la tarea de seguir recibiendo posteriormente mensajes desde donde lo dejó.
Ejecute los comandos siguientes:
Envío de eventos
En esta sección se crea una aplicación de JavaScript que envía eventos a un centro de eventos.
1. Abra el editor que prefiera, como Visual Studio Code.
2. Cree un archivo denominado send.js y pegue en él el código siguiente:
console.log("A batch of three events have been sent to the event hub");
}
main().catch((err) => {
console.log("Error occurred: ", err);
});
NOTE
Para ver todo el código fuente, incluidos los comentarios informativos adicionales, vaya a la página sendEvents.js de
GitHub.
Recepción de eventos
En esta sección recibe eventos de un centro de eventos mediante un almacén de puntos de comprobación de
Azure Blob Storage en una aplicación de JavaScript. Ejecuta los puntos de comprobación de metadatos en los
mensajes recibidos a intervalos regulares en Azure Storage Blob. Este enfoque facilita la tarea de seguir
recibiendo posteriormente mensajes desde donde lo dejó.
NOTE
Si trabaja en Azure Stack Hub, esa plataforma puede admitir una versión diferente del SDK de Blob Storage que las que
suelen estar disponibles en Azure. Por ejemplo, si trabaja en la versión 2002 de Azure Stack Hub, la versión más alta
disponible para el servicio Storage es 2017-11-09. En este caso, además de seguir los pasos de esta sección, también
tendrá que agregar código para usar como destino la versión 2017-11-09 de la API del servicio de almacenamiento. Para
ver un ejemplo de cómo establecer como destino una versión específica de la API de Storage, consulte los ejemplos de
JavaScript y TypeScript en GitHub. Para más información sobre las versiones del servicio Azure Storage que se admiten en
Azure Stack Hub, consulte Almacenamiento de Azure Stack Hub: diferencias y consideraciones.
// Create a consumer client for the event hub by specifying the checkpoint store.
const consumerClient = new EventHubConsumerClient(consumerGroup, connectionString, eventHubName,
checkpointStore);
// Subscribe to the events, and specify handlers for processing the events and errors.
const subscription = consumerClient.subscribe({
processEvents: async (events, context) => {
for (const event of events) {
console.log(`Received event: '${event.body}' from partition: '${context.partitionId}' and
consumer group: '${context.consumerGroup}'`);
}
// Update the checkpoint.
await context.updateCheckpoint(events[events.length - 1]);
},
main().catch((err) => {
console.log("Error occurred: ", err);
});
3. En el código, use valores reales para reemplazar los siguientes:
EVENT HUBS NAMESPACE CONNECTION STRING
EVENT HUB NAME
AZURE STORAGE CONNECTION STRING
BLOB CONTAINER NAME
4. Ejecute node receive.js en un símbolo del sistema para ejecutar este archivo. La ventana debe mostrar
mensajes sobre los eventos recibidos.
NOTE
Para ver todo el código fuente, incluidos los comentarios informativos adicionales, vaya a la página
receiveEventsUsingCheckpointStore.js de GitHub.
Felicidades. Ya ha recibido eventos procedentes del centro de eventos. El programa del destinatario recibirá los
eventos de todas las particiones del grupo de consumidores predeterminado en el centro de eventos.
Pasos siguientes
Consulte estos ejemplos de código en GitHub:
Ejemplos de JavaScript
Ejemplos de TypeScript
Inicio rápido: Envío o recepción de eventos en Event
Hubs mediante Go
18/08/2020 • 11 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y
almacenar eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos enviados a un
centro de eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o
adaptadores de procesamiento por lotes y almacenamiento. Para más información sobre Event Hubs, consulte
Introducción a Event Hubs y Características de Event Hubs.
En este tutorial se describe cómo escribir aplicaciones de Go para enviar o recibir eventos en un centro de
eventos.
NOTE
Puede descargar esta guía de inicio rápido como un ejemplo desde GitHub, reemplazar las cadenas
EventHubConnectionString y EventHubName por los valores del centro de eventos, y ejecutarlo. También puede seguir
los pasos de este tutorial para crear el suyo propio.
Prerrequisitos
Para completar este tutorial, debe cumplir los siguientes requisitos previos:
Go instalado de forma local. Siga estas instrucciones si es necesario.
Una cuenta de Azure activa. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . Use Azure Portal para
crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de administración que la aplicación
necesita para comunicarse con el centro de eventos. Para crear un espacio de nombres y un centro de eventos,
siga el procedimiento que se indica en este artículo.
Envío de eventos
En esta sección se muestra cómo crear una aplicación de Go para enviar eventos a un centro de eventos.
Instalación del paquete Go
Consiga el paquete Go para Event Hubs con go get o dep . Por ejemplo:
go get -u github.com/Azure/azure-event-hubs-go
go get -u github.com/Azure/azure-amqp-common-go/...
# or
export AZURE_CLIENT_ID=
export AZURE_CLIENT_SECRET=
export AZURE_TENANT_ID=
export AZURE_SUBSCRIPTION_ID=
Ahora, cree un proveedor de autorización para el cliente de Event Hubs que usa estas credenciales:
Extras
Obtenga los identificadores de las particiones del centro de eventos:
info, err := hub.GetRuntimeInformation(ctx)
if err != nil {
log.Fatalf("failed to get runtime info: %s\n", err)
}
log.Printf("got partition IDs: %s\n", info.PartitionIDs)
Recepción de eventos
Creación de una cuenta de almacenamiento y un contenedor
Los estados como, por ejemplo, las concesiones sobre particiones y puntos de comprobación del flujo de eventos
se comparten entre receptores mediante un contenedor de Azure Storage. Puede crear una cuenta de
almacenamiento y un contenedor con el SDK para Go, pero también puede crearlos siguiendo las instrucciones de
Acerca de las cuentas de almacenamiento de Azure.
Hay ejemplos disponibles para la creación de artefactos de Storage con el SDK para Go en el repositorio de
ejemplos de Go y en el ejemplo correspondiente de este tutorial.
Paquetes de Go
Para recibir los mensajes, obtenga los paquetes de Go para Event Hubs con go get o dep :
go get -u github.com/Azure/azure-event-hubs-go/...
go get -u github.com/Azure/azure-amqp-common-go/...
go get -u github.com/Azure/go-autorest/...
# or
import (
aad "github.com/Azure/azure-amqp-common-go/aad"
eventhubs "github.com/Azure/azure-event-hubs-go"
eph "github.com/Azure/azure-event-hubs-go/eph"
storageLeaser "github.com/Azure/azure-event-hubs-go/storage"
azure "github.com/Azure/go-autorest/autorest/azure"
)
export AZURE_CLIENT_ID=
export AZURE_CLIENT_SECRET=
export AZURE_TENANT_ID=
export AZURE_SUBSCRIPTION_ID=
A continuación, cree un proveedor de autorización para el cliente de Event Hubs que usa estas credenciales:
Creación de un controlador
Cree un controlador y regístrelo con el host del procesador de eventos. Cuando se inicie el host, se aplicará este y
todos los demás controladores especificados a los mensajes entrantes:
ctx := context.Background()
err = p.Start()
if err != nil {
log.Fatalf("failed to start EPH: %s\n", err)
}
Pasos siguientes
Lea los siguientes artículos:
EventProcessorHost
Características y terminología de Azure Event Hubs
Preguntas más frecuentes sobre Event Hubs
Inicio rápido: Envío de eventos a Azure Event Hubs
mediante C
18/08/2020 • 6 minutes to read • Edit Online
Introducción
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y
almacenar eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos enviados a un
centro de eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o
adaptadores de procesamiento por lotes y almacenamiento. Para más información sobre Event Hubs, consulte
Introducción a Event Hubs y Características de Event Hubs.
En este tutorial se describe cómo enviar eventos a un centro de eventos mediante una aplicación de consola en C.
Prerrequisitos
Para completar este tutorial, necesitará lo siguiente:
Un entorno de desarrollo de C. Para este tutorial se presupone el uso de la pila de gcc en una máquina virtual
Linux de Azure con Ubuntu 14.04.
Microsoft Visual Studio.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . Use Azure Portal para
crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de administración que la aplicación
necesita para comunicarse con el centro de eventos. Para crear un espacio de nombres y un centro de eventos,
siga el procedimiento que se indica en este artículo. Obtenga el valor de la clave de acceso para el centro de
eventos siguiendo las instrucciones del artículo: Obtenga la cadena de conexión. Utilice la clave de acceso en el
código que escriba más adelante en este tutorial. El nombre de la clave predeterminada es:
RootManageSharedAccessKey .
wget https://archive.apache.org/dist/qpid/proton/0.7/qpid-proton-0.7.tar.gz
tar xvfz qpid-proton-0.7.tar.gz
5. En su directorio de trabajo, cree un nuevo archivo denominado sender.c con el siguiente código. No olvide
reemplazar los valores de nombre/clave de SAS, el nombre del centro de eventos y del espacio de
nombres. También debe sustituir una versión con codificación URL de la clave para la regla SendRule
creada anteriormente. Puede codificar con URL aquí.
#include "proton/message.h"
#include "proton/messenger.h"
#include <getopt.h>
#include <proton/util.h>
#include <sys/time.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#define check(messenger) \
{ \
if(pn_messenger_errno(messenger)) \
{ \
printf("check\n"); \
die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \
} \
}
pn_timestamp_t time_now(void)
{
struct timeval now;
if (gettimeofday(&now, NULL)) pn_fatal("gettimeofday failed\n");
return ((pn_timestamp_t)now.tv_sec) * 1000 + (now.tv_usec / 1000);
}
pn_message_t * message;
pn_data_t * body;
message = pn_message();
pn_message_set_address(message, address);
pn_message_set_content_type(message, (char*) "application/octect-stream");
pn_message_set_inferred(message, true);
body = pn_message_body(message);
pn_data_put_binary(body, pn_bytes(strlen(msgtext), msgtext));
pn_messenger_put(messenger, message);
check(messenger);
pn_messenger_send(messenger, 1);
check(messenger);
pn_message_free(message);
}
while(true) {
sendMessage(messenger);
printf("Sent message\n");
sleep(1);
}
return 0;
}
NOTE
En este código se usa una ventana de salida de 1 para forzar que los mensajes salgan tan pronto como sea posible.
Se recomienda que la aplicación pruebe con los mensajes por lotes para aumentar el rendimiento. Consulte la
página Qpid AMQP Messenger para más información sobre cómo usar la biblioteca de Qpid Proton en este y otros
entornos y desde las plataformas para las que se proporcionan enlaces (actualmente, Perl, PHP, Python y Ruby).
Pasos siguientes
Lea los siguientes artículos:
EventProcessorHost
Características y terminología de Azure Event Hubs
Inicio rápido: Recepción de eventos desde Event
Hubs mediante Apache Storm
18/08/2020 • 7 minutes to read • Edit Online
Apache Storm es un sistema distribuido de cálculo en tiempo real que simplifica el procesamiento confiable de
flujos de datos sin enlazar. Esta sección muestra cómo utilizar un spout de Storm para Azure Event Hubs a fin de
recibir eventos de Event Hubs. Con Apache Storm, se pueden dividir los eventos en varios procesos hospedados
en distintos nodos. La integración de Event Hubs con Storm simplifica el consumo de eventos al comprobar de
forma transparente el progreso mediante la instalación de Zookeeper de Storm, la administración de puntos de
comprobación persistentes y las recepciones en paralelo de Event Hubs.
Para más información sobre los patrones de recepción de Event Hubs, vea la Información general de Event Hubs.
Prerrequisitos
Antes de empezar con el inicio rápido, cree un espacio de nombres de Event Hubs y un centro de
eventos . Use Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio de
nombres y un centro de eventos, siga el procedimiento que se indica en este artículo.
4. En Eclipse, cree un proyecto Maven nuevo (haga clic en Archivo , Nuevo y, a continuación, en Proyecto ).
5. Seleccione Usar ubicación del área de trabajo predeterminada y, a continuación, haga clic en
Siguiente
6. Seleccione el arquetipo maven-archetype-quickstar t y, a continuación, haga clic en Siguiente
7. Inserte un GroupId y Ar tifactId y, a continuación, haga clic en Finalizar
8. En pom.xml , agregue las siguientes dependencias en el nodo <dependency> .
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.9.2-incubating</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.microsoft.eventhubs</groupId>
<artifactId>eventhubs-storm-spout</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>com.netflix.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>1.3.3</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
9. En la carpeta src , cree un archivo llamado Config.proper ties y copie el siguiente contenido, sustituyendo
los valores receive rule key y event hub name :
eventhubspout.username = ReceiveRule
eventhubspout.password = {receive rule key}
eventhubspout.namespace = ioteventhub-ns
eventhubspout.entitypath = {event hub name}
eventhubspout.partitions.count = 16
eventhubspout.checkpoint.interval = 10
eventhub.receiver.credits = 10
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Tuple;
@Override
public void execute(Tuple tuple) {
String value = tuple.getString(0);
logger.info("Tuple value: " + value);
collector.ack(tuple);
}
@Override
public void prepare(Map map, TopologyContext context, OutputCollector collector) {
this.collector = collector;
this.count = 0;
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
// no output fields
}
Este elemento de Storm registra el contenido de los eventos recibidos. Esto se puede ampliar fácilmente
para almacenar las tuplas en un servicio de almacenamiento. El ejemplo de HDInsight Storm con Event
Hubs usa este mismo enfoque para almacenar datos en Azure Storage y Power BI.
11. Cree una clase denominada LogTopology con el código siguiente:
import java.io.FileReader;
import java.util.Properties;
import java.util.Properties;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.StormSubmitter;
import backtype.storm.generated.StormTopology;
import backtype.storm.topology.TopologyBuilder;
import com.microsoft.eventhubs.samples.EventCount;
import com.microsoft.eventhubs.spout.EventHubSpout;
import com.microsoft.eventhubs.spout.EventHubSpoutConfig;
if (args.length > 0) {
// set topology name so that sample Trident topology can use it as
// stream name.
spoutConfig.setTopologyName(args[0]);
}
}
if (runLocal) {
config.setMaxTaskParallelism(2);
LocalCluster localCluster = new LocalCluster();
localCluster.submitTopology("test", config, topology);
Thread.sleep(5000000);
localCluster.shutdown();
} else {
config.setNumWorkers(numWorkers);
StormSubmitter.submitTopology(args[0], config, topology);
}
}
Esta clase crea un emisor de Event Hubs, utilizando las propiedades del archivo de configuración para crear
una instancia. Es importante tener en cuenta que este ejemplo crea tantas tareas de spout como número de
particiones hay en el centro de eventos, para poder usar el paralelismo máximo permitido por ese centro
de eventos.
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Creación de un centro de eventos
Preguntas más frecuentes sobre Event Hubs
Envío o recepción de eventos desde Azure Event
Hubs mediante .NET Core
(Microsoft.Azure.EventHubs)
18/08/2020 • 15 minutes to read • Edit Online
En este inicio rápido se explica cómo enviar eventos a un centro de eventos o recibirlos de este mediante la
biblioteca de .NET Core Microsoft.Azure.EventHubs .
WARNING
En este inicio rápido se usa el paquete Microsoft.Azure.EventHubs anterior. Para obtener un inicio rápido que use la
biblioteca Azure.Messaging.EventHubs más reciente, consulte Envío y recepción de eventos mediante la biblioteca
Azure.Messaging.EventHubs. Para que la aplicación use la biblioteca nueva en lugar de la anterior, consulte la Guía para
migrar desde Microsoft.Azure.EventHubs a Azure.Messaging.EventHubs.
Prerrequisitos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar
con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure Event
Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse para obtener
una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al crear una cuenta.
Microsoft Visual Studio 2019.
Herramientas de .NET Core Visual Studio 2015 o 2017.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso consiste
en usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio de
nombres y un centro de eventos, siga el procedimiento que se indica en este artículo. A continuación, obtenga
la cadena de conexión para el espacio de nombres del centro de eventos siguiendo las instrucciones
del artículo: Obtenga la cadena de conexión. La utilizará más adelante en este inicio rápido.
Envío de eventos
En esta sección se muestra cómo crear una aplicación de consola de .NET Core para enviar eventos a un centro de
eventos.
NOTE
Puede descargar esta guía de inicio rápido como un ejemplo desde GitHub, reemplazar las cadenas
EventHubConnectionString y EventHubName por los valores del centro de eventos, y ejecutarlo. También puede seguir los
pasos de este inicio rápido para crear la suya propia.
using Microsoft.Azure.EventHubs;
using System.Text;
using System.Threading.Tasks;
2. Agregue constantes a la clase Program para la cadena de conexión de Event Hubs y la ruta de la entidad
(nombre de centro de eventos individual). Reemplace los marcadores de posición entre llaves por los
valores adecuados obtenidos al crear el centro de eventos. Asegúrese de que
{Event Hubs connection string} es la cadena de conexión en el nivel de espacio de nombres y no la cadena
de Event Hub.
eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
await SendMessagesToEventHub(100);
await eventHubClient.CloseAsync();
// Uses the event hub client to send 100 messages to the event hub.
private static async Task SendMessagesToEventHub(int numMessagesToSend)
{
for (var i = 0; i < numMessagesToSend; i++)
{
try
{
var message = $"Message {i}";
Console.WriteLine($"Sending message: {message}");
await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
}
catch (Exception exception)
{
Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
}
await Task.Delay(10);
}
MainAsync(args).GetAwaiter().GetResult();
eventHubClient =
EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
await SendMessagesToEventHub(100);
await eventHubClient.CloseAsync();
// Uses the event hub client to send 100 messages to the event hub.
private static async Task SendMessagesToEventHub(int numMessagesToSend)
{
for (var i = 0; i < numMessagesToSend; i++)
{
try
{
var message = $"Message {i}";
Console.WriteLine($"Sending message: {message}");
await eventHubClient.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));
}
catch (Exception exception)
{
Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
}
await Task.Delay(10);
}
Recepción de eventos
En esta sección se muestra cómo escribir una aplicación de consola de .NET Core que reciba mensajes de un
centro de eventos mediante el host de procesador de eventos. El host de procesador de eventos es una clase de
.NET que simplifica la recepción de eventos desde Event Hubs mediante la administración de puntos de control
persistentes y recepciones paralelas desde dichas instancias de Event Hubs. Mediante el host de procesador de
eventos, puede dividir eventos entre varios receptores, aunque estén hospedados en distintos nodos. En este
ejemplo se muestra cómo usar el host de procesador de eventos en un solo receptor.
NOTE
Puede descargar esta guía de inicio rápido como un ejemplo desde GitHub, reemplazar las cadenas
EventHubConnectionString y EventHubName , StorageAccountName , StorageAccountKey y StorageContainerName
con los valores del centro de eventos y ejecutarlo. También puede seguir los pasos de este tutorial para crear el suyo propio.
8. Elija Claves de acceso en el menú de la página Cuenta de almacenamiento y copie el valor de key1 .
Guarde los valores siguientes en el Bloc de notas o en cualquier otra ubicación temporal.
Nombre de la cuenta de almacenamiento
Clave de acceso para la cuenta de almacenamiento
Nombre del contenedor
Creación de una aplicación de consola
Inicie Visual Studio. En el menú Archivo , haga clic en Nuevo y en Proyecto . Cree una aplicación de consola de
.NET Core.
Incorporación del paquete NuGet de Event Hubs
Agregue los paquetes NuGet de la biblioteca de .NET Standard Microsoft.Azure.EventHubs y
Microsoft.Azure.EventHubs.Processor al proyecto mediante estos pasos:
1. Haga clic con el botón derecho en el proyecto recién creado y seleccione Administrar paquetes NuGet .
2. Haga clic en la pestaña Examinar , busque Microsoft.Azure.EventHubs y seleccione el paquete
Microsoft.Azure.EventHubs . Haga clic en Instalar para completar la instalación y, a continuación, cierre este
cuadro de diálogo.
3. Repita los pasos 1 y 2 e instale el paquete Microsoft.Azure.EventHubs.Processor .
Implementación de la interfaz de IEventProcessor
1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto, haga clic en Agregar y
después en Clase . Asigne el nombre SimpleEventProcessor a la nueva clase.
2. Abra el archivo SimpleEventProcessor.cs y agregue las siguientes instrucciones using en la parte superior
del archivo.
using Microsoft.Azure.EventHubs;
using Microsoft.Azure.EventHubs.Processor;
using System.Threading.Tasks;
return context.CheckpointAsync();
}
}
using Microsoft.Azure.EventHubs;
using Microsoft.Azure.EventHubs.Processor;
using System.Threading.Tasks;
2. Agregue constantes a la clase Program para la cadena de conexión del centro de eventos, el nombre del
centro de eventos, el nombre del contenedor de la cuenta de almacenamiento, y el nombre de la cuenta de
almacenamiento y la clave de la cuenta de almacenamiento. Agregue el código siguiente, reemplazando los
marcadores de posición con sus valores correspondientes:
MainAsync(args).GetAwaiter().GetResult();
Pasos siguientes
Lea los siguientes artículos:
Control de acceso basado en rol (RBAC): ejemplos.
En estos ejemplos se usa la biblioteca anterior Microsoft.Azure.EventHubs , pero se puede actualizar
fácilmente para usar la biblioteca Azure.Messaging.EventHubs más reciente. Para que los ejemplos usen
la biblioteca nueva en lugar de la anterior, consulte la Guía para migrar de Microsoft.Azure.EventHubs a
Azure.Messaging.EventHubs.
EventProcessorHost
Características y terminología de Azure Event Hubs
Preguntas más frecuentes sobre Event Hubs
Use Java para enviar eventos a Azure Event Hubs o
recibir eventos de él (azure-eventhubs)
18/08/2020 • 19 minutes to read • Edit Online
En este inicio rápido se muestra cómo enviar y recibir eventos desde un centro de eventos mediante el paquete de
Java azure-eventhubs .
WARNING
En este inicio rápido se usan los anteriores paquetes azure-eventhubs y azure-eventhubs-eph . Para ver un inicio rápido
que use el paquete azure-messaging-eventhubs más reciente, consulte Envío y recepción de eventos mediante azure-
messaging-eventhubs. Para que la aplicación deje de usar el paquete anterior y use el nuevo, consulte la Guía para migrar
desde azure-eventhubs a azure-messaging-eventhubs.
Prerrequisitos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar
con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure Event
Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse para obtener
una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al crear una cuenta.
Un entorno de desarrollo de Java. Este inicio rápido utiliza Eclipse.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso consiste en
usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio de
nombres y un centro de eventos, siga el procedimiento que se indica en este artículo. Luego, para obtener el
valor de la clave de acceso del centro de eventos, siga las instrucciones del artículo: Obtenga la cadena de
conexión. Utilice la clave de acceso en el código que escribirá más adelante en este inicio rápido. El nombre de
la clave predeterminada es: RootManageSharedAccessKey .
Envío de eventos
En esta sección se muestra cómo crear una aplicación de Java para enviar eventos a un centro de eventos.
NOTE
Puede descargar esta guía de inicio rápido como un ejemplo desde GitHub, reemplazar las cadenas
EventHubConnectionString y EventHubName por los valores del centro de eventos, y ejecutarlo. También puede seguir los
pasos de este inicio rápido para crear la suya propia.
Para distintos tipos de entornos de compilación, puede obtener explícitamente los últimos archivos JAR publicados
del repositorio central de Maven.
Para un editor de eventos simples, importe el paquete com.microsoft.azure.eventhubs para las clases de cliente de
Event Hubs y el paquete com.microsoft.azure.servicebus para las clases de utilidad, como las excepciones comunes
que se comparten con el cliente de mensajería de Azure Service Bus.
Escritura de código para enviar mensajes al centro de eventos
Para el ejemplo siguiente, primero cree un nuevo proyecto de Maven para una aplicación de consola o shell en su
entorno de desarrollo de Java favorito. Agregue una clase denominada SimpleSend y agréguele el código
siguiente:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.microsoft.azure.eventhubs.ConnectionStringBuilder;
import com.microsoft.azure.eventhubs.EventData;
import com.microsoft.azure.eventhubs.EventHubClient;
import com.microsoft.azure.eventhubs.EventHubException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.time.Instant;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
}
}
// The Executor handles all asynchronous tasks and this is passed to the EventHubClient instance.
// This enables the user to segregate their thread pool based on the work load.
// This pool can then be shared across multiple EventHubClient instances.
// The following sample uses a single thread executor, as there is only one EventHubClient instance,
// handling different flavors of ingestion to Event Hubs here.
final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(4);
try {
for (int i = 0; i < 10; i++) {
// the partitionKey will be hash'ed to determine the partitionId to send the eventData to.
eventHubClient.sendSync(sendEvent, partitionKey);
Recepción de eventos
El código de este tutorial se basa en el código EventProcessorSample en GitHub, que se puede examinar para ver
toda la aplicación en funcionamiento.
Recepción de mensajes con EventProcessorHost en Java
EventProcessorHost es una clase de Java que simplifica la recepción de eventos desde Event Hubs mediante la
administración de puntos de control persistentes y recepciones paralelas desde tales Centros de eventos. Con
EventProcessorHost, puede dividir eventos entre varios destinatarios, incluso cuando están hospedados en
distintos nodos. Este ejemplo muestra cómo usar EventProcessorHost para un solo destinatario.
Crear una cuenta de almacenamiento
Para usar EventProcessorHost, debe tener una [cuenta de Azure Storage][cuenta de Azure Storage]:
1. Inicie sesión en Azure Portal y seleccione Crear un recurso en la parte izquierda de la pantalla.
2. Seleccione Almacenamiento y, luego, Cuenta de almacenamiento . En la ventana Crear cuenta de
almacenamiento , escriba un nombre para la cuenta de almacenamiento. Complete el resto de los campos,
seleccione la región deseada y, finalmente, seleccione Crear .
3. Seleccione la cuenta de almacenamiento recién creada y, a continuación, Claves de acceso :
Copie el valor key1 en una ubicación temporal. Lo usará más adelante en este tutorial.
Creación de un proyecto de Java mediante EventProcessorHost
La biblioteca de cliente de Java para Event Hubs está disponible para su uso en proyectos de Maven en el
repositorio central de Maven, y se puede hacer referencia a ella mediante la siguiente declaración de dependencia
en el archivo de proyecto de Maven:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-eventhubs</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-eventhubs-eph</artifactId>
<version>2.4.0</version>
</dependency>
Para distintos tipos de entornos de compilación, puede obtener explícitamente los últimos archivos JAR publicados
del repositorio central de Maven.
1. Para el ejemplo siguiente, primero cree un nuevo proyecto de Maven para una aplicación de consola o shell
en su entorno de desarrollo de Java favorito. La clase se denomina ErrorNotificationHandler .
import java.util.function.Consumer;
import com.microsoft.azure.eventprocessorhost.ExceptionReceivedEventArgs;
2. Cree una clase nueva denominada EventProcessorSample con el código siguiente. Reemplace los siguientes
marcadores de posición por los valores que usó al crear el centro de eventos y la cuenta de
almacenamiento:
package com.microsoft.azure.eventhubs.samples.eventprocessorsample;
import com.microsoft.azure.eventhubs.ConnectionStringBuilder;
import com.microsoft.azure.eventhubs.EventData;
import com.microsoft.azure.eventprocessorhost.CloseReason;
import com.microsoft.azure.eventprocessorhost.EventProcessorHost;
import com.microsoft.azure.eventprocessorhost.EventProcessorOptions;
import com.microsoft.azure.eventprocessorhost.ExceptionReceivedEventArgs;
import com.microsoft.azure.eventprocessorhost.IEventProcessor;
import com.microsoft.azure.eventprocessorhost.PartitionContext;
import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
host.registerEventProcessor(EventProcessor.class, options)
.whenComplete((unused, e) ->
{
if (e != null)
if (e != null)
{
System.out.println("Failure while registering: " + e.toString());
if (e.getCause() != null)
{
System.out.println("Inner exception: " + e.getCause().toString());
}
}
})
.thenAccept((unused) ->
{
System.out.println("Press enter to stop.");
try
{
System.in.read();
}
catch (Exception e)
{
System.out.println("Keyboard read failed: " + e.toString());
}
})
.thenCompose((unused) ->
{
return host.unregisterEventProcessor();
})
.exceptionally((e) ->
{
System.out.println("Failure while unregistering: " + e.toString());
if (e.getCause() != null)
{
System.out.println("Inner exception: " + e.getCause().toString());
}
return null;
})
.get(); // Wait for everything to finish before exiting main!
System.out.println("End of sample");
}
}
3. Cree una clase final más llamada EventProcessor , con el código siguiente:
// OnOpen is called when a new event processor instance is created by the host.
@Override
public void onOpen(PartitionContext context) throws Exception
{
System.out.println("SAMPLE: Partition " + context.getPartitionId() + " is opening");
}
// onError is called when an error occurs in EventProcessorHost code that is tied to this
partition, such as a receiver failure.
@Override
public void onError(PartitionContext context, Throwable error)
{
System.out.println("SAMPLE: Partition " + context.getPartitionId() + " onError: " +
error.toString());
error.toString());
}
// onEvents is called when events are received on this partition of the Event Hub.
@Override
public void onEvents(PartitionContext context, Iterable<EventData> events) throws Exception
{
System.out.println("SAMPLE: Partition " + context.getPartitionId() + " got event batch");
int eventCount = 0;
for (EventData data : events)
{
try
{
System.out.println("SAMPLE (" + context.getPartitionId() + "," +
data.getSystemProperties().getOffset() + "," +
data.getSystemProperties().getSequenceNumber() + "): " + new
String(data.getBytes(), "UTF8"));
eventCount++;
// Checkpointing persists the current position in the event stream for this partition
and means that the next
// time any host opens an event processor on this event hub+consumer group+partition
combination, it will start
// receiving at the event after this one.
this.checkpointBatchingCount++;
if ((checkpointBatchingCount % 5) == 0)
{
System.out.println("SAMPLE: Partition " + context.getPartitionId() + "
checkpointing at " +
data.getSystemProperties().getOffset() + "," +
data.getSystemProperties().getSequenceNumber());
// Checkpoints are created asynchronously. It is important to wait for the result
of checkpointing
// before exiting onEvents or before creating the next checkpoint, to detect errors
and to ensure proper ordering.
context.checkpoint(data).get();
}
}
catch (Exception e)
{
System.out.println("Processing failed for an event: " + e.toString());
}
}
System.out.println("SAMPLE: Partition " + context.getPartitionId() + " batch size was " +
eventCount + " for host " + context.getOwner());
}
}
Este tutorial usa una sola instancia de EventProcessorHost. Para aumentar la capacidad de procesamiento, se
recomienda ejecutar varias instancias de EventProcessorHost, preferiblemente en máquinas independientes. Esto
proporciona redundancia también. En esos casos, las diferentes instancias se coordinan automáticamente entre sí
con el fin de equilibrar la carga de los eventos recibidos. Si desea que varios destinatarios procesen todos los
eventos, debe usar el concepto ConsumerGroup . Cuando se reciben eventos de distintos equipos, puede ser útil
especificar nombres para las instancias de EventProcessorHost según los equipos (o roles) en que se implementan.
Publicación de mensajes en EventHub
Antes de que los consumidores puedan recuperar los mensajes, los editores tienen que publicarlos primero en las
particiones. Merece la pena destacar que cuando los mensajes se publican en el centro de eventos de manera
sincrónica con el método sendSync() en el objeto com.microsoft.azure.eventhubs.EventHubClient, se podrían
enviar a una partición específica o distribuirse a todas las particiones disponibles en modo round-robin, según si
se especifica o no la clave de partición.
Cuando se especifica una cadena que representa la clave de partición, se aplicará un algoritmo hash a la clave para
determinar la partición a la que desea enviar el evento.
Cuando no se establece la clave de partición, los mensajes se envían en modo round-robin a todas las particiones
disponibles
// the partitionKey will be hash'ed to determine the partitionId to send the eventData to.
eventHubClient.sendSync(sendEvent, partitionKey);
Pasos siguientes
Lea los siguientes artículos:
EventProcessorHost
Características y terminología de Azure Event Hubs
Preguntas más frecuentes sobre Event Hubs
Inicio rápido: Envío y recepción de eventos con
Azure Event Hubs mediante Python (azure-eventhub
versión 1)
18/08/2020 • 6 minutes to read • Edit Online
En este inicio rápido se muestra cómo enviar y recibir eventos desde un centro de eventos mediante el paquete de
Python azure-eventhub, versión 1 .
WARNING
En este inicio rápido se usa el antiguo paquete azure-eventhub, versión 1. Para ver un inicio rápido que use la versión 5
más reciente del paquete, consulte Envío y recepción de eventos mediante la versión 5 de azure-eventhub. Para que la
aplicación pase de usar el paquete antiguo a uno nuevo, consulte la guía para migrar de la versión 1 a la versión 5 de azure-
eventhub.
Requisitos previos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar
con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure Event
Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse para
obtener una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al crear una
cuenta.
Python 3.4 o posterior, con pip instalado y actualizado.
El paquete de Python para Event Hubs. Para instalar el paquete, ejecute este comando en un símbolo del
sistema que tenga Python en su ruta de acceso:
Envío de eventos
Para crear una aplicación de Python que envíe eventos a un centro de eventos:
NOTE
En lugar de trabajar con el inicio rápido, puede descargar y ejecutar las aplicaciones de ejemplo de GitHub. Reemplace las
cadenas EventHubConnectionString y EventHubName por los valores del centro de eventos.
import sys
import logging
import datetime
import time
import os
logger = logging.getLogger("azure")
ADDRESS = "amqps://<namespace>.servicebus.windows.net/<eventhub>"
USER = "<AccessKeyName>"
KEY = "<primary key value>"
try:
if not ADDRESS:
raise ValueError("No EventHubs URL supplied.")
except KeyboardInterrupt:
pass
4. Guarde el archivo.
Para ejecutar el script, desde el directorio en el que guardó send.py, ejecute este comando:
Recepción de eventos
Para crear una aplicación de Python que reciba eventos de un centro de eventos:
1. En el editor de Python, cree un archivo llamado recv.py.
2. Pegue el código siguiente en recv.py, y reemplace los valores de <namespace>, <eventhub>,
<AccessKeyName> y <primary key value> de Event Hubs por sus valores:
import os
import sys
import logging
import time
from azure.eventhub import EventHubClient, Receiver, Offset
logger = logging.getLogger("azure")
ADDRESS = "amqps://<namespace>.servicebus.windows.net/<eventhub>"
USER = "<AccessKeyName>"
KEY = "<primary key value>"
CONSUMER_GROUP = "$default"
OFFSET = Offset("-1")
PARTITION = "0"
total = 0
last_sn = -1
last_offset = "-1"
client = EventHubClient(ADDRESS, debug=False, username=USER, password=KEY)
try:
receiver = client.add_receiver(
CONSUMER_GROUP, PARTITION, prefetch=5000, offset=OFFSET)
client.run()
start_time = time.time()
for event_data in receiver.receive(timeout=100):
print("Received: {}".format(event_data.body_as_str(encoding='UTF-8')))
total += 1
end_time = time.time()
client.stop()
run_time = end_time - start_time
print("Received {} messages in {} seconds".format(total, run_time))
except KeyboardInterrupt:
pass
finally:
client.stop()
3. Guarde el archivo.
Para ejecutar el script, desde el directorio en el que guardó recv.py, ejecute este comando:
En este inicio rápido, se muestra cómo crear aplicaciones de JavaScript para enviar y recibir eventos desde un
centro de eventos mediante el paquete de JavaScript azure/event-hubs, versión 2.
WARNING
En este inicio rápido se usa el paquete azure/event-hubs versión 2 anterior. Para ver un inicio rápido que use la versión 5
más reciente del paquete, consulte Envío y recepción de eventos mediante la versión 5 de azure/eventhubs. Para que la
aplicación pase de usar el paquete antiguo a uno nuevo, consulte la guía para migrar de la versión 1 a la versión 5 de
azure/eventhubs.
Prerrequisitos
Si es la primera vez que usa Azure Event Hubs, consulte la información general de Event Hubs antes de continuar
con este inicio rápido.
Para completar este tutorial de inicio rápido, debe cumplir los siguientes requisitos previos:
Una suscripción a Microsoft Azure . Para usar los servicios de Azure, entre los que se incluye Azure Event
Hubs, se necesita una suscripción. Si no se dispone de una cuenta de Azure, es posible registrarse para obtener
una evaluación gratuita, o bien usar las ventajas que disfrutan los suscriptores MSDN al crear una cuenta.
Node.js versión 8.x y posteriores. Descargue la versión LTS más reciente en https://nodejs.org.
Visual Studio Code (recomendado) o cualquier otro IDE
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso consiste en
usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio de
nombres y un centro de eventos, siga el procedimiento de este artículo y después continúe con los pasos
siguientes de este tutorial. Después, obtenga la cadena de conexión para el espacio de nombres del centro de
eventos. Para ello, siga las instrucciones del artículo Obtenga la cadena de conexión. Utilizará la cadena de
conexión más adelante en el tutorial.
Instalación del paquete de npm
Para instalar el paquete de npm para Event Hubs, abra un símbolo del sistema que tenga npm en la ruta de acceso,
cambie el directorio a la carpeta en la que quiere tener los ejemplos y ejecute este comando.
Para instalar el paquete de npm para el Host de procesador de eventos, ejecute el comando siguiente.
Envío de eventos
En esta sección se muestra cómo crear una aplicación de JavaScript que envíe eventos a un centro de eventos.
NOTE
Puede descargar esta guía de inicio rápido como un ejemplo desde GitHub, reemplazar las cadenas
EventHubConnectionString y EventHubName por los valores del centro de eventos, y ejecutarlo. También puede seguir los
pasos de este tutorial para crear el suyo propio.
await client.close();
}
main().catch(err => {
console.log("Error occurred: ", err);
});
Recepción de eventos
En esta sección se muestra cómo crear una aplicación de JavaScript que recibe eventos de una única partición del
grupo de consumidores predeterminado de un centro de eventos.
1. Abra el editor que prefiera, como Visual Studio Code.
2. Cree un archivo denominado receive.js y pegue en él el código siguiente.
const { EventHubClient, delay } = require("@azure/event-hubs@2");
await client.close();
}
main().catch(err => {
console.log("Error occurred: ", err);
});
main().catch(err => {
console.log("Error occurred: ", err);
});
3. Escriba la cadena de conexión y el nombre del centro de eventos en el código anterior, junto con la cadena de
conexión de Azure Blob Storage.
4. Después, ejecute el comando node receiveAll.js en un símbolo del sistema para ejecutar este archivo.
Felicidades. Ha recibido eventos de un centro de eventos por medio del Host de procesador de eventos. Recibirá
los eventos de todas las particiones del grupo de consumidores predeterminado en su centro de eventos.
Pasos siguientes
Lea los siguientes artículos:
EventProcessorHost
Características y terminología de Azure Event Hubs
Preguntas más frecuentes sobre Event Hubs
Consulte otros ejemplos de JavaScript para Event Hubs y Host de procesador de eventos en GitHub
Inicio rápido: Envío o recepción de eventos en Azure
Event Hubs mediante .NET Framework
18/08/2020 • 12 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de macrodatos y servicio de ingesta de eventos de gran
escalabilidad capaz de recibir y procesar millones de eventos por segundo. Event Hubs puede procesar y
almacenar eventos, datos o telemetría generados por dispositivos y software distribuido. Los datos enviados a un
centro de eventos se pueden transformar y almacenar con cualquier proveedor de análisis en tiempo real o
adaptadores de procesamiento por lotes y almacenamiento. Para más información sobre Event Hubs, consulte
Introducción a Event Hubs y Características de Event Hubs.
En este tutorial se describe cómo crear aplicaciones de consola de .NET Framework en C# para enviar o recibir
eventos en un centro de eventos.
Prerrequisitos
Para completar este tutorial, debe cumplir los siguientes requisitos previos:
Microsoft Visual Studio 2019.
Creación de un espacio de nombres de Event Hubs y un centro de eventos . El primer paso consiste en
usar Azure Portal para crear un espacio de nombres de tipo Event Hubs y obtener las credenciales de
administración que la aplicación necesita para comunicarse con el centro de eventos. Para crear un espacio de
nombres y un centro de eventos, siga el procedimiento que se indica en este artículo. A continuación, obtenga
la cadena de conexión para el espacio de nombres del centro de eventos siguiendo las instrucciones
del artículo: Obtenga la cadena de conexión. Utilizará la cadena de conexión más adelante en el tutorial.
Envío de eventos
En esta sección se muestra cómo crear una aplicación de consola de .NET Framework para enviar eventos a un
centro de eventos.
Creación de una aplicación de consola
En Visual Studio, cree un nuevo proyecto de aplicación de escritorio de Visual C# con la plantilla de proyecto
Aplicación de consola . Asigne al proyecto el nombre Remitente .
Incorporación del paquete NuGet de Event Hubs
1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto Remitente y luego haga clic
en Administrar paquetes NuGet para la solución .
2. Haga clic en la pestaña Examinar y luego busque WindowsAzure.ServiceBus . Haga clic en Instalar y acepte
las condiciones de uso.
Visual Studio descarga, instala y agrega una referencia al paquete NuGet de la biblioteca de Azure Service
Bus.
Escritura de código para enviar mensajes al centro de eventos
1. Agregue las siguientes instrucciones using al principio del archivo Program.cs :
using System.Threading;
using Microsoft.ServiceBus.Messaging;
2. Agregue los siguientes campos a la clase Program ; para ello, sustituya los valores del marcador de posición
por el nombre del centro de eventos creado en la sección anterior y la cadena de conexión de nivel del
espacio de nombres que ha guardado anteriormente. Puede copiar la cadena de conexión para el centro de
eventos desde la clave Connection string-primar y en RootManageSharedAccessKey en la página del
centro de eventos en Azure Portal. Para ver los pasos detallados, consulte Obtención de la cadena de
conexión.
Thread.Sleep(200);
}
}
Este método envía continuamente los eventos al centro de eventos con un retraso de 200 ms.
4. Por último, agregue las líneas siguientes al método Main :
Recepción de eventos
En esta sección, escribirá una aplicación de consola de .NET Framework que recibe mensajes de un centro de
eventos mediante el host de procesador de eventos. El host de procesador de eventos es una clase de .NET que
simplifica la recepción de eventos desde Event Hubs mediante la administración de puntos de control persistentes
y recepciones paralelas desde dichas instancias de Event Hubs. Mediante el host de procesador de eventos, puede
dividir eventos entre varios receptores, aunque estén hospedados en distintos nodos.
Creación de una cuenta de almacenamiento para el host de procesador de eventos
El host de procesador de eventos es un agente inteligente que simplifica la recepción de eventos desde Event Hubs
mediante la administración de puntos de control persistentes y recepciones paralelas. Para los puntos de
comprobación, el host de procesador de eventos requiere una cuenta de almacenamiento. El ejemplo siguiente
muestra cómo crear una cuenta de almacenamiento y cómo obtener sus claves para el acceso:
1. En el menú de Azure Portal, seleccione Crear un recurso .
2. Seleccione Storage > Cuenta de Storage .
3. En la página Crear cuenta de almacenamiento , realice los pasos siguientes:
a. Escriba el nombre de la cuenta de almacenamiento .
b. Elija una suscripción de Azure que contenga el centro de eventos.
c. Elija o cree el grupo de recursos que tenga el centro de eventos.
d. Seleccione la ubicación en la que va a crear el recurso.
e. Seleccione Revisar + crear .
4. En la página Revisar + crear , revise los valores y seleccione Crear .
5. Después de ver el mensaje Correcto en las notificaciones, seleccione Ir al recurso para abrir la página de
la cuenta de almacenamiento. Como alternativa, puede expandir Detalles de la implementación y,
después, seleccionar el nuevo recurso en la lista de recursos.
6. Seleccione Contenedores .
8. Elija Claves de acceso en el menú de la página Cuenta de almacenamiento y copie el valor de key1 .
Guarde los valores siguientes en el Bloc de notas o en cualquier otra ubicación temporal.
Nombre de la cuenta de almacenamiento
Clave de acceso para la cuenta de almacenamiento
Nombre del contenedor
Creación de una aplicación de consola
En Visual Studio, cree un nuevo proyecto de aplicación de escritorio de Visual C# con la plantilla de proyecto
Aplicación de consola . Asigne al proyecto el nombre Receptor .
Incorporación del paquete NuGet de Event Hubs
1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto Receptor y luego haga clic en
Administrar paquetes NuGet para la solución .
2. Haga clic en la pestaña Examinar y luego busque
Microsoft Azure Service Bus Event Hub - EventProcessorHost . Haga clic en Instalar y acepte las condiciones
de uso.
Visual Studio descarga, instala y agrega una referencia al paquete de NuGet de Azure Service Bus -
EventProcessorHost, con todas sus dependencias.
Implementación de la interfaz de IEventProcessor
1. Haga clic con el botón derecho en el proyecto Receptor , haga clic en Agregar y, después, haga clic en
Clase . Asigne a la nueva clase el nombre SimpleEventProcessor y después haga clic en Agregar para
crear la clase.
2. Agregue las siguientes instrucciones en la parte superior del archivo SimpleEventProcessor.cs:
using Microsoft.ServiceBus.Messaging;
using System.Diagnostics;
//Call checkpoint every 5 minutes, so that worker can resume processing from 5 minutes back if it
restarts.
if (this.checkpointStopWatch.Elapsed > TimeSpan.FromMinutes(5))
{
await context.CheckpointAsync();
this.checkpointStopWatch.Restart();
}
}
}
EventProcessorHost llama a esta clase para procesar los eventos recibidos del centro de eventos. La clase
SimpleEventProcessor usa un cronómetro para llamar periódicamente al método de punto de control en el
contexto EventProcessorHost . Este procesamiento garantiza que, si se reinicia el destinatario, no se
pierden más de cinco minutos de trabajo de procesamiento.
Actualización del método Main para usar SimpleEventProcessor
1. En la clase Program.cs , agregue la siguiente instrucción using al principio del archivo:
using Microsoft.ServiceBus.Messaging;
2. Reemplace el método Main de la clase Program por el código siguiente, y sustituya el nombre del centro de
eventos y la cadena de conexión de nivel del espacio de nombres que ha guardado anteriormente, y la
cuenta de almacenamiento y la clave que ha copiado en las secciones anteriores.
static void Main(string[] args)
{
string eventHubConnectionString = "{Event Hubs namespace connection string}";
string eventHubName = "{Event Hub name}";
string storageAccountName = "{storage account name}";
string storageAccountKey = "{storage account key}";
string storageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName=
{0};AccountKey={1}", storageAccountName, storageAccountKey);
Pasos siguientes
Lea los siguientes artículos:
EventProcessorHost
Características y terminología de Azure Event Hubs
Preguntas más frecuentes sobre Event Hubs
Habilitación de la captura de eventos que se
transmiten por streaming mediante Azure Event
Hubs
18/08/2020 • 8 minutes to read • Edit Online
Azure Event Hubs Capture permite entregar automáticamente los datos de streaming de Event Hubs a la cuenta
de Azure Blob Storage o Azure Data Lake Storage Gen1 o Gen2 que prefiera.
Puede configurar la funcionalidad de captura en el momento de creación del centro de eventos mediante Azure
Portal. Puede capturar los datos para un contenedor de Azure Blob Storage o para una cuenta de Azure Data Lake
Storage Gen1 o Gen2.
Para más información, consulte Introducción a Event Hubs Capture.
En este artículo se muestra cómo usar una plantilla de Azure Resource Manager que crea un espacio de nombres
de Event Hubs, con una instancia de centro de eventos, y también habilita la característica Capture en el centro de
eventos. En este artículo se describe cómo definir los recursos que se implementan y los parámetros que se
especifican cuando se ejecuta la implementación. Puede usar esta plantilla para sus propias implementaciones o
personalizarla para satisfacer sus necesidades.
En este artículo también se muestra cómo especificar los eventos que se capturan en instancias de Azure Storage
Blob o de Azure Data Lake Store, basándose en el destino que elija.
Para más información sobre la creación de plantillas, consulte Creación de plantillas de Azure Resource Manager.
Para la sintaxis y las propiedades de JSON que se usan en una plantilla, consulte Tipos de recursos de
Microsoft.EventHub.
Para obtener más información sobre patrones y prácticas de convenciones de nomenclatura de recursos de Azure,
consulte las convenciones de nomenclatura de los recursos de Azure.
Para ver las plantillas completas, haga clic en los siguientes vínculos de GitHub:
Centro de eventos y habilitación de Capture en una plantilla de Storage
Centro de eventos y habilitación de Capture en una plantilla de Azure Data Lake Store
NOTE
Para buscar las últimas plantillas, visite la galería de Plantillas de inicio rápido de Azure y busque Event Hubs.
¿Qué va a implementar?
Con esta plantilla, implementará un espacio de nombres de Event Hubs con un centro de eventos y habilitará la
captura de Event Hubs. Event Hubs Capture le permite entregar automáticamente los datos de streaming de sus
instancias de Event Hubs a una instancia de Azure Blob Storage o Azure Data Lake Store, en el tiempo especificado
o el intervalo de tamaño que prefiera. Haga clic en el botón siguiente para habilitar Event Hubs Capture en Azure
Storage:
Haga clic en el botón siguiente para habilitar Event Hubs Capture en Azure Data Lake Store:
Parámetros
Con el Administrador de recursos de Azure, se definen los parámetros de los valores que desea especificar al
implementar la plantilla. La plantilla incluye una sección denominada Parameters que contiene todos los valores
de los parámetros. Debe definir un parámetro para esos valores que variarán según el proyecto que vaya a
implementar o según el entorno en el que vaya a realizar la implementación. No defina parámetros para valores
que siempre permanezcan igual. Cada valor de parámetro se usa en la plantilla para definir los recursos que se
implementan.
La plantilla define los parámetros siguientes.
eventHubNamespaceName
El nombre del espacio de nombres de Event Hubs que se creará.
"eventHubNamespaceName":{
"type":"string",
"metadata":{
"description":"Name of the EventHub namespace"
}
}
eventHubName
El nombre del centro de eventos creado en el espacio de nombres de Event Hubs.
"eventHubName":{
"type":"string",
"metadata":{
"description":"Name of the event hub"
}
}
messageRetentionInDays
El número de días que se deben conservar los mensajes en el centro de eventos.
"messageRetentionInDays":{
"type":"int",
"defaultValue": 1,
"minValue":"1",
"maxValue":"7",
"metadata":{
"description":"How long to retain the data in event hub"
}
}
partitionCount
El número de particiones que se van a crear en el centro de eventos.
"partitionCount":{
"type":"int",
"defaultValue":2,
"minValue":2,
"maxValue":32,
"metadata":{
"description":"Number of partitions chosen"
}
}
captureEnabled
Habilita la funcionalidad de captura en el centro de eventos.
"captureEnabled":{
"type":"string",
"defaultValue":"true",
"allowedValues": [
"false",
"true"],
"metadata":{
"description":"Enable or disable the Capture for your event hub"
}
}
captureEncodingFormat
El formato de codificación que especifica para serializar los datos de eventos.
"captureEncodingFormat":{
"type":"string",
"defaultValue":"Avro",
"allowedValues":[
"Avro"],
"metadata":{
"description":"The encoding format in which Capture serializes the EventData"
}
}
captureTime
El intervalo de tiempo en el que Event Hubs Capture comienza a capturar los datos.
"captureTime":{
"type":"int",
"defaultValue":300,
"minValue":60,
"maxValue":900,
"metadata":{
"description":"The time window in seconds for the capture"
}
}
captureSize
El intervalo de tamaño en el que Capture comienza a capturar los datos.
"captureSize":{
"type":"int",
"defaultValue":314572800,
"minValue":10485760,
"maxValue":524288000,
"metadata":{
"description":"The size window in bytes for capture"
}
}
captureNameFormat
El formato de nombre que usa Event Hubs Capture para escribir archivos Avro. Tenga en cuenta que un formato
de nombre de Capture debe contener los campos {Namespace} , {EventHub} , {PartitionId} , {Year} , {Month} ,
{Day} , {Hour} , {Minute} y {Second} . Estos se pueden organizar en cualquier orden, con o sin delimitadores.
"captureNameFormat": {
"type": "string",
"defaultValue": "{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}",
"metadata": {
"description": "A Capture Name Format must contain {Namespace}, {EventHub}, {PartitionId}, {Year},
{Month}, {Day}, {Hour}, {Minute} and {Second} fields. These can be arranged in any order with or without
delimeters. E.g. Prod_{EventHub}/{Namespace}\\{PartitionId}_{Year}_{Month}/{Day}/{Hour}/{Minute}/{Second}"
}
}
apiVersion
La versión de API de la plantilla.
"apiVersion":{
"type":"string",
"defaultValue":"2017-04-01",
"metadata":{
"description":"ApiVersion used by the template"
}
}
"destinationStorageAccountResourceId":{
"type":"string",
"metadata":{
"description":"Your existing Storage account resource ID where you want the blobs be captured"
}
}
blobContainerName
El contenedor de blobs en el que se van a capturar los datos del evento.
"blobContainerName":{
"type":"string",
"metadata":{
"description":"Your existing storage container in which you want the blobs captured"
}
}
Use los parámetros siguientes si elige Azure Data Lake Storage Gen1 como destino. Debe establecer permisos en
la ruta de acceso de Data Lake Store, en el que desea capturar el evento. Para establecer permisos, vea Captura de
datos para Azure Data Lake Storage Gen1.
subscriptionId
El identificador de suscripción para el espacio de nombres de Event Hubs y Azure Data Lake Store. Ambos recursos
deben estar en el mismo identificador de suscripción.
"subscriptionId": {
"type": "string",
"metadata": {
"description": "Subscription ID of both Azure Data Lake Store and Event Hubs namespace"
}
}
dataLakeAccountName
El nombre de Azure Data Lake Store para los eventos capturados.
"dataLakeAccountName": {
"type": "string",
"metadata": {
"description": "Azure Data Lake Store name"
}
}
dataLakeFolderPath
La ruta de acceso de la carpeta de destino para los eventos capturados. Es la carpeta de Data Lake Store en la que
se insertarán los eventos durante la operación de captura. Para establecer los permisos de esta carpeta, consulte
Uso de Azure Data Lake Store para capturar datos de Event Hubs.
"dataLakeFolderPath": {
"type": "string",
"metadata": {
"description": "Destination capture folder path"
}
}
}
]
}
]
Recursos que deben implementarse para Azure Data Lake Store como
destino
Crea un espacio de nombres de tipo EventHub , con una instancia de Event Hubs, y también habilita la
característica Capture en Azure Data Lake Store.
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('namespaceName')]",
"type": "Microsoft.EventHub/Namespaces",
"location": "[variables('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('eventHubName')]",
"type": "EventHubs",
"dependsOn": [
"[concat('Microsoft.EventHub/namespaces/', parameters('namespaceName'))]"
],
"properties": {
"path": "[parameters('eventHubName')]",
"captureDescription": {
"enabled": "true",
"skipEmptyArchives": false,
"encoding": "[parameters('archiveEncodingFormat')]",
"intervalInSeconds": "[parameters('captureTime')]",
"sizeLimitInBytes": "[parameters('captureSize')]",
"destination": {
"name": "EventHubArchive.AzureDataLake",
"properties": {
"DataLakeSubscriptionId": "[parameters('subscriptionId')]",
"DataLakeAccountName": "[parameters('dataLakeAccountName')]",
"DataLakeFolderPath": "[parameters('dataLakeFolderPath')]",
"ArchiveNameFormat": "[parameters('captureNameFormat')]"
}
}
}
}
}
]
}
]
NOTE
Puede habilitar o deshabilitar el envío de archivos vacíos cuando no se producen eventos durante la ventura de Capture
mediante la propiedad skipEmptyArchives .
PowerShell
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module
(Presentación del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az,
consulte Instalación de Azure PowerShell.
Implemente la plantilla para habilitar Event Hubs Capture en Azure Data Lake Store:
Azure CLI
Azure Blob Storage como destino:
Pasos siguientes
También puede configurar la funcionalidad de captura de Event Hubs mediante Azure Portal. Para más
información, consulte Habilitación de la funcionalidad de captura de Event Hubs mediante Azure Portal.
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Creación de un centro de eventos
Preguntas más frecuentes sobre Event Hubs
Capture datos de Event Hubs en Azure Storage y
léalos mediante Python (azure-eventhub versión 5)
18/08/2020 • 11 minutes to read • Edit Online
Puede configurar un centro de eventos para que los datos que se envíen al mismo se capturen en una cuenta de
Azure Storage o en Azure Data Lake Storage Gen 1 o Gen 2. En este artículo se muestra cómo escribir código de
Python para enviar eventos a un centro de eventos y cómo leer los datos capturados de Azure Blob Storage . Para
más información sobre esta característica, consulte la introducción a la característica de captura de Event Hubs.
Este inicio rápido usa el SDK de Azure Python para mostrar la característica de captura. La aplicación sender.py
envía datos telemétricos del entorno simulados a Event Hubs en formato JSON. El centro de eventos está
configurado para usar la característica Capture para escribir estos datos en Blob Storage en lotes. La aplicación
capturereader.py lee estos blobs y crea un archivo de anexos para cada dispositivo. Luego, la aplicación escribe los
datos en archivos .CSV.
IMPORTANT
En este inicio rápido se usa la versión 5 del SDK de Python para Azure Event Hubs. Para ver un inicio rápido que use la
versión 1 del SDK de Python, consulte este artículo.
Requisitos previos
Python 2.7 y 3.5 o posterior, con PIP instalado y actualizado.
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Un espacio de nombres de Event Hubs y un centro de eventos activos. Crear un espacio de nombres de
Event Hubs y un centro de eventos en el espacio de nombres. Registre el nombre del espacio de nombres de
Event Hubs, el nombre del centro de eventos y la clave de acceso principal del espacio de nombres. Para
obtener la clave de acceso, consulte Obtención de una cadena de conexión de Event Hubs. El nombre de la
clave predeterminada es RootManageSharedAccessKey. Para este inicio rápido solo necesita la clave
principal. No necesita la cadena de conexión.
Una cuenta de Azure Storage, un contenedor de blobs en la cuenta de almacenamiento y una cadena de
conexión de la cuenta de almacenamiento. Si no tiene estos elementos, realice estas operaciones:
1. Creación de una cuenta de Azure Storage
2. Creación de un contenedor de blobs en la cuenta de almacenamiento
3. Obtención de la cadena de conexión para una cuenta de almacenamiento
Asegúrese de registrar la cadena de conexión y el nombre del contenedor para usarlo posteriormente en
este inicio rápido.
Habilite la característica de captura para el centro de eventos. Para ello, siga las instrucciones de Habilitación
de la característica de captura de Event Hubs desde Azure Portal. Seleccione la cuenta de almacenamiento y
el contenedor de blobs que creó en el paso anterior. También puede habilitar la característica al crear un
centro de eventos.
import time
import os
import uuid
import datetime
import random
import json
# Create a producer client to produce and publish events to the event hub.
producer = EventHubProducerClient.from_connection_string(conn_str="EVENT HUBS NAMESAPCE CONNECTION
STRING", eventhub_name="EVENT HUB NAME")
def processBlob2(filename):
reader = DataFileReader(open(filename, 'rb'), DatumReader())
dict = {}
for reading in reader:
parsed_json = json.loads(reading["Body"])
if not 'id' in parsed_json:
return
if not parsed_json['id'] in dict:
list = []
dict[parsed_json['id']] = list
else:
list = dict[parsed_json['id']]
list.append(parsed_json)
reader.close()
for device in dict.keys():
filename = os.getcwd() + '\\' + str(device) + '.csv'
deviceFile = open(filename, "a")
for r in dict[device]:
deviceFile.write(", ".join([str(r[x]) for x in r.keys()])+'\n')
def startProcessing():
print('Processor started using path: ' + os.getcwd())
# Create a blob container client.
container = ContainerClient.from_connection_string("AZURE STORAGE CONNECTION STRING",
container_name="BLOB CONTAINER NAME")
blob_list = container.list_blobs() # List all the blobs in the container.
for blob in blob_list:
# Content_length == 508 is an empty file, so process only content_length > 508 (skip empty
files).
if blob.size > 508:
print('Downloaded a non empty blob: ' + blob.name)
# Create a blob client for the blob.
blob_client = ContainerClient.get_blob_client(container, blob=blob.name)
# Construct a file name based on the blob name.
cleanName = str.replace(blob.name, '/', '_')
cleanName = os.getcwd() + '\\' + cleanName
with open(cleanName, "wb+") as my_file: # Open the file to write. Create it if it doesn't
exist.
my_file.write(blob_client.download_blob().readall()) # Write blob contents into the
file.
processBlob2(cleanName) # Convert the file into a CSV file.
os.remove(cleanName) # Remove the original downloaded file.
# Delete the blob from the container after it's read.
container.delete_blob(blob.name)
startProcessing()
3. Reemplace AZURE STORAGE CONNECTION STRING por la cadena de conexión de su cuenta de Azure Storage. El
nombre del contenedor que creó en este inicio rápido es capture. Si ha usado otro nombre para el
contenedor, reemplace capture por el nombre del contenedor en la cuenta de almacenamiento.
python sender.py
python capturereader.py
Este procesador de captura usa el directorio local para descargar todos los blobs de la cuenta de
almacenamiento y del contenedor. Procesa los que no estén vacíos y escribe los resultados en forma de
archivos .CSV en el directorio local.
Pasos siguientes
Consulte los ejemplos de Python en GitHub.
Inicio rápido: Tutorial de Event Hubs Capture: Python
(azure-eventhub, versión 1)
18/08/2020 • 10 minutes to read • Edit Online
Capture es una característica de Azure Event Hubs. Puede usar Capture para enviar automáticamente los datos de
streaming que hay en un centro de eventos a una cuenta de Azure Blob Storage que prefiera. Esto facilita el
procesamiento por lotes en datos de streaming en tiempo real. En este artículo se describe cómo utilizar Event
Hubs Capture con Python. Para más información acerca de Capture de Event Hubs, consulte Capture de Event
Hubs mediante Azure Event Hubs.
En esta guía se usa el SDK de Azure para Python a fin de demostrar la característica Capture. El programa
sender.py envía datos telemétricos del entorno simulados a Event Hubs en formato JSON. El centro de eventos usa
la característica Capture para escribir estos datos en Blob Storage en lotes. La aplicación capturereader.py lee estos
blobs, crea un archivo de anexos para cada uno de los dispositivos y escribe los datos en los archivos .csv de cada
dispositivo.
WARNING
Este inicio rápido es para la versión 1 del SDK de Python para Azure Event Hubs. Se recomienda migrar el código a la
versión 5 del SDK de Python.
Requisitos previos
Python 3.4 o posterior, con pip instalado y actualizado.
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Un espacio de nombres de Event Hubs activo y un centro de eventos, creados siguiendo las instrucciones
que se indican en Inicio rápido: Creación de un centro de eventos mediante Azure Portal. Tome nota del
espacio de nombres y los nombres del centro de eventos para usarlos más adelante en este tutorial.
NOTE
Si ya tiene un contenedor de almacenamiento para usar, puede habilitar Capture y seleccionar el contenedor de
almacenamiento al crear el centro de eventos.
El nombre de la clave de acceso compartido y el valor de clave principal de Event Hubs. Busque o cree estos
valores en Directivas de acceso compar tido en la página de Event Hubs. El nombre de la clave de
acceso predeterminada es RootManageSharedAccessKey . Copie el nombre de clave de acceso y el valor
de clave principal para usarlos más adelante en este tutorial.
import uuid
import datetime
import random
import json
from azure.servicebus.control_client import ServiceBusService
for y in range(0,20):
for dev in devices:
reading = {'id': dev, 'timestamp': str(datetime.datetime.utcnow()), 'uv': random.random(),
'temperature': random.randint(70, 100), 'humidity': random.randint(70, 100)}
s = json.dumps(reading)
sbs.send_event('<eventhub>', s)
print(y)
4. Guarde el archivo.
def processBlob(filename):
reader = DataFileReader(open(filename, 'rb'), DatumReader())
dict = {}
for reading in reader:
parsed_json = json.loads(reading["Body"])
if not 'id' in parsed_json:
return
if not parsed_json['id'] in dict:
list = []
dict[parsed_json['id']] = list
else:
list = dict[parsed_json['id']]
list.append(parsed_json)
reader.close()
for device in dict.keys():
deviceFile = open(device + '.csv', "a")
for r in dict[device]:
deviceFile.write(", ".join([str(r[x]) for x in r.keys()])+'\n')
Si tiene una versión anterior de azure-storage o azure , es posible que tenga que utilizar la opción
--upgrade .
También puede que tenga que ejecutar el comando siguiente. La ejecución de este comando no es necesaria
en la mayoría de los sistemas.
python capturereader.py
El procesador de captura descarga todos los blobs que no estén vacíos del contenedor de la cuenta de
almacenamiento y escribe los resultados como archivos .csv en el directorio local.
Pasos siguientes
Para más información sobre Event Hubs, consulte:
Información general de Event Hubs Capture
Aplicaciones de ejemplo que usan Event Hubs
Información general de Event Hubs
Inicio rápido: Streaming de datos con Event Hubs
mediante el protocolo de Kafka
18/08/2020 • 4 minutes to read • Edit Online
En esta guía de inicio rápido se muestra cómo transmitir a instancias de Event Hubs sin cambiar los clientes del
protocolo o ejecutar sus propios clústeres. Aprenderá a usar los productores y los consumidores para hablar con
instancias de Event Hubs solo con un cambio de configuración en las aplicaciones. Azure Event Hubs admite
Apache Kafka versión 1.0.
NOTE
Este ejemplo está disponible en GitHub.
Prerrequisitos
Para completar esta guía de inicio rápido, asegúrese de cumplir los siguientes requisitos previos:
Lea el artículo Event Hubs para Apache Kafka.
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Kit de desarrollo de Java (JDK) 1.7+.
Descargue e instale un archivo binario de Maven.
Git
NOTE
Event Hubs para Kafka solo está disponible en los niveles estándar y dedicado . El nivel básico no es compatible con Kafka
en Event Hubs.
OAuth:
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler;
5. Vaya a azure-event-hubs-for-kafka/quickstart/java/consumer .
6. Actualice los detalles de configuración para el consumidor en src/main/resources/consumer.config de la
siguiente manera:
TLS/SSL:
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
OAuth:
bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler;
Si el clúster de Kafka de Event Hubs tiene eventos, ahora comenzará a recibirlos desde el consumidor.
Pasos siguientes
En este artículo se muestra cómo hacer streaming a instancias de Event Hubs sin cambiar los clientes del
protocolo o ejecutar sus propios clústeres. Para más información, consulte Guía del desarrollador de Apache Kafka
para Azure Event Hubs.
Inicio rápido: Creación de un clúster de Event Hubs
dedicado mediante Azure Portal
18/08/2020 • 9 minutes to read • Edit Online
Los clústeres de Event Hubs ofrecen implementaciones de inquilino único para los clientes con las necesidades de
streaming más exigentes. Esta oferta tiene un Acuerdo de Nivel de Servicio garantizado del 99,99 % y solo está
disponible en nuestro plan de tarifa dedicado. Un clúster de Event Hubs puede incorporar millones de eventos por
segundo con capacidad garantizada y una latencia inferior a un segundo. Los espacios de nombres y centros de
eventos creados en un clúster incluyen todas las características de la oferta estándar y mucho más, pero sin límites
de entrada. La oferta dedicada también incluye la popular característica Event Hubs Capture sin costo adicional,
que permite transferir por lotes secuencias de datos a Azure Blob Storage o Azure Data Lake Storage Gen 1 y
registrarlas ahí automáticamente.
Los clústeres dedicados se aprovisionan y se facturan por unidades de capacidad (CU) , una cantidad de
recursos de CPU y memoria asignada previamente. Puede adquirir 1, 2, 4, 8, 12, 16 o 20 CU para cada clúster. En
este inicio rápido, le guiaremos por la creación de un clúster de Event Hubs de 1 unidad de capacidad (CU)
mediante Azure Portal.
NOTE
Esta experiencia de autoservicio está disponible actualmente en versión preliminar en Azure Portal. Si tiene alguna pregunta
sobre la oferta dedicada, póngase en contacto con el equipo de Event Hubs.
Prerrequisitos
Para completar esta guía de inicio rápido, asegúrese de que tiene:
Una cuenta de Azure. Si no dispone de una, puede adquirir una cuenta antes de comenzar. Esta característica no
es compatible con una cuenta gratuita de Azure.
Visual Studio 2017 Update 3 (versión 15.3, 26730.01) o posterior.
SDK de .NET Standard, versión 2.0 o posterior.
Un grupo de recursos creado.
Pasos siguientes
En este artículo, ha creado un clúster de Event Hubs. Para obtener instrucciones paso a paso para enviar y recibir
eventos desde un centro de eventos y capturar eventos en Azure Storage o Azure Data Lake Store, consulte los
siguientes tutoriales:
Envío y recepción de eventos
.NET Core
Java
Python
JavaScript
Uso de Azure Portal para habilitar Event Hubs Capture
Uso de Azure Event Hubs para Apache Kafka
Tutorial: Visualización de anomalías de datos de
eventos en tiempo real enviados a Azure Event Hubs
18/08/2020 • 26 minutes to read • Edit Online
Con Azure Event Hubs, puede usar Azure Stream Analytics para comprobar los datos entrantes y extraer las
anomalías, que luego puede visualizar en Power BI. Supongamos que tiene miles de dispositivos que envían
constantemente datos en tiempo real a un centro de eventos, lo que suma millones de eventos por segundo.
¿Cómo comprueba errores y anomalías en tantos datos? Por ejemplo, ¿y si los dispositivos envían transacciones de
tarjeta de crédito y necesita capturarlas en cualquier lugar donde tenga varias transacciones en varios países o
regiones dentro de un intervalo de tiempo de 5 segundos? Esto podría ocurrir si alguien roba tarjetas de crédito y
luego las usa para comprar artículos en todo el mundo a la misma hora.
En este tutorial, se simula este ejemplo. Ejecutará una aplicación que crea y envía transacciones de tarjeta de crédito
a un centro de eventos. A continuación, leerá el flujo de datos en tiempo real con Azure Stream Analytics, que
separa las transacciones válidas de las que no lo son y, luego, usará Power BI para identificar visualmente las
transacciones etiquetadas como no válidas.
En este tutorial, aprenderá a:
Creación de un espacio de nombres de Event Hubs
Creación de un centro de eventos
Ejecutar la aplicación que envía transacciones de tarjeta de crédito
Configurar un trabajo de Stream Analytics para procesar esas transacciones
Configurar una visualización de Power BI para mostrar los resultados
Para completar este tutorial, necesitará una suscripción de Azure. Si no tiene una, cree una cuenta gratuita antes de
empezar.
Prerrequisitos
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Configuración de recursos
En este tutorial, necesitará un espacio de nombres de Event Hubs y un centro de eventos. Puede crear estos
recursos con Azure PowerShell o la CLI de Azure. Use el mismo grupo de recursos y la misma ubicación para todos
los recursos. Al final, puede quitar todos los elementos en un solo paso mediante la eliminación del grupo de
recursos.
En las secciones siguientes se describe cómo realizar estos pasos necesarios. Siga las instrucciones de la CLI o de
PowerShell para realizar los pasos siguientes:
1. Cree un grupo de recursos.
2. Cree un espacio de nombres de Event Hubs.
3. Cree un centro de eventos.
NOTE
Hay variables establecidas en cada script que necesitará más adelante en este tutorial. Estas incluyen el nombre del grupo de
recursos ($resourceGroup), el espacio de nombres del centro de eventos ( $eventHubNamespace ) y el nombre del centro
de eventos ( $eventHubName ). Más adelante en este artículo se hace referencia a ellas con su prefijo de signo del dólar ($),
para que sepa que se establecieron en el script.
# The Event Hubs namespace name must be globally unique, so add a random number to the end.
eventHubNamespace=ContosoEHNamespace$RANDOM
echo "Event Hub Namespace = " $eventHubNamespace
# The event hub name must be globally unique, so add a random number to the end.
eventHubName=ContosoEHhub$RANDOM
echo "event hub name = " $eventHubName
# Get the connection string that authenticates the app with the Event Hubs service.
connectionString=$(az eventhubs namespace authorization-rule keys list \
--resource-group $resourceGroup \
--namespace-name $eventHubNamespace \
--name RootManageSharedAccessKey \
--query primaryConnectionString \
--output tsv)
echo "Connection string = " $connectionString
# The Event Hubs namespace name must be globally unique, so add a random number to the end.
$eventHubNamespace = "contosoEHNamespace$(Get-Random)"
Write-Host "Event Hub Namespace is " $eventHubNamespace
# The event hub name must be globally unique, so add a random number to the end.
$eventHubName = "contosoEHhub$(Get-Random)"
Write-Host "Event hub Name is " $eventHubName
# Get the event hub key, and retrieve the connection string from that object.
# You need this to run the app that sends test messages to the event hub.
$eventHubKey = Get-AzEventHubKey -ResourceGroupName $resourceGroup `
-Namespace $eventHubNamespace `
-AuthorizationRuleName RootManageSharedAccessKey
En el resto de los campos, acepte los valores predeterminados. Haga clic en Crear .
Adición de una entrada al trabajo de Stream Analytics
Si no está en el portal en el panel Trabajo de Stream Analytics , puede volver al trabajo de Stream Analytics; para
ello, haga clic en Grupos de recursos en el portal y seleccione el grupo de recursos ( ContosoResourcesEH ).
Esta acción muestra todos los recursos del grupo y ahí puede seleccionar el trabajo de Stream Analytics.
Las entradas del trabajo de Steam Analytics son las transacciones de tarjeta de crédito del centro de eventos.
NOTE
Los valores de variables que comienzan con el signo del dólar ($) se establecen en los scripts de inicio de las secciones
anteriores. Debe usar aquí los mismos valores al especificar esos campos, que son el espacio de nombres de Event Hubs y el
nombre del centro de eventos.
7. En la página Panel, haga clic en Agregar icono , seleccione Datos de streaming personalizados en la
sección DATOS EN TIEMPO REAL y, después, haga clic en Siguiente .
8. Seleccione el conjunto de datos (contosoehdataset ) y haga clic en Siguiente .
9. Seleccione Tarjeta como tipo de visualización. En Campos , haga clic en Agregar valor y, luego, seleccione
fraudulentuses .
Limpieza de recursos
Si quiere quitar todos los recursos que ha creado, quite los datos de visualización de Power BI y, luego, elimine el
grupo de recursos. Al eliminar un grupo de recursos se eliminan todos los recursos contenidos en él. En este caso,
se quita el centro de eventos, el espacio de nombres de Event Hubs, el trabajo de Stream Analytics y el grupo de
recursos.
Limpieza de recursos en la visualización de Power BI
Inicie sesión en su cuenta de Power BI. Vaya a Mi área de trabajo . En la línea con el nombre del panel, haga clic en
el icono de la papelera. A continuación, vaya a Conjuntos de datos y haga clic en el icono de papelera para
eliminar el conjunto de datos (contosoehdataset ).
Limpieza de recursos mediante la CLI de Azure
Para quitar el grupo de recursos, use el comando az group delete.
Event Hubs Capture es la forma más fácil de enviar automáticamente datos en streaming de Event Hubs a Azure
Blob Storage o a Azure Data Lake Store. Posteriormente dichos datos se pueden procesar y enviar a otros destinos
de almacenamiento, como SQL Data Warehouse o Cosmos DB. En este tutorial aprenderá a capturar datos de una
instancia de Event Hubs y migrarlos a SQL Data Warehouse mediante el uso de una función de Azure
desencadenada por Event Grid.
En primer lugar, cree una instancia de Event Hubs con la característica Capture habilitada y establezca una
instancia de Azure Blob Storage como destino. Los datos que genera WindTurbineGenerator se transmiten en
secuencias a la instancia de Event Hubs y se capturan automáticamente en Azure Storage como archivos Avro.
Después, cree una suscripción a Azure Event Grid con el espacio de nombres de Event Hubs como origen y el
punto de conexión de Azure Functions como destino.
Cada vez que un archivo Avro nuevo se envía al blob de Azure Storage mediante la característica Capture de
Event Hubs, Event Grid se lo notifica a Azure Functions con el identificador URI del blob. Luego, Azure Functions
migra los datos del blob a una instancia de SQL Data Warehouse.
En este tutorial realizará lo siguiente:
Implementar la infraestructura
Publicar código en una aplicación de Functions
Crear una suscripción a Event Grid desde la aplicación de Functions
Hacer streaming de los datos de ejemplo de en un a instancia de Event Hubs.
Comprobar los datos capturados en SQL Data Warehouse
Requisitos previos
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Visual Studio 2019. Asegúrese de que instala las siguientes con cargas de trabajo: desarrollo de escritorio
de .NET, desarrollo de Azure, desarrollo web y de ASP.NET, desarrollo de Node.js y desarrollo de Python
Descarga del Ejemplo de Git La solución de ejemplo contiene los siguientes componentes:
WindTurbineDataGenerator : un publicador simple que envía datos de turbina eólica de ejemplo a un
centro de eventos con la función Capture habilitada
FunctionDWDumper : una función de Azure que recibe una notificación de Event Grid cuando se captura
un archivo Avro en el blob de Azure Storage. Recibe la ruta de acceso, del identificador URI del blob, lee
su contenido y envía estos datos a SQL Data Warehouse.
En este ejemplo se usa el paquete Azure.Messaging.EventHubs más reciente. Puede encontrar el ejemplo
anterior que usa el paquete Microsoft.Azure.EventHubs aquí.
Implementar la infraestructura
Use Azure PowerShell o la CLI de Azure para implementar la infraestructura necesaria para este tutorial con este
plantilla de Azure Resource Manager. Esta plantilla crea los siguientes recursos:
Event Hubs con la característica Capture habilitada
Cuenta de almacenamiento de los datos de eventos capturados
Un plan de Azure App Service para hospedar la aplicación Functions
Aplicación de función para procesar archivos de eventos capturados
Un servidor SQL lógico para hospedar Data Warehouse
Un SQL Data Warehouse para almacenar los datos migrados
Las secciones siguientes proporcionan comandos de CLI de Azure y Azure PowerShell para implementar la
infraestructura necesaria para el tutorial. Actualice los nombres de los siguientes objetos antes de ejecutar los
comandos:
Grupo de recursos de Azure
Región del grupo de recursos
Espacio de nombres de Event Hubs
Centro de eventos
Servidor SQL lógico
Usuario de SQL (y contraseña)
Azure SQL Database
Azure Storage
Aplicación Azure Functions
Estos scripts tardan algún tiempo en crear todos los artefactos de Azure. Espere hasta que el script se complete
antes de continuar. Si la implementación no se realiza por alguna razón, elimine el grupo de recursos, corrija el
problema notificado y vuelva a ejecutar el comando.
Azure CLI
Para implementar la plantilla mediante la CLI de Azure, use los siguientes comandos:
2. Seleccione la función.
2. Seleccione RootManageSharedAccessKey .
Pasos siguientes
Puede usar las eficaces herramientas de visualización de datos con Data Warehouse para conseguir detalles
accionables.
En este artículo se muestra cómo usar Power BI con SQL Data Warehouse
Tutorial: Procesamiento de eventos de Apache Kafka
para Event Hubs mediante Stream Analytics
18/08/2020 • 10 minutes to read • Edit Online
En este artículo se muestra cómo transmitir en secuencias datos a Event Hubs y cómo procesarlos con Azure
Stream Analytics. Estos pasos son los siguientes:
1. Cree un espacio de nombres de Event Hubs.
2. Cree un cliente de Kafka que envíe mensajes al centro de eventos.
3. Cree un trabajo de Stream Analytics que copie datos del centro de eventos en Azure Blob Storage.
No es necesario cambiar a los clientes de protocolo ni ejecutar sus propios clústeres al usar el punto de conexión
de Kafka expuesto por un centro de eventos. Azure Event Hubs admite Apache Kafka versión 1.0. y posteriores.
Prerrequisitos
Para completar esta guía de inicio rápido, asegúrese de cumplir los siguientes requisitos previos:
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Kit de desarrollo de Java (JDK) 1.7+.
Descargue e instale un archivo binario de Maven.
Git
Una cuenta de Azure Storage . Si no tiene, cree una antes de continuar. El trabajo de Stream Analytics en este
tutorial almacena los datos de salida en Azure Blob Storage.
NOTE
Event Hubs para Kafka solo está disponible en los niveles estándar y dedicado . El nivel básico no es compatible con Kafka
en Event Hubs.
Este código envía los datos del evento en formato JSON . Al configurar la entrada para un trabajo de Stream
Analytics, especifique JSON como formato de los datos de entrada.
7. Ejecute el productor y transmítalo a Event Hubs. En un equipo Windows, al usar un símbolo del
sistema Node.js , cambie a la carpeta azure-event-hubs-for-kafka/quickstart/java/producer antes de
ejecutar estos comandos.
Probar el escenario
1. Vuelva a ejecutar el productor de Kafka para enviar eventos al centro de eventos.
El trabajo de Azure Stream Analytics recibió los datos de entrada del centro de eventos y los almacenó en
Azure Blob Storage en este escenario.
Pasos siguientes
En este artículo se muestra cómo hacer streaming a instancias de Event Hubs sin cambiar los clientes del protocolo
o ejecutar sus propios clústeres. Para más información sobre Event Hubs para Apache Kafka, consulte Guía del
desarrollador de Apache Kafka para Azure Event Hubs.
Repositorios GIT con ejemplos para Azure Event
Hubs
18/08/2020 • 2 minutes to read • Edit Online
Puede encontrar ejemplos de Event Hubs en GitHub. Estos ejemplos muestran características clave de Azure Event
Hubs. En este artículo se categorizan y describen los ejemplos disponibles, con vínculos a cada uno.
Ejemplos de .NET
VERSIÓ N UB IC A C IÓ N DE LO S E JEM P LO S
Ejemplos de Java
VERSIÓ N UB IC A C IÓ N DE LO S E JEM P LO S
Ejemplos de Python
VERSIÓ N UB IC A C IÓ N DE LO S E JEM P LO S
Ejemplos de JavaScript
VERSIÓ N UB IC A C IÓ N DE LO S E JEM P LO S
Ejemplos de Go
Puede encontrar ejemplos de Go para Azure Event Hubs en el repositorio de GitHub azure-event-hubs-go.
Pasos siguientes
Si desea conocer más información acerca de Event Hubs, consulte los siguientes artículos:
Información general de Event Hubs
Características de Event Hubs
Preguntas más frecuentes sobre Event Hubs
Definiciones integradas de Azure Policy para Azure
Event Hubs
18/08/2020 • 3 minutes to read • Edit Online
Esta página es un índice de las definiciones de directivas integradas de Azure Policy en Azure Event Hubs. Puede
encontrar elementos integrados adicionales de Azure Policy para otros servicios en Definiciones de elementos
integrados de Azure Policy.
El nombre de cada definición de directiva integrada se vincula a la definición de directiva en Azure Portal. Use el
vínculo de la columna Versión para ver el origen en el repositorio de GitHub de Azure Policy.
Todas las reglas de Los clientes del Centro de Audit, Deny, Disabled 1.0.1
autorización, excepto eventos no deben usar una
RootManageSharedAccessKe directiva de acceso de nivel
y, se deben eliminar del de espacio de nombres que
espacio de nombres del proporciona acceso a todas
centro de eventos las colas y temas de un
espacio de nombres. Para
alinearse con el modelo de
seguridad con privilegios
mínimos, debe crear
directivas de acceso en las
entidades para que las colas
y los temas proporcionen
acceso solo a la entidad
específica.
El centro de eventos debe Esta directiva audita todo AuditIfNotExists, Disabled 1.0.0
usar un punto de conexión centro de eventos no
del servicio de red virtual configurado para usar un
punto de conexión del
servicio de red virtual.
Pasos siguientes
Los elementos integrados se pueden encontrar en el repositorio de GitHub de Azure Policy.
Revise la estructura de definición de Azure Policy.
Vea la Descripción de los efectos de directivas.
Características y terminología de Azure Event
Hubs
18/08/2020 • 25 minutes to read • Edit Online
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. Consulte ¿Qué es Event Hubs?
para obtener una introducción detallada.
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.
Espacio de nombres
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.
Publicadores de eventos
Cualquier entidad que envíe datos a un centro de eventos es un productor de eventos o un publicador de
eventos. Los publicadores de eventos pueden publicar eventos mediante HTTPS o AMQP 1.0 o Kafka 1.0 y
versiones posteriores. 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.
Publicación de un evento
Puede publicar un evento a través de AMQP 1.0, Kafka 1.0 y versiones posteriores o HTTPS. Event Hubs
ofrece bibliotecas cliente y clases para publicar eventos en un centro de eventos de clientes .NET. Para otras
plataformas y tiempos de ejecución, puede usar cualquier cliente de AMQP 1.0, como Apache Qpid. Puede
publicar eventos individualmente o por lotes. 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. La publicación de eventos que
superen este umbral producirá un 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.
La opción de usar AMQP o HTTPS es específica para el escenario de uso. AMQP requiere el establecimiento
de un socket bidireccional persistente, además de la seguridad de nivel de transporte (TLS) o 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 tiene un mayor rendimiento para los publicadores frecuentes.
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. 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. De lo contrario, se produce un error.
Directiva del publicador
Los Event Hubs permiten un control granular sobre los publicadores de eventos a través de las directivas de
publicador. Las directivas de publicador son características de tiempo de ejecución diseñadas para facilitar
grandes números de publicadores de eventos independientes. 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:
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. Al usar
directivas de publicador, el valor Par titionKey se establece como el nombre del publicador. Para que
funcione correctamente, estos valores deben coincidir.
Capturar
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. Puede habilitar
Capture desde Azure Portal y especificar una ventana de tiempo y de tamaño mínimos para realizar la
captura. 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.
Los datos capturados se escriben en el formato de Apache Avro.
Particiones
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. 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.
Una partición es una secuencia ordenada de eventos que se mantiene en un centro de eventos. A medida
que llegan eventos más recientes, se agregan al final de esta secuencia. Una partición puede considerarse
como un "registro de confirmación".
Event Hubs retiene datos durante un tiempo de retención configurado que se aplica a todas las particiones
del centro de eventos. Los eventos expiran en función del tiempo; no se pueden eliminar explícitamente.
Dado que las particiones son independientes y contienen sus propias secuencias de datos, a menudo crecen
a velocidades diferentes.
El número de particiones se especifica en el momento de la creación y debe estar comprendido entre 2 y 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. Las particiones son un mecanismo de organización de datos relacionado
con el paralelismo de bajada necesario para consumir las aplicaciones. El número de particiones de un
centro de eventos está directamente relacionado con el número de lectores simultáneos que espera tener.
Puede aumentar el número de particiones más allá de 32 poniéndose en contacto con el equipo de Event
Hubs.
Es posible que quiera establecer el valor lo más alto posible, que es 32, en el momento de la creación.
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. En el primer caso, tendrá que leer eventos en las 32
particiones. 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.
Aunque las particiones son identificables y se pueden realizar envíos a estas directamente, no se
recomienda hacerlo. En su lugar, puede usar las construcciones de nivel superior que se presentan en la
sección Publicador de eventos.
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.
Se recomienda equilibrar las unidades de procesamiento y las particiones 1:1 para lograr una escalabilidad
óptima. Una sola partición tiene una entrada y una salida garantizadas de hasta una unidad de
procesamiento. Aunque puede lograr un mayor procesamiento en una partición, no se garantiza el
rendimiento. 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.
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? Elija el número de
particiones en función del paralelismo de bajada que quiere conseguir, así como de las futuras necesidades
de procesamiento. No hay ningún cargo por el número de particiones que tiene dentro de un centro de
eventos.
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.
Tokens de SAS
Event Hubs usa firmas de acceso compartido que están disponibles en el nivel del espacio de nombres y del
centro de eventos. 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. Con el nombre de la clave (directiva) y el token, Event
Hubs puede volver a generar el hash y así autenticar al remitente. Normalmente, los tokens de SAS para
publicadores de eventos se crean solo con privilegios de envío en un centro de eventos concreto. 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. Para obtener más información sobre el funcionamiento con SAS, consulte
Autenticación con firma de acceso compartido en Service Bus.
Consumidores de eventos
Cualquier entidad que lea datos de eventos de un centro de eventos es un consumidor de eventos. 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. El cliente no necesita realizar un sondeo de
disponibilidad de los datos.
Grupos de consumidores
El mecanismo de publicación y suscripción de Event Hubs se habilita a través de los grupos de
consumidores. Un grupo de consumidores es una vista (estado, posición o desplazamiento) de un centro de
eventos completo. 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.
En una arquitectura de procesamiento de flujos, cada aplicación de bajada se corresponde con un grupo de
consumidores. Si quiere escribir datos de eventos para el almacenamiento a largo plazo, esa aplicación de
escritura de almacenamiento es un grupo de consumidores. Otro grupo de consumidores independiente
puede realizar el procesamiento de eventos complejos. Solo puede obtener acceso a las particiones a través
de un grupo de consumidores. 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.
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 par tición por grupo de consumidores .
Cada lector recibe todos los mensajes dentro de una sola partición. Si tiene varios lectores en la misma
partición, procesará los mensajes duplicados. Debe controlar esto en su código, pues no puede ser trivial.
Sin embargo, es un enfoque válido en algunos escenarios.
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. 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. Para más información, consulte Conexión a una partición.
A continuación se muestran ejemplos de la convención de URI del grupo de consumidores:
Puntos de control
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. La creación de puntos de comprobación es responsabilidad del
consumidor y se realiza por partición dentro de un grupo de consumidores. 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.
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.
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. 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. Es posible volver a los
datos más antiguos especificando un desplazamiento inferior desde este proceso de puntos de
comprobación. 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.
NOTE
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. 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. 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. 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:
.NET
Java
JavaScript o TypeScript
Python
Pasos siguientes
Para obtener más información acerca de Event Hubs, visite los vínculos siguientes:
Introducción a Event Hubs
.NET
Java
Python
JavaScript
Guía de programación de Event Hubs
Disponibilidad y coherencia en Event Hubs
Preguntas más frecuentes sobre Event Hubs
Ejemplos de Event Hubs
Host del procesador de eventos
18/08/2020 • 27 minutes to read • Edit Online
NOTE
Este artículo se aplica a la versión anterior del SDK de Azure Event Hubs. Para aprender a migrar el código a la versión
más reciente del SDK, consulte estas guías de migración.
.NET
Java
Python
Script de Java
Consulte también Equilibrio de la carga de particiones entre varias instancias de la aplicación.
Azure Event Hubs es un eficaz servicio de ingesta de telemetría que se puede usar para hacer streaming de
millones de eventos a un bajo costo. En este artículo se describe cómo usar eventos ingeridos mediante el
host del procesador de eventos (EPH), un agente de consumidor inteligente que simplifica la administración
de la creación de puntos de comprobación, la concesión y los lectores de eventos paralelos.
La clave del escalado de Event Hubs es el concepto de consumidores con particiones. En contraposición al
patrón de consumidores de la competencia, el patrón de consumidores con particiones permite una alta
escalabilidad mediante la eliminación de cuellos de botella de contención y la facilitación del paralelismo de
principio a fin.
Interfaz de IEventProcessor
En primer lugar, las aplicaciones de consumo implementan la interfaz de IEventProcessor, que tiene cuatro
métodos: OpenAsync, CloseAsync, ProcessErrorAsync y ProcessEventsAsync. Esta interfaz contiene el código
real para consumir los eventos que envía Event Hubs. El código siguiente muestra una implementación
sencilla:
A continuación, cree una instancia de una instancia de EventProcessorHost. Según la sobrecarga, al crear la
instancia de EventProcessorHost en el constructor, se usan los siguientes parámetros:
hostName: el nombre de cada instancia de consumidor. Cada instancia de EventProcessorHost debe
tener un valor único para esta variable dentro de un grupo de consumidores, así que no codifique de forma
rígida este valor.
eventHubPath: El nombre del centro de eventos.
consumerGroupName: Event Hubs usa $Default como nombre del grupo de consumidores
predeterminado, pero es recomendable crear un grupo de consumidores para sus necesidades específicas
de procesamiento.
eventHubConnectionString: la cadena de conexión al centro de eventos que se puede recuperar desde
Azure Portal. Esta cadena de conexión debe tener permisos de escucha en el centro de eventos.
storageConnectionString: la cuenta de almacenamiento que se usa para la administración de recursos
internos.
Por último, los consumidores registran la instancia de EventProcessorHost con el servicio Event Hubs. Al
registrar una clase de procesador de eventos con una instancia de EventProcessorHost, se inicia el
procesamiento de eventos. El proceso de registro indica al servicio Event Hubs que debe esperar que la
aplicación del consumidor consuma eventos de algunas de sus particiones y que debe invocar el código de
implementación de IEventProcessor siempre que envíe eventos para su consumo.
Ejemplo
Por ejemplo, imagine que hay 5 máquinas virtuales dedicadas a consumir eventos y una aplicación de consola
simple en cada máquina virtual que es la que realiza el trabajo de consumo real. Cada aplicación de consola
crea una instancia de EventProcessorHost y la registra con el servicio Event Hubs.
En este escenario de ejemplo, supongamos que se asignan 16 particiones a las 5 instancias de
EventProcessorHost . Algunas instancias de EventProcessorHost pueden disponer de algunas particiones
más que otras. Para cada partición que posee una instancia de EventProcessorHost esta crea una instancia
de la clase SimpleEventProcessor . Por tanto, hay 16 instancias de SimpleEventProcessor en total, con una de
ellas asignada a cada partición.
En la siguiente lista se resume este ejemplo:
16 particiones de Event Hubs.
5 máquinas virtuales, 1 aplicación de consumidor (por ejemplo, Consumer.exe) en cada máquina virtual.
5 instancias del host del procesador de eventos, 1 en cada máquina virtual con Consumer.exe.
16 objetos SimpleEventProcessor que crean las 5 instancias del host del procesador de eventos.
1 aplicación Consumer.exe puede contener 4 objetos SimpleEventProcessor , ya que 1 instancia del host del
procesador de eventos puede poseer 4 particiones.
DESP L A Z A M IEN TO
N O M B RE DEL T IEM P O A DQ UIRIDO EN L A PA RT IC IÓ N
GRUP O DE IDEN T IF IC A DO R DE N O M B RE DE H O ST DE C O N C ESIÓ N ( O ( P UN TO DE
C O N SUM IDO RES L A PA RT IC IÓ N ( P RO P IETA RIO ) P RO P IEDA D) C O M P RO B A C IÓ N )
:
DESP L A Z A M IEN TO
N O M B RE DEL T IEM P O A DQ UIRIDO EN L A PA RT IC IÓ N
GRUP O DE IDEN T IF IC A DO R DE N O M B RE DE H O ST DE C O N C ESIÓ N ( O ( P UN TO DE
C O N SUM IDO RES L A PA RT IC IÓ N ( P RO P IETA RIO ) P RO P IEDA D) C O M P RO B A C IÓ N )
En este caso, cada host adquiere la propiedad de una partición durante un determinado período de tiempo (la
duración de la concesión). Si se produce un error en un host (se apaga la máquina virtual), la concesión expira.
Otros hosts intentan obtener la propiedad de la partición y uno de ellos lo consigue. Este proceso restablece la
concesión de la partición con un nuevo propietario. De este modo, solo un lector a la vez puede leer en una
determinada partición de un grupo de consumidores.
Recepción de mensajes
Cada llamada a ProcessEventsAsync ofrece una colección de eventos. Es su responsabilidad administrar estos
eventos. Si desea asegurarse de que el host del procesador procesa cada mensaje al menos una vez, deberá
escribir su propio código de reintento. Pero tenga cuidado con los mensajes dudosos.
Se recomienda que el proceso se realice relativamente rápido, es decir, con el menor procesamiento posible.
En su lugar, utilice grupos de consumidores. Si tiene que escribir en el almacenamiento y hacer algo de
enrutamiento, es mejor usar dos grupos de consumidores y tener dos implementaciones de IEventProcessor
que se ejecuten por separado.
En algún momento durante el procesamiento, es posible que desee realizar un seguimiento de lo que ha leído
y completado. Es fundamental realizar un seguimiento si debe reiniciar la lectura, para no tener que volver al
principio de la transmisión. EventProcessorHost simplifica este seguimiento mediante el uso de puntos de
comprobación. Un punto de comprobación es una ubicación o desplazamiento, de una partición determinada,
dentro de un grupo de consumidores determinado, en el que está satisfecho con los mensajes que se han
procesado. Para marcar un punto de comprobación en EventProcessorHost llame al método
CheckpointAsync en el objeto PartitionContext. Esta operación se realiza en el método ProcessEventsAsync
pero también se puede realizar en CloseAsync.
Puntos de control
El método CheckpointAsync tiene dos sobrecargas: la primera, sin parámetros, crea un punto de
comprobación en el desplazamiento del evento más alto de la colección que devuelve ProcessEventsAsync.
Este desplazamiento es una marca de "límite superior" que supone que ha procesado todos los eventos
recientes cuando lo llama. Si usa este método de esta manera, tenga en cuenta que se espera que lo llame una
vez que ha devuelto el otro código de procesamiento de eventos. La segunda sobrecarga le permite
especificar una instancia de EventData para crear un punto de comprobación. Este método le permite usar un
tipo diferente de marca de agua para crear un punto de comprobación Con esta marca de agua, puede
implementar una marca "de límite inferior": el evento más bajo de la secuencia que está seguro de haber
procesado. Esta sobrecarga se proporciona para ofrecer flexibilidad en la administración de desplazamientos.
Cuando se realiza la creación de un punto de comprobación, se escribe un archivo JSON con información
específica de la partición en la cuenta de almacenamiento que se proporcionó en el constructor de
EventProcessorHost. Este archivo se actualiza continuamente. Es fundamental considerar la creación de puntos
de comprobación en contexto. No es recomendable crear un punto de comprobación en cada mensaje. La
cuenta de almacenamiento que se utilizó para la creación de puntos de comprobación no podrá administrar
esta carga y, lo que es aún más importante, la creación de puntos de comprobación para todos los eventos
puede indicar un patrón de mensajería en cola para el que una cola de Service Bus sería una opción mejor que
un centro de eventos. La ventaja de Event Hubs es que obtiene al menos una entrega a gran escala. Al hacer
los sistemas de nivel final idempotentes, es fácil recuperarse de errores o reinicios que hacen que los eventos
se reciban múltiples veces.
Cierre correcto
Por último, EventProcessorHost.UnregisterEventProcessorAsync permite un cierre correcto de todos los
lectores de partición y se le debería llamar siempre al cerrar una instancia de EventProcessorHost. Si no lo
hace, puede provocar retrasos al iniciar otras instancias de EventProcessorHost debido a conflictos de época
y de expiración de concesión. La administración de épocas se trata detalladamente en la sección Época del
artículo.
Administración de concesiones
Al registrar una clase de procesador de eventos con una instancia de EventProcessorHost, se inicia el
procesamiento de eventos. La instancia de host obtiene las concesiones sobre algunas particiones del centro
de eventos, posiblemente al tomar algunas de otras instancias, de una forma que converge en una
distribución uniforme de particiones mediante todas las instancias de host. Para cada partición de la
concesión, la instancia de host crea una instancia de la clase de procesador de eventos proporcionada,
después, recibe eventos de esa partición y los pasa a la instancia de procesador de eventos. A medida que más
casos se agregan y más concesiones se toman, EventProcessorHost equilibra finalmente la carga entre todos
los consumidores.
Como se explicó anteriormente, la tabla de seguimiento simplifica en gran medida la naturaleza de
escalabilidad automática de EventProcessorHost.UnregisterEventProcessorAsync. Cuando se inicia una
instancia de EventProcessorHost , esta adquiere el mayor número de concesiones posible y empieza a leer
eventos. A medida que la concesión se acerca a su fin, EventProcessorHost intenta renovarla realizando una
reserva. Si la concesión está disponible para la renovación, el procesador continúa la lectura, pero si no es así,
el lector se cierra y se realiza una llamada a CloseAsync. CloseAsync es una buena oportunidad para realizar
cualquier tarea de limpieza final para esa partición.
EventProcessorHost incluye una propiedad PartitionManagerOptions. Esta propiedad habilita el control
sobre la administración de concesiones. Establezca estas opciones antes de registrar la implementación de
IEventProcessor.
Época
Así es cómo funciona la época de recepción:
Con época
La época es un identificador único (valor de tiempo) que usa el servicio para aplicar la propiedad de la
partición o de la concesión. Para crear un receptor de época se usa el método CreateEpochReceiver. Este
método crea un receptor basado en época. El receptor se crea para una partición de centro de eventos
específica desde el grupo de consumidores especificado.
La característica de época ofrece a los usuarios la posibilidad de garantizar que solo hay un receptor en un
grupo de consumidores en cualquier momento dado, con las siguientes reglas:
Si no hay ningún receptor existente en un grupo de consumidores, el usuario puede crear uno con
cualquier valor de época.
Si hay un receptor con un valor de época de e1 y se crea un receptor con un valor de época de e2 donde e1
< = e2, el receptor con e1 se desconectará automáticamente si el receptor con e2 se crea correctamente.
Si hay un receptor con un valor de época de e1 y se crea un receptor con un valor de época de e2 donde e1
> e2 y, a continuación, la creación de e2 generará un error que indica que ya existe un receptor con la
época e1.
No hay época
Creará un receptor no basado en época mediante el método CreateReceiver.
Hay algunos escenarios en el procesamiento de streaming en los que a los usuarios les gustaría crear varios
receptores en un solo grupo de consumidores. Para admitir estos escenarios, tenemos la posibilidad de crear
un receptor sin época y, en este caso, se permiten hasta cinco receptores simultáneos en el grupo de
consumidores.
Modo mixto
No recomendamos el uso de aplicaciones donde crea un receptor con época y, luego, cambia a sin época o
viceversa, en el mismo grupo de consumidores. Sin embargo, cuando se produce este comportamiento, el
servicio lo controla mediante las reglas siguientes:
Si hay un receptor ya ha creado con época e1 y está recibiendo eventos activamente y se crea un receptor
sin época, se producirá un error en la creación del receptor. Los receptores de época siempre tienen
prioridad en el sistema.
Si hubiera un receptor ya ha creado con época e1 y se desconectara y se creara un receptor sin época en
una nueva instancia de MessagingFactory, la creación del receptor se realizaría correctamente. Hay una
salvedad aquí y es que nuestro sistema detectará la "desconexión del receptor" al cabo de unos 10
minutos.
Si hay uno o varios receptores creados sin época y se crea uno con época e1, se desconectan todos los
receptores antiguos.
NOTE
Se recomienda el uso de diferentes grupos de consumidores para las aplicaciones que usan épocas y para aquellos que
no usan épocas para evitar errores.
Pasos siguientes
Ahora que está familiarizado con el host del procesador de eventos, consulte los artículos siguientes para más
información acerca de Event Hubs:
Introducción a Event Hubs
.NET Core
Java
Python
JavaScript
Guía de programación de Event Hubs
Disponibilidad y coherencia en Event Hubs
Preguntas más frecuentes sobre Event Hubs
Ejemplos de Event Hubs en GitHub
Equilibrio de carga de particiones entre varias
instancias de una aplicación
18/08/2020 • 16 minutes to read • Edit Online
Para escalar la aplicación de procesamiento de eventos, puede ejecutar varias instancias de la aplicación y
equilibrar la carga entre ellas. En las versiones anteriores, EventProcessorHost permitía equilibrar la carga entre
varias instancias del programa y eventos de punto de comprobación en la recepción. En las versiones más
recientes (5.0 y posteriores), EventProcessorClient (.NET y Java) o EventHubConsumerClient (Python y
JavaScript) le permiten hacer lo mismo. El modelo de desarrollo se simplifica mediante el uso de eventos. Para
suscribirse a los eventos que le interesen, registre un controlador de eventos.
En este artículo se describe un escenario de ejemplo para el uso de varias instancias para leer eventos desde un
centro de eventos y, a continuación, se proporcionan detalles sobre las características del cliente del procesador
de eventos, que permite recibir eventos de varias particiones a la vez y equilibrar la carga con otros consumidores
que usan el mismo centro de eventos y el mismo grupo de consumidores.
NOTE
La clave del escalado de Event Hubs es el concepto de consumidores con particiones. En contraposición al patrón de
consumidores de la competencia, el patrón de consumidores con particiones permite una alta escalabilidad mediante la
eliminación de cuellos de botella de contención y la facilitación del paralelismo de principio a fin.
Escenario de ejemplo
Como caso de ejemplo, considere una empresa de seguridad en el hogar que supervisa 100 000 casas. Cada
minuto, obtiene los datos de los diversos sensores como el detector de movimiento, el sensor de apertura de
puertas y ventanas, el detector de rotura de cristales, etc., instalados en cada casa. La empresa proporciona un
sitio web para que los residentes supervisen la actividad de su casa casi en tiempo real.
Cada sensor inserta datos en un centro de eventos. El centro de eventos está configurado con 16 particiones. En
el extremo de consumo, necesita un mecanismo que pueda leer estos eventos, consolidarlos (filtrarlos, agregarlos,
etc.) y volcar el agregado a un blob de almacenamiento que, a continuación, se proyecta en una página web fácil
de usar.
ESPA C IO DE N O M B RE DEL H O RA DE L A
N O M B RES DE C EN T RO DE GRUP O DE ID. DE ÚLT IM A
EVEN T H UB S EVEN TO S C O N SUM IDO RES P RO P IETA RIO PA RT IC IÓ N M O DIF IC A C IÓ N
:
ESPA C IO DE N O M B RE DEL H O RA DE L A
N O M B RES DE C EN T RO DE GRUP O DE ID. DE ÚLT IM A
EVEN T H UB S EVEN TO S C O N SUM IDO RES P RO P IETA RIO PA RT IC IÓ N M O DIF IC A C IÓ N
Cada instancia del procesador de eventos adquiere la propiedad de una partición y empieza el procesamiento de
la misma desde el último [punto de control](# Checkpointing) conocido. Si se produce un error en un procesador
(la máquina virtual se apaga), otras instancias lo detectan al examinar la hora de la última modificación. Otras
instancias intentan obtener la propiedad de las particiones que antes pertenecían a la instancia inactiva, y el
almacén de puntos de control garantiza que solo una de las instancias tenga éxito al reclamar la propiedad de una
partición. Por lo tanto, en un momento dado, hay, a lo sumo, un procesador que reciba eventos de una partición.
Recepción de mensajes
Cuando se crea un procesador de eventos, se especifican las funciones que van a procesar los eventos y los
errores. Cada llamada a la función que procesa los eventos entrega un solo evento de una partición específica. Es
su responsabilidad administrar este evento. Si desea asegurarse de que el consumidor procesa cada mensaje al
menos una vez, debe escribir su propio código con lógica de reintento. Pero tenga cuidado con los mensajes
dudosos.
Se recomienda que lo haga relativamente rápido. Es decir, use el menor procesamiento posible. Si tiene que
escribir en el almacenamiento y llevar a cabo cierto enrutamiento, es mejor usar dos grupos de consumidores y
tener dos procesadores de eventos.
Puntos de control
El punto de control es un proceso por el que un procesador de eventos marca o confirma la posición del último
evento procesado correctamente en una partición. Por lo general, el marcado de un punto de control se realiza en
la función que procesa los eventos y se produce en cada partición de un grupo de consumidores.
Si un procesador de eventos se desconecta de una partición, otra instancia puede reanudar el procesamiento de
la partición en el punto de control confirmado previamente por el último procesador de esa partición en ese
grupo de consumidores. Cuando se conecta el procesador, pasa el desplazamiento al centro de eventos para
especificar la ubicación en la que se va a empezar a leer. De este modo, puede usar puntos de control para que las
aplicaciones de nivel inferior marquen los eventos como "completados" y para ofrecer resistencia cuando un
procesador de eventos quede fuera de servicio. Es posible volver a los datos más antiguos especificando un
desplazamiento inferior desde este proceso de puntos de comprobación.
Cuando se realiza el punto de control para marcar un evento como procesado, se agrega o se actualiza una
entrada en el almacén de puntos de control con el desplazamiento del evento y el número de secuencia. Los
usuarios deben decidir la frecuencia de actualización del punto de control. La actualización después de cada
evento procesado correctamente puede tener implicaciones en el rendimiento y el costo cuando desencadena una
operación de escritura en el almacén de puntos de control subyacente. Además, el punto de control de cada
evento único es indicativo de un patrón de mensajería en cola para el que una cola de Service Bus podría ser una
opción mejor que un centro de eventos. La ventaja de Event Hubs es que obtiene al menos una entrega a gran
escala. Al hacer los sistemas de nivel final idempotentes, es fácil recuperarse de errores o reinicios que hacen que
los eventos se reciban múltiples veces.
NOTE
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 Storage a la versión que admita ese entorno. 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. 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.
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:
.NET
Java
JavaScript o TypeScript
Python
Pasos siguientes
Consulte las siguientes guías de inicio rápido:
.NET Core
Java
Python
JavaScript
Disponibilidad y coherencia en Event Hubs
18/08/2020 • 8 minutes to read • Edit Online
Información general
Azure Event Hubs usa un modelo de creación de particiones para mejorar la disponibilidad y paralelización
dentro de un solo centro de eventos. Por ejemplo, si un centro de eventos tiene cuatro particiones y una de ellas
se mueve de un servidor a otro en una operación de equilibrio de carga, se puede enviar y recibir desde las otras
tres. Además, tener un mayor número de particiones permite que más lectores simultáneos procesen los datos,
lo que mejora el rendimiento agregado. Conocer las implicaciones de la creación de particiones y la ordenación
de un sistema distribuido es un aspecto fundamental del diseño de soluciones.
Para ayudar a explicar el equilibrio entre ordenación y disponibilidad, consulte el teorema CAP, que también se
conoce como teorema de Brewer. Dicho teorema trata la elección entre coherencia, disponibilidad y tolerancia a la
partición. Indica que para los sistemas con particiones por red siempre hay correlación entre coherencia y
disponibilidad.
El teorema de Brewer define la coherencia y la disponibilidad de la forma siguiente:
Tolerancia a la partición: la capacidad de un sistema de procesamiento de datos de continuar procesando
datos aunque se produzcan errores en una partición.
Disponibilidad: un nodo sin error devuelve una respuesta razonable en un plazo prudente (sin errores ni
tiempos de espera).
Coherencia: se garantiza que una lectura devuelva la última escritura de un cliente determinado.
Tolerancia a la partición
Event Hubs se basa en un modelo de datos con particiones. Se puede configurar el número de particiones en el
centro de eventos durante la instalación, pero no se puede cambiar este valor más adelante. Puesto que se deben
utilizar particiones con Event Hubs, debe tomar una decisión con respecto a la disponibilidad y la coherencia de la
aplicación.
Disponibilidad
La manera más sencilla de empezar a trabajar con Event Hubs es usar el comportamiento predeterminado.
Azure.Messaging.EventHubs (5.0.0 o posterior)
Microsoft.Azure.EventHubs (4.1.0 o anterior)
Si crea un objeto EventHubProducerClient y usa el método SendAsync , los eventos se distribuyen
automáticamente entre las particiones del centro de eventos. Este comportamiento permite disfrutar del máximo
tiempo de actividad.
Para los casos de uso que requieren el máximo tiempo de actividad, se prefiere este modelo.
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 caso, puede
establecer la clave de partición en un evento, o usar un objeto PartitionSender (si usa la biblioteca antigua
Microsoft.Azure.Messaging) para enviar eventos solo a una determinada partición. De esta forma, se garantiza
que, cuando se lean eventos de la partición, la lectura siga un orden. Si usa la biblioteca
Azure.Messaging.EventHubs y quiere obtener más información, vea Migración de código de PartitionSender a
EventHubProducerClient para publicar eventos en una partición.
Azure.Messaging.EventHubs (5.0.0 o posterior)
Microsoft.Azure.EventHubs (4.1.0 o anterior)
var connectionString = "<< CONNECTION STRING FOR THE EVENT HUBS NAMESPACE >>";
var eventHubName = "<< NAME OF THE EVENT HUB >>";
await producerClient.SendAsync(eventBatch);
}
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.
Una posible solución para garantizar el orden, mientras también se maximiza el tiempo de actividad, sería
agregar eventos como parte de la aplicación de procesamiento de eventos. La manera más fácil de lograr esto es
marcar el evento con una propiedad de número de secuencia personalizada. El código siguiente muestra un
ejemplo:
Azure.Messaging.EventHubs (5.0.0 o posterior)
Microsoft.Azure.EventHubs (4.1.0 o anterior)
// create a producer client that you can use to send events to an event hub
await using (var producerClient = new EventHubProducerClient(connectionString, eventHubName))
{
// get the latest sequence number from your application
var sequenceNumber = GetNextSequenceNumber();
// add events to the batch. An event is a represented by a collection of bytes and metadata.
eventBatch.TryAdd(data);
// use the producer client to send the batch of events to the event hub
await producerClient.SendAsync(eventBatch);
}
Este ejemplo envía el evento a una de las particiones disponibles en el centro de eventos y establece el número
de secuencia correspondiente a partir de la aplicación. Esta solución requiere que la aplicación de procesamiento
conserve el estado, pero proporciona a los remitentes un punto de conexión con más probabilidades de estar
disponible.
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general sobre el servicio Event Hubs
Creación de un centro de eventos
Escalado con Event Hubs
18/08/2020 • 10 minutes to read • Edit Online
Unidades de procesamiento
La capacidad de rendimiento de Event Hubs se controla mediante unidades de rendimiento. Las unidades de
procesamiento son unidades de capacidad adquiridas previamente. Un único procesamiento le permite:
Entrada: hasta 1 MB por segundo o 1000 eventos por segundo, lo que ocurra primero.
Salida: hasta 2 MB por segundo o 4096 eventos por segundo.
Si supera la capacidad de las unidades de rendimiento adquiridas, la entrada se limitará y se devolverá una
excepción ServerBusyException. La salida no produce excepciones de limitación, pero sigue estando limitada a la
capacidad de las unidades de rendimiento adquiridas. Si recibe excepciones de tasa de publicación o espera ver una
salida superior, compruebe cuántas unidades de rendimiento adquirió para el espacio de nombres. Puede
administrar las unidades de procesamiento en la hoja Escala de los espacios de nombres en Azure Portal. También
puede administrar unidades de procesamiento mediante programación con las API de Event Hubs.
Las unidades de procesamiento se adquieren previamente y se facturan por hora. Cuando se adquieren, las
unidades de procesamiento se facturan durante un período mínimo de una hora. Se pueden adquirir hasta 20
unidades de procesamiento para un espacio de nombres de Event Hubs y compartir entre todos los centros de
eventos del espacio de nombres.
La característica de inflado automático de Event Hubs escala verticalmente y de forma automática mediante el
aumento del número de unidades de procesamiento para responder a las necesidades de utilización. Al aumentar
las unidades de rendimiento, se evitan escenarios de limitación en los que nos encontramos con:
Velocidades de entrada de datos que superan las unidades de rendimiento establecidas.
Velocidades de solicitud de salida de datos que superan las unidades de rendimiento establecidas.
El servicio Event Hubs aumenta el rendimiento cuando la carga aumenta más allá del umbral mínimo, sin que se
produzca ningún problema de las solicitudes con errores de ServerBusy.
Para más información sobre la característica de inflado automático, consulte Escalado automático de las unidades
de rendimiento.
Particiones
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. 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.
Una partición es una secuencia ordenada de eventos que se mantiene en un centro de eventos. A medida que
llegan eventos más recientes, se agregan al final de esta secuencia. Una partición puede considerarse como un
"registro de confirmación".
Event Hubs retiene datos durante un tiempo de retención configurado que se aplica a todas las particiones del
centro de eventos. Los eventos expiran en función del tiempo; no se pueden eliminar explícitamente. Dado que las
particiones son independientes y contienen sus propias secuencias de datos, a menudo crecen a velocidades
diferentes.
El número de particiones se especifica en el momento de la creación y debe estar comprendido entre 2 y 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. Las particiones son un mecanismo de organización de datos relacionado con el
paralelismo de bajada necesario para consumir las aplicaciones. El número de particiones de un centro de eventos
está directamente relacionado con el número de lectores simultáneos que espera tener. Puede aumentar el número
de particiones más allá de 32 poniéndose en contacto con el equipo de Event Hubs.
Es posible que quiera establecer el valor lo más alto posible, que es 32, en el momento de la creación. 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. En el primer caso, tendrá que leer eventos en las 32 particiones. 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.
Aunque las particiones son identificables y se pueden realizar envíos a estas directamente, no se recomienda
hacerlo. En su lugar, puede usar las construcciones de nivel superior que se presentan en la sección Publicador de
eventos.
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.
Se recomienda equilibrar las unidades de procesamiento y las particiones 1:1 para lograr una escalabilidad óptima.
Una sola partición tiene una entrada y una salida garantizadas de hasta una unidad de procesamiento. Aunque
puede lograr un mayor procesamiento en una partición, no se garantiza el rendimiento. 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.
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? Elija el número de particiones en función
del paralelismo de bajada que quiere conseguir, así como de las futuras necesidades de procesamiento. No hay
ningún cargo por el número de particiones que tiene dentro de un centro de eventos.
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.
Clave de partición
Puede usar una clave de partición para asignar datos de eventos entrantes a particiones concretas con fines de
organización de los datos. La clave de partición es un valor proporcionado por el remitente que se pasa a un centro
de eventos. Se procesa a través de una función hash estática que crea la asignación de la partición. Si no especifica
una clave de partición cuando se publica un evento, se usa una asignación de tipo round robin.
El publicador de eventos solo conoce su clave de partición, no la partición en la que se publican los eventos. Este
desacoplamiento de la clave y la partición evita al remitente la necesidad de conocer demasiado sobre el
procesamiento de bajada. Una identidad única por cada dispositivo o usuario es una buena clave de partición, pero
otros atributos como la geografía también pueden usarse para agrupar eventos relacionados en una única
partición.
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Escalado automático de las unidades de rendimiento
Información general sobre el servicio Event Hubs
Azure Event Hubs: recuperación ante desastres
geográfica
18/08/2020 • 19 minutes to read • Edit Online
Cuando hay regiones de Azure completas o centros de datos (si no se utilizan zonas de disponibilidad) que
experimentan un tiempo de inactividad, es crucial que el procesamiento de datos siga funcionando en otra región
o centro de datos. De esta forma, la recuperación ante desastres con localización geográfica y la replicación
geográfica son características importantes para cualquier empresa. Azure Event Hubs admite tanto la
recuperación ante desastres con localización geográfica como la replicación geográfica, en el nivel de espacio de
nombres.
NOTE
La característica de recuperación ante desastres geográfica solo está disponible para las SKU estándar y dedicadas.
Interrupciones y desastres
Es importante tener en cuenta la distinción entre "interrupciones" y "desastres". Una interrupción es la falta de
disponibilidad temporal de Azure Event Hubs y puede afectar a algunos componentes del servicio, como un
almacén de mensajes o incluso todo el centro de datos. Sin embargo, después de corregir el problema, Event
Hubs está de nuevo disponible. Normalmente, una interrupción no provoca la pérdida de mensajes ni otros datos.
Un ejemplo de una interrupción de este tipo podría ser un error de corriente en el centro de datos. Algunas
interrupciones son solo breves pérdidas de conexión debido a problemas transitorios o de red.
Un desastre se define como la pérdida permanente o a largo plazo de un clúster de Event Hubs, una región de
Azure o un centro de datos. La región o el centro de datos no volverá necesariamente a estar disponible, o puede
que esté fuera de servicio durante horas o días. Algunos ejemplos de esos desastres son los incendios, las
inundaciones o los terremotos. Un desastre que se convierte en permanente podría provocar la pérdida de
algunos mensajes, eventos u otros datos. Sin embargo, en la mayoría de los casos, no debe producirse una
pérdida de datos y se pueden recuperar los mensajes una vez que se realiza la copia de seguridad del centro de
datos.
La característica de recuperación ante desastres con localización geográfica de Azure Event Hubs es una solución
de recuperación ante desastres. Los conceptos y el flujo de trabajo descritos en este artículo se aplican a
situaciones catastróficas y no a interrupciones transitorias o temporales. Para obtener una explicación detallada de
la recuperación ante desastres en Microsoft Azure, consulte este artículo.
Estándar Estándar Sí
Estándar Dedicado Sí
Dedicado Dedicado Sí
Dedicado Estándar No
NOTE
No se pueden emparejar espacios de nombres que se encuentran en el mismo clúster dedicado. Puede emparejar espacios
de nombres que se encuentran en clústeres independientes.
Configurar
En primer lugar cree un espacio de nombres principal o use uno ya existente, y un nuevo espacio de nombres
secundario, luego emparéjelos. Este emparejamiento le proporciona un alias que puede usar para conectarse. Al
usar un alias, no es necesario que cambie las cadenas de conexión. Solo pueden agregarse nuevos espacios de
nombres al emparejamiento de la conmutación por error. Por último, debe agregar alguna supervisión para
detectar si es necesario realizar una conmutación por error. En la mayoría de los casos, el servicio forma parte de
un ecosistema mayor, por lo que las conmutaciones por error automáticas raramente son posibles, ya que, a
menudo, las conmutaciones por error tienen que realizarse en sincronía con el subsistema o infraestructura
restantes.
Ejemplo
En un ejemplo de este escenario, se considera una solución de punto de venta (POS) que emite mensajes o
eventos. Event Hubs pasa esos eventos a alguna solución de asignación o formato, que reenvía los datos
asignados a otros sistema para continuar el procesamiento. En ese momento, todos estos sistemas se pueden
hospedar en la misma región de Azure. La decisión sobre cuándo y en qué parte se realizará la conmutación por
error depende del flujo de datos en su infraestructura.
Puede automatizar la conmutación por error con la supervisión de sistemas, o con soluciones de supervisión
personalizadas. Sin embargo, dicha automatización necesita planeamiento y trabajo extra que se encuentran fuera
del ámbito de este artículo.
Flujo de conmutación por error
Si inicia la conmutación por error, se requieren dos pasos:
1. En caso de otra interrupción, tiene que poder volver a realizar la conmutación por error. Por lo tanto,
configure un segundo espacio de nombres pasivo y actualice el emparejamiento.
2. Extraiga mensajes del anterior espacio de nombres primario una vez que vuelva a estar disponible.
Después de eso, utilice ese espacio de nombres para la mensajería regular fuera de la configuración de
recuperación con localización geográfica, o elimine el espacio de nombres principal antiguo.
NOTE
Se admite solo la semántica de conmutación de reenvío. En este escenario, se realiza la conmutación por error y, a
continuación, se vuelve a emparejar con un nuevo espacio de nombres. No se admite la conmutación por recuperación, por
ejemplo en un clúster de SQL.
Administración
Si ha cometido algún error; por ejemplo, ha emparejado regiones incorrectas durante la configuración inicial,
puede interrumpir el emparejamiento de los dos espacios de nombres en cualquier momento. Si desea usar los
espacios de nombres emparejados como espacios de nombres normales, elimine el alias.
Ejemplos
En el ejemplo de GitHub se muestra cómo configurar e iniciar una conmutación por error. En este ejemplo se
demuestran los siguientes conceptos:
La configuración necesaria en Azure Active Directory para usar Azure Resource Manager con Event Hubs.
Pasos necesarios para ejecutar el código de ejemplo.
Envío y recepción desde el espacio de nombres principal actual.
Consideraciones
Tenga en cuenta y recuerde las siguientes consideraciones para esta versión:
1. Por motivos de diseño, la recuperación ante desastres geográfica de Event Hubs no replica datos y, por lo tanto,
no se puede volver a usar el valor de desplazamiento anterior del centro de eventos principal en el centro de
eventos secundario. Se recomienda reiniciar el receptor de eventos con uno de los siguientes métodos:
EventPosition.FromStart() : si quiere leer todos los datos en el centro de eventos secundario.
EventPosition.FromEnd() : si quiere leer todos los datos nuevos desde el momento de conexión con el centro de
eventos secundario.
EventPosition.FromEnqueuedTime(dateTime) : si quiere leer todos los datos recibidos en el centro de eventos
secundario a partir de una hora y fecha determinadas.
2. En el planeamiento de la conmutación por error, también debe considerar el factor de tiempo. Por ejemplo,
si se pierde la conectividad durante más de 15 a 20 minutos, puede decidir iniciar la conmutación por error.
3. El hecho de que no se replican datos significa que las sesiones activas en la actualidad no se replican.
Además, la detección de duplicados y mensajes programados puede no funcionar. Funcionarán las nuevas
sesiones, los mensajes programados y los duplicados nuevos.
4. Conmutar por error una compleja infraestructura distribuida debe ensayarse al menos una vez.
5. La sincronización de entidades puede tardar algún tiempo, aproximadamente 50-100 entidades por
minuto.
Zonas de disponibilidad
La SKU de Event Hubs estándar es compatible con Availability Zones, lo que proporciona ubicaciones con
aislamiento de errores dentro de una región de Azure.
NOTE
La compatibilidad de Availability Zones con Azure Event Hubs estándar solo está disponible en aquellas regiones de Azure
en las que hay zonas de disponibilidad.
Solo puede habilitar Availability Zones en los espacios de nombres nuevos mediante Azure Portal. Event Hubs no
admite la migración de espacios de nombres existentes. No se puede deshabilitar la redundancia de zona después
de habilitarla en el espacio de nombres.
Puntos de conexión privados
En esta sección se proporcionan consideraciones adicionales cuando se usa la recuperación ante desastres
geográfica con espacios de nombres que usan puntos de conexión privados. Para obtener información sobre el
uso de puntos de conexión privados con Event Hubs en general, consulte Configuración de puntos de conexión
privados.
Nuevos emparejamientos
Si intenta crear un emparejamiento entre un espacio de nombres primario con un punto de conexión privado y un
espacio de nombres secundario sin un punto de conexión privado, se producirá un error. El emparejamiento solo
se realizará correctamente si los espacios de nombres primario y secundario tienen puntos de conexión privados.
Se recomienda utilizar las mismas configuraciones en los espacios de nombres principal y secundario y en las
redes virtuales en las que se creen los puntos de conexión privados.
NOTE
Al intentar emparejar el espacio de nombres principal con un punto de conexión privado y un espacio de nombres
secundario, el proceso de validación solo comprueba si existe un punto de conexión privado en el espacio de nombres
secundario. No comprueba si el punto de conexión funciona ahora o funcionará después de la conmutación por error. Es su
responsabilidad asegurarse de que el espacio de nombres secundario con el punto de conexión privado funcionará según lo
esperado después de la conmutación por error.
Para probar que las configuraciones de punto de conexión privado son iguales en los espacios de nombres primario y
secundario, envíe una solicitud de lectura (por ejemplo: Get Event Hub) al espacio de nombres secundario desde fuera de la
red virtual y compruebe que recibe un mensaje de error del servicio.
Emparejamientos existentes
Si ya existe un emparejamiento entre el espacio de nombres primario y el secundario, se producirá un error en la
creación del punto de conexión privado en el espacio de nombres primario. Para resolverlo, cree primero un
punto de conexión privado en el espacio de nombres secundario y, a continuación, cree uno para el espacio de
nombres primario.
NOTE
Aunque se permite el acceso de solo lectura al espacio de nombres secundario, no se permiten las actualizaciones de las
configuraciones de punto de conexión privado.
Configuración recomendada
Al crear una configuración de recuperación ante desastres para la aplicación y los espacios de nombres de Event
Hubs, debe crear puntos de conexión privados para los espacios de nombres de Event Hubs primario y secundario
en las redes virtuales que hospeden las instancias primarias y secundarias de la aplicación.
Supongamos que tiene dos redes virtuales, VNET-1 y VNET-2, y estos espacios de nombres primario y secundario:
EventHubs-Namespace1-Primary, EventHubs-Namespace2-Secondary. Debe seguir estos pasos:
En EventHubs-Namespace1-Primary, cree dos puntos de conexión privados que usen subredes de VNET-1 y
VNET-2.
En EventHubs-Namespace2-Secondary, cree dos puntos de conexión privados que usen las mismas subredes
de VNET-1 y VNET-2.
La ventaja de este enfoque es que la conmutación por error puede producirse en el nivel de aplicación
independiente del espacio de nombres de Event Hubs. Considere los casos siguientes:
Conmutación por error solo de la aplicación: En este caso, la aplicación no existirá en VNET-1, sino que se
moverá a VNET-2. Como ambos puntos de conexión privados están configurados tanto en VNET-1 como en
VNET-2 para los espacios de nombres primario y secundario, la aplicación funcionará.
Conmutación por error solo del espacio de nombres de Event Hubs : en este caso, dado que los dos
puntos de conexión privados están configurados en ambas redes virtuales para los espacios de nombres primario
y secundario, la aplicación funcionará.
NOTE
Para obtener instrucciones sobre la recuperación ante desastres con localización geográfica de una red virtual, consulte
Virtual Network: continuidad del negocio.
Pasos siguientes
El ejemplo en GitHub le guía a través de un flujo de trabajo simple que crea un emparejamiento geográfico e
inicia una conmutación por error para un escenario de recuperación ante desastres.
La referencia de la API de REST describe las API para llevar a cabo la configuración de recuperación de
desastres con localización geográfica.
Para obtener más información acerca de Event Hubs, visite los vínculos siguientes:
Introducción a Event Hubs
.NET Core
Java
Python
JavaScript
Preguntas más frecuentes sobre Event Hubs
Aplicaciones de ejemplo que usan Event Hubs
Autorización del acceso a Azure Event Hubs
18/08/2020 • 4 minutes to read • Edit Online
Cada vez que se publican o consumen eventos o datos de un centro de eventos, el cliente intenta obtener acceso a
recursos de Event Hubs. Todas las solicitudes a un recurso seguro deben estar autorizadas para que el servicio
pueda garantizar que el cliente tenga los permisos necesarios para publicar o consumir los datos.
Azure Event Hubs ofrece las siguientes opciones para autorizar el acceso a los recursos seguros:
Azure Active Directory
Firma de acceso compartido
NOTE
Este artículo se aplica a los escenarios de Event Hubs y Apache Kafka.
Azure Event Hubs admite la autorización de solicitudes a recursos de Event Hubs mediante
Azure Active Directory (Azure AD). Con Azure AD, puede usar el control de acceso basado en rol (RBAC) para
conceder permisos a una entidad de seguridad, que puede ser un usuario o una entidad de servicio de
aplicación. Para más información sobre los roles y las asignaciones de roles, consulte Descripción de los
distintos roles.
Información general
Cuando una entidad de seguridad (un usuario o una aplicación) intenta acceder a un recurso de Event Hubs, la
solicitud debe estar autorizada. Con Azure AD, el acceso a un recurso es un proceso de dos pasos.
1. En primer lugar, se autentica la identidad de la entidad de seguridad y se devuelve un token de OAuth 2.0. El
nombre del recurso para solicitar un token es https://eventhubs.azure.net/ . En el caso de los clientes de
Kafka, el recurso para solicitar un token es https://<namespace>.servicebus.windows.net .
2. Luego, el token se pasa como parte de una solicitud al servicio Event Hubs para autorizar el acceso al recurso
especificado.
El paso de autenticación exige que una solicitud de aplicación contenga un token de acceso de OAuth 2.0 en
tiempo de ejecución. Si una aplicación se está ejecutando dentro de una entidad de Azure, como puede ser una
máquina virtual de Azure, un conjunto de escalado de máquinas virtuales o una aplicación de Azure Functions,
puede usar una identidad administrada para acceder a los recursos. Para más información sobre cómo
autenticar solicitudes realizadas por una identidad administrada al servicio Event Hubs, vea Autenticación del
acceso a recursos de Azure Event Hubs con Azure Active Directory e identidades administradas para recursos de
Azure.
El paso de autorización exige que se asignen uno o varios roles RBAC a la entidad de seguridad. Azure Event
Hubs proporciona roles RBAC que abarcan conjuntos de permisos para recursos de Event Hubs. Los roles que se
asignan a una entidad de seguridad determinan los permisos que tiene esa entidad de seguridad. Para más
información sobre los roles RBAC, consulte Roles integrados de Azure para Azure Event Hubs.
Las aplicaciones nativas y las aplicaciones web que realizan solicitudes a Event Hubs también pueden autorizar
con Azure AD. Para obtener información sobre cómo solicitar un token de acceso y usarlo para autorizar
solicitudes para recursos de Event Hubs, vea Autenticación del acceso a Azure Event Hubs con Azure AD desde
una aplicación.
Ámbito de recursos
Antes de asignar un rol RBAC a una entidad de seguridad, determine el ámbito de acceso que debería tener la
entidad de seguridad. Los procedimientos recomendados dictan que siempre es mejor conceder únicamente el
ámbito más restringido posible.
En la lista siguiente se describen los niveles en los que puede definir el ámbito de acceso a recursos de Event
Hubs, empezando por el ámbito más restringido:
Grupo de consumidores : en este ámbito, la asignación de roles solo se aplica a esta entidad. Actualmente,
Azure Portal no admite la asignación de un rol RBAC a una entidad de seguridad en este nivel.
Centro de eventos: la asignación de roles se aplica a la entidad de Event Hubs y al grupo de consumidores
que hay en ella.
Espacio de nombres : la asignación de roles abarca toda la topología de Event Hubs en el espacio de
nombres y el grupo de consumidores que tiene asociado.
Grupo de recursos : la asignación de roles se aplica a todos los recursos de Event Hubs del grupo de
recursos.
Suscripción : la asignación de roles se aplica a todos los recursos de Event Hubs de todos los grupos de
recursos de la suscripción.
NOTE
Tenga en cuenta que las asignaciones de roles RBAC pueden tardar hasta cinco minutos en propagarse.
Este contenido se aplica a Event Hubs y a Event Hubs para Apache Kafka. Para más información sobre la compatibilidad
con Event Hubs para Kafka, consulte Event Hubs para Kafka: seguridad y autenticación.
Para más información sobre cómo se definen los roles integrados, consulte Descripción de definiciones de roles.
Para más información acerca de la creación de roles personalizados de Azure, consulte Roles personalizados de
Azure.
Ejemplos
Ejemplos de Microsoft.Azure.EventHubs.
En estos ejemplos se usa la biblioteca anterior Microsoft.Azure.EventHubs , pero se puede actualizar
fácilmente para usar la biblioteca Azure.Messaging.EventHubs más reciente. Para que los ejemplos
usen la biblioteca nueva en lugar de la anterior, consulte la Guía para migrar de
Microsoft.Azure.EventHubs a Azure.Messaging.EventHubs.
Ejemplos de Azure.Messaging.EventHubs
Este ejemplo se ha actualizado para usar la biblioteca Azure.Messaging.EventHubs más reciente.
Event Hubs para Kafka: ejemplos de OAuth.
Pasos siguientes
Para obtener información sobre cómo asignar un rol RBAC integrado a una entidad de seguridad, consulte
Autenticación del acceso a recursos de Event Hubs mediante Azure Active Directory.
Obtenga información sobre cómo crear roles personalizados con RBAC.
Obtenga información sobre cómo usar Azure Active Directory con EH.
Consulte los artículos relacionados siguientes:
Autenticación de solicitudes a Azure Event Hubs desde una aplicación mediante Azure Active Directory
Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event
Hubs
Autenticación de solicitudes para Azure Event Hubs mediante firmas de acceso compartido
Autorización del acceso a recursos de Event Hubs mediante firmas de acceso compartido
Autorización del acceso a recursos de Event Hubs
mediante firmas de acceso compartido
18/08/2020 • 15 minutes to read • Edit Online
Una firma de acceso compartido (SAS) le proporciona una manera de conceder acceso limitado a los recursos en
el espacio de nombres de Event Hubs. La firma de acceso compartido protege el acceso a los recursos de Event
Hubs en función de las reglas de autorización. Estas reglas se configuran en un espacio de nombres o en una
entidad (centro de eventos o tema). En este artículo se proporciona información general sobre el modelo SAS y
se revisan los procedimientos recomendados de SAS.
NOTE
Azure Event Hubs admite la autorización de los recursos de Event Hubs mediante Azure Active Directory (Azure AD). La
autorización de usuarios o aplicaciones mediante un token de OAuth 2.0 devuelto por Azure AD proporciona una
seguridad superior y facilidad de uso sobre las firmas de acceso compartido (SAS). Con Azure AD, no hay ninguna
necesidad de almacenar los tokens en su código y arriesgarse a posibles vulnerabilidades de seguridad.
Microsoft recomienda usar Azure AD con las aplicaciones de Azure Event Hubs cuando sea posible. Para más información,
consulte Autenticación del acceso al recurso de Azure Event Hubs con Azure Active Directory.
IMPORTANT
Los tokens de SAS (firmas de acceso compartido) son fundamentales para proteger los recursos. A la vez que proporciona
granularidad, SAS concede a los clientes acceso a los recursos de Event Hubs. No se deben compartir públicamente. Si
resulta necesario compartirla para solucionar problemas, considere la posibilidad de usar una versión reducida de los
archivos de registro o eliminar los tokens de SAS (si existen) de dichos archivos, y asegúrese de que las capturas de pantalla
tampoco incluyan información de SAS.
Los derechos proporcionados por la regla de directiva pueden ser una combinación de:
Enviar : otorga el derecho a enviar mensajes a la entidad.
Escuchar : otorga el derecho a escuchar o recibir a la entidad.
Administrar : otorga el derecho a administrar la topología del espacio de nombres, incluidas la creación y la
eliminación de entidades.
NOTE
El derecho Administrar incluye los derechos Enviar y Escuchar .
Una directiva de espacio de nombres o entidad puede contener hasta 12 reglas de autorización de acceso
compartido, lo que proporciona espacio para tres conjuntos de reglas, y cada una de ellas cubre los derechos
básicos y la combinación de Enviar y Escuchar. Este límite subraya que el almacén de directivas de SAS no
pretende ser un almacén de la cuenta de usuario o servicio. Si la aplicación necesita conceder acceso a Event
Hubs en función de las identidades de usuario o servicio, debe implementar un servicio de token de seguridad
que emita tokens de SAS después de una comprobación de acceso y autenticación.
A la regla de autorización se le asigna una clave principal y una clave secundaria . Estas claves son claves de
alta seguridad criptográfica. No las pierda ni las filtre. Siempre estarán disponibles en Azure Portal. Puede usar
cualquiera de las claves generadas y regenerarlas en cualquier momento. Si vuelve a generar o cambia una clave
en la directiva, todos los tokens emitidos previamente en base a esa clave dejan de ser válidos inmediatamente.
Sin embargo, las conexiones continuas creadas de acuerdo con esos tokens seguirán funcionando hasta que el
token expire.
Cuando se crea un espacio de nombres de Event Hubs, se crea automáticamente una regla de directiva
denominada RootManageSharedAccessKey para el espacio de nombres. Esta directiva tiene permisos de
administración para todo el espacio de nombres. Se recomienda tratar esta regla como una cuenta raíz
administrativa, así que no la use en la aplicación. Puede crear reglas de directivas adicionales en la pestaña
Configurar para el espacio de nombres en el portal, a través de PowerShell o la CLI de Azure.
Conclusión
Las firmas de acceso compartido son útiles para proporcionar permisos limitados para los recursos de Event
Hubs a los clientes. Son parte fundamental del modelo de seguridad de cualquier aplicación que usa Azure Event
Hubs. Si sigue los procedimientos recomendados que se describen en este artículo, puede usar SAS para ofrecer
una mayor flexibilidad de acceso a los recursos sin que se ponga en riesgo la seguridad de la aplicación.
Pasos siguientes
Consulte los artículos relacionados siguientes:
Autenticación de solicitudes a Azure Event Hubs desde una aplicación mediante Azure Active Directory
Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event
Hubs
Autenticación de solicitudes para Azure Event Hubs mediante firmas de acceso compartido
Autorización del acceso a recursos de Event Hubs mediante Azure Active Directory
Autenticación de una identidad administrada con
Azure Active Directory para acceder a recursos de
Event Hubs
18/08/2020 • 11 minutes to read • Edit Online
Azure Event Hubs admite la autenticación de Azure Active Directory (Azure AD) con identidades administradas
para los recursos de Azure. Las identidades administradas para recursos de Azure pueden autorizar el acceso a
los recursos de Event Hubs con credenciales de Azure AD desde aplicaciones que se ejecutan en máquinas
virtuales (VM) de Azure, aplicaciones de función, conjuntos de escalado de máquinas virtuales y otros servicios.
Si usa identidades administradas para recursos de Azure junto con autenticación de Azure AD, puede evitar el
almacenamiento de credenciales con las aplicaciones que se ejecutan en la nube.
En este artículo se muestra cómo autorizar el acceso a un centro de eventos con una identidad administrada
desde una máquina virtual de Azure.
Una vez habilitada esta configuración, se crea una identidad de servicio en Azure Active Directory (Azure AD) y se
configura en el host de App Service.
Ahora, asigne esta identidad de servicio a un rol en el ámbito requerido en los recursos de Event Hubs.
Para asignar roles de Azure mediante Azure Portal
Para asignar un rol a los recursos de Event Hubs, vaya a ese recurso en Azure Portal. Acceda a la configuración
Access Control (IAM) del recurso y siga estas instrucciones para administrar las asignaciones de roles:
NOTE
En los pasos siguientes se asigna un rol de identidad de servicio a los espacios de nombres de Event Hubs. Puede seguir los
mismos pasos para asignar un rol con ámbito a cualquier recurso de Event Hubs.
1. En Azure Portal, vaya al espacio de nombres de Event Hubs y muestre la información general del
espacio de nombres.
2. Seleccione Access Control (IAM) en el menú de la izquierda para mostrar la configuración de control de
acceso para el centro de eventos.
3. Seleccione la pestaña Asignaciones de roles para ver la lista de asignaciones de roles.
4. Seleccione Agregar para agregar un rol nuevo.
5. En la página Agregar asignación de roles , seleccione los roles de Event Hubs que quiere asignar. A
continuación, busque la identidad del servicio que ha registrado para asignar el rol.
6. Seleccione Guardar . La identidad a la que ha asignado el rol aparece enumerada debajo de ese rol. Por
ejemplo, la siguiente imagen muestra que la identidad del servicio tiene al propietario de los datos de
Event Hubs.
Una vez que haya asignado el rol, la aplicación web tendrá acceso a los recursos de Event Hubs en el ámbito
definido.
Prueba de la aplicación web
1. Cree un espacio de nombres de Event Hubs y un centro de eventos.
2. Implemente la aplicación web en Azure. Vea la siguiente sección con pestañas para obtener vínculos a la
aplicación web en GitHub.
3. Asegúrese de que SendReceive.aspx esté establecido como documento predeterminado de la aplicación web.
4. Habilite una identidad para la aplicación web.
5. Asigne esta identidad al rol Propietario de datos de Event Hubs en el nivel del espacio de nombres o en el
del centro de eventos.
6. Ejecute la aplicación web, escriba los nombres del espacio de nombres y del centro de eventos y un mensaje y
seleccione Enviar . Para recibir el evento, seleccione Recibir .
Azure.Messaging.EventHubs (más reciente)
Microsoft.Azure.EventHubs (heredado)
Ahora puede iniciar la aplicación web y apuntar el explorador a la página aspx de ejemplo. Puede encontrar la
aplicación web de ejemplo que envía y recibe datos de los recursos de Event Hubs en el repositorio de GitHub.
Instale el paquete más reciente de NuGet y empiece a enviar eventos a Event Hubs con
EventHubProducerClient y a recibirlos con EventHubConsumerClient .
NOTE
Para ver un ejemplo de Java que usa una identidad administrada para publicar eventos en un centro de eventos, consulte la
publicación de eventos con in ejemplo de identidad de Azure en GitHub.
Ejemplos
Ejemplos de Azure.Messaging.EventHubs
.NET
Java
Ejemplos de Microsoft.Azure.EventHubs.
En estos ejemplos se usa la biblioteca anterior Microsoft.Azure.EventHubs , pero se puede actualizar
fácilmente para usar la biblioteca Azure.Messaging.EventHubs más reciente. Para que los ejemplos
usen la biblioteca nueva en lugar de la anterior, consulte la Guía para migrar de Microsoft.Azure.EventHubs
a Azure.Messaging.EventHubs. Este ejemplo se ha actualizado para usar la biblioteca
Azure.Messaging.EventHubs más reciente.
Event Hubs para Kafka: envío y recepción de mensajes mediante la autorización OAuth de identidad
administrada
Pasos siguientes
Consulte el artículo siguiente para información sobre las identidades administradas para los recursos de
Azure: ¿Qué son las identidades administradas de los recursos de Azure?
Consulte los artículos relacionados siguientes:
Autenticación de solicitudes a Azure Event Hubs desde una aplicación mediante Azure Active Directory
Autenticación de solicitudes para Azure Event Hubs mediante firmas de acceso compartido
Autorización del acceso a recursos de Event Hubs mediante Azure Active Directory
Autorización del acceso a recursos de Event Hubs mediante firmas de acceso compartido
Autenticación de una aplicación con
Azure Active Directory para acceder a recursos de
Event Hubs
18/08/2020 • 14 minutes to read • Edit Online
Microsoft Azure proporciona una administración integrada del control de acceso para recursos y aplicaciones
basados en Azure Active Directory (Azure AD). Una ventaja clave de usar Azure AD con Azure Event Hubs es que
ya no es necesario almacenar las credenciales en el código. En su lugar, puede solicitar un token de acceso de
OAuth 2.0 desde la Plataforma de identidad de Microsoft. El nombre del recurso para solicitar un token es
https://eventhubs.azure.net/ (para los clientes de Kafka, el recurso para solicitar un token es
https://<namespace>.servicebus.windows.net ). Azure AD autentica la entidad de seguridad (un usuario, grupo o
entidad de servicio) ejecutando la aplicación. Si la autenticación se realiza correctamente, Azure AD devuelve un
token de acceso a la aplicación y la aplicación puede entonces usar el token de acceso para autorizar una
solicitud de los recursos de Azure Event Hubs.
Cuando un rol se asigna a una entidad de seguridad de Azure AD, Azure concede acceso a esos recursos a esa
entidad de seguridad. El acceso puede tener como ámbito el nivel de suscripción, el grupo de recursos, el
espacio de nombres de Event Hubs o cualquier recurso que haya en él. Una entidad de seguridad de Azure AD
puede asignar roles a un usuario, un grupo, una entidad de servicio de aplicación o una identidad administrada
para recursos de Azure.
NOTE
Una definición de roles es una colección de permisos. El control de acceso basado en rol (RBAC) controla cómo se aplican
estos permisos a través de la asignación de roles. Una asignación de roles consta de tres elementos: entidad de seguridad,
definición de rol y ámbito. Para más información, consulte Descripción de los distintos roles.
IMPORTANT
Nuestra versión preliminar permite agregar privilegios de acceso a datos de Event Hubs al rol Propietario o Colaborador,
pero los privilegios de acceso a datos de los roles Propietario y Colaborador ya no están en vigor. Si está usando el rol
Propietario o Colaborador, cambie al rol Propietario de los datos de Azure Event Hubs.
NOTE
Los pasos que se describen a continuación asignan un rol al centro de eventos en los espacios de nombres de Event Hubs,
pero puede seguir los mismos pasos para asignar un rol con ámbito a cualquier recurso de Event Hubs.
3. Seleccione Access Control (IAM) para mostrar la configuración del control de acceso del centro de
eventos.
4. Seleccione la pestaña Asignaciones de roles para ver la lista de asignaciones de roles. Seleccione el
botón Agregar de la barra de herramientas y luego seleccione Agregar asignación de roles .
5. En la página Agregar asignación de roles , siga estos pasos:
a. Seleccione el rol Event Hubs que quiere asignar.
b. Realice una búsqueda para localizar la entidad de seguridad (usuario, grupo, entidad de
servicio) a la que quiere asignar el rol.
c. Seleccione Guardar para guardar la asignación de roles.
d. La identidad a la que ha asignado el rol aparece enumerada debajo de ese rol. Por ejemplo, en la
imagen siguiente se muestra que Azure-users está en el rol Propietario de los datos de Azure Event
Hubs.
Puede realizar este mismo procedimiento para asignar un rol que tenga como ámbito un espacio de nombre de
Event Hubs, un grupo de recursos o una suscripción. Una vez que defina el rol y su ámbito, puede probar este
comportamiento con ejemplos en esta ubicación de GitHub.
Una vez que ha registrado su aplicación, verá el id. de la aplicación (o id. de cliente) en Configuración :
Para más información sobre cómo registrar una aplicación con Azure AD, consulte Integración de aplicaciones
con Azure Active Directory.
Creación de un secreto de cliente
La aplicación necesita un secreto de cliente para demostrar su identidad al solicitar un token. Para agregar el
secreto de cliente, siga estos pasos.
1. Vaya a su registro de aplicaciones en Azure Portal.
2. Seleccione la configuración de Cer tificados y secretos .
3. En Secretos de cliente , seleccione Nuevo secreto de cliente para crear un nuevo secreto.
4. Proporcione una descripción para el secreto y elija el intervalo de expiración deseado.
5. Copie inmediatamente el valor del nuevo secreto en una ubicación segura. El valor completo se le
muestra solo una vez.
Ejemplos
Ejemplos de Microsoft.Azure.EventHubs.
En estos ejemplos se usa la biblioteca anterior Microsoft.Azure.EventHubs , pero se puede actualizar
fácilmente para usar la biblioteca Azure.Messaging.EventHubs más reciente. Para que los ejemplos
usen la biblioteca nueva en lugar de la anterior, consulte la Guía para migrar de
Microsoft.Azure.EventHubs a Azure.Messaging.EventHubs.
Ejemplos de Azure.Messaging.EventHubs
Este ejemplo se ha actualizado para usar la biblioteca Azure.Messaging.EventHubs más reciente.
Pasos siguientes
Para más información acerca de RBAC, consulte ¿Qué es el control de acceso basado en rol (RBAC) de Azure?.
Para información sobre cómo asignar y administrar las asignaciones de roles de Azure con Azure PowerShell,
la CLI de Azure o la API de REST, consulte estos artículos:
Administración del control de acceso basado en rol (RBAC) con Azure PowerShell
Administración del control de acceso basado en rol (RBAC) con la CLI de Azure
Administración del control de acceso basado en rol (RBAC) con la API de REST
Administración del acceso a los recursos de Azure mediante RBAC y plantillas de
Azure Resource Manager
Consulte los artículos relacionados siguientes:
Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event
Hubs
Autenticación de solicitudes para Azure Event Hubs mediante firmas de acceso compartido
Autorización del acceso a recursos de Event Hubs mediante Azure Active Directory
Autorización del acceso a recursos de Event Hubs mediante firmas de acceso compartido
Autenticación del acceso a recursos de Event Hubs
mediante firmas de acceso compartido (SAS)
18/08/2020 • 16 minutes to read • Edit Online
La firma de acceso compartido (SAS) le ofrece un control pormenorizado sobre el tipo de acceso que se concede
a los clientes que la tienen. Estos son algunos de los controles que puede establecer en una SAS:
El intervalo durante el que la SAS es válida, incluida la hora de inicio y la hora de expiración.
Los permisos concedidos por la SAS. Por ejemplo, una SAS para un espacio de nombres de Event Hubs
podría conceder el permiso de escucha, pero no el permiso de envío.
Solo los clientes que tengan credenciales válidas pueden enviar datos a un centro de eventos.
Un cliente no puede suplantar a otro cliente.
Se puede bloquear el envío de datos por parte de un cliente no autorizado a un centro de eventos.
En este artículo se explica cómo autenticar el acceso a los recursos de Event Hubs mediante SAS. Para más
información sobre la autorización del acceso a recursos de Event Hubs mediante SAS, consulte este artículo.
NOTE
Microsoft recomienda usar credenciales de Azure AD cuando sea posible como procedimiento recomendado de seguridad,
en lugar de usar las firmas de acceso compartido, que se pueden exponer más fácilmente a riesgos. Aunque puede seguir
usando firmas de acceso compartido (SAS) para conceder acceso específico a los recursos en su instancia de Event Hubs,
Azure AD ofrece funcionalidades similares sin necesidad de administrar tokens de SAS ni preocuparse sobre cómo revocar
una SAS en peligro.
Para más información sobre la integración de Azure AD en Azure Event Hubs, consulte Autorización del acceso a Event
Hubs con Azure AD.
La cadena de firma es el hash SHA-256 calculado sobre el URI del recurso (ámbito tal y como se describe en la
sección anterior) y la representación de cadenas del instante de expiración del token, separados por CRLF.
El cálculo del hash es similar al siguiente pseudocódigo y devuelve un valor de hash de 256 bits/32 bytes.
SHA-256('https://<yournamespace>.servicebus.windows.net/'+'\n'+ 1438205742)
El token contiene los valores sin el hash para que el destinatario pueda volver a calcular el hash con los mismos
parámetros y verificar que el emisor posee una clave de firma válida.
El URI de recurso es el URI completo del recurso de Service Bus al que se solicita el acceso. Por ejemplo,
http://.servicebus.windows.net/ o sb://<namespace>.servicebus.windows.net/<entityPath>; , es decir,
http://contoso.servicebus.windows.net/eventhubs/eh1 .
NOTE
El token de acceso para Event Hubs se genera mediante la directiva de acceso compartido. Para más información, consulte
Directiva de autorización de acceso compartido.
Java
private static String GetSASToken(String resourceUri, String keyName, String key)
{
long epoch = System.currentTimeMillis()/1000L;
int week = 60*60*24*7;
String expiry = Long.toString(epoch + week);
e.printStackTrace();
}
return sasToken;
}
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return hash;
}
PHP
C#
private static string createToken(string resourceUri, string keyName, string key)
{
TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);
var week = 60 * 60 * 24 * 7;
var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + week);
string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se=
{2}&skn={3}", HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
return sasToken;
}
3. Proporcione el token al cliente del publicador, que solo puede enviar a la entidad y al publicador a los que
el token concede acceso.
Una vez que el token expira, el cliente pierde su acceso para enviar o publicar en la entidad.
NOTE
Aunque no se recomienda, es posible equipar a los dispositivos con tokens que concedan acceso directo a un centro de
eventos o espacio de nombres. Cualquier dispositivo que contenga un token de ese tipo puede enviar mensajes
directamente a ese centro de eventos. Además, el dispositivo no puede estar en la lista negra que impide el envío a ese
centro de eventos.
Siempre se recomienda proporcionar ámbitos específicos y pormenorizados.
IMPORTANT
Cuando se han creado los tokens, cada cliente se aprovisiona con su propio token único.
Cuando el cliente envía datos a un centro de eventos, la solicitud se etiqueta con el token. Para evitar que un atacante use
la técnica de eavesdropping y robe el token, la comunicación entre el cliente y el centro de eventos debe realizarse a través
de un canal cifrado.
Si un atacante roba un token, el atacante puede suplantar el cliente al que se ha robado el token. Al incorporar un
publicador a la lista de no permitidos, ese cliente se representa como inutilizable hasta que recibe un token nuevo que usa
un publicador diferente.
Pasos siguientes
Vea los artículos siguientes:
Autorización del uso de SAS
Autorización mediante el control de acceso basado en rol (RBAC)
Más información sobre Event Hubs
Consulte los artículos relacionados siguientes:
Autenticación de solicitudes a Azure Event Hubs desde una aplicación mediante Azure Active Directory
Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event
Hubs
Autorización del acceso a recursos de Event Hubs mediante Azure Active Directory
Autorización del acceso a recursos de Event Hubs mediante firmas de acceso compartido
Seguridad de red para Azure Event Hubs
18/08/2020 • 12 minutes to read • Edit Online
En este artículo se describe cómo usar las siguientes características de seguridad con Azure Event Hubs:
Etiquetas de servicio
Reglas de firewall de IP
Puntos de conexión de servicio de red
Puntos de conexión privados (versión preliminar)
Etiquetas de servicio
Una etiqueta de servicio representa un grupo de prefijos de direcciones IP de un servicio de Azure determinado.
Microsoft administra los prefijos de direcciones que la etiqueta de servicio incluye y actualiza automáticamente
dicha etiqueta a medida que las direcciones cambian, lo que minimiza la complejidad de las actualizaciones
frecuentes en las reglas de seguridad de red. Para más información sobre las etiquetas de servicio, consulte
Introducción a las etiquetas de servicio.
Puede usar etiquetas de servicio para definir controles de acceso a la red en grupos de seguridad de red o
Azure Firewall. Utilice etiquetas de servicio en lugar de direcciones IP específicas al crear reglas de seguridad. Al
especificar el nombre de la etiqueta de servicio (por ejemplo, EventHub ) en el campo de origen o destino
apropiado de una regla, puede permitir o denegar el tráfico para el servicio correspondiente.
Firewall de dirección IP
De forma predeterminada, los espacios de nombres de Azure Event Hubs son accesibles desde Internet, siempre
que la solicitud venga con una autenticación y una autorización válidas. Con el firewall de IP, puede restringirlo aún
más a solo un conjunto de direcciones o intervalos de direcciones IPv4 en notación CIDR (Enrutamiento de
interdominios sin clases).
Esta característica es útil en escenarios en los que Azure Event Hubs debe ser accesible únicamente desde ciertos
sitios conocidos. Las reglas de firewall permiten configurar reglas para aceptar el tráfico procedente de direcciones
IPv4 concretas. Por ejemplo, si usa Event Hubs con Azure ExpressRoute, puede crear una regla de firewall para
permitir el tráfico procedente única y exclusivamente de las direcciones IP de la infraestructura local.
Las reglas de firewall de IP se aplican en el nivel del espacio de nombres de Event Hubs. Por lo tanto, las reglas se
aplican a todas las conexiones de clientes que usan cualquier protocolo admitido. Cualquier intento de conexión
desde una dirección IP que no coincida con una regla IP admitida en el espacio de nombres de Event Hubs se
rechaza como no autorizado. La respuesta no menciona la regla IP. Las reglas de filtro IP se aplican en orden y la
primera regla que coincida con la dirección IP determina la acción de aceptar o rechazar.
Para más información, consulte Configuración del firewall de IP para un centro de eventos.
IMPORTANT
Las redes virtuales se admiten en los niveles estándar y dedicado de Event Hubs. No se admiten en el nivel básico .
NOTE
Esta característica solo se admite con el nivel Dedicado . Para más información acerca del nivel Dedicado, consulte
Introducción a Event Hubs dedicado.
Esta funcionalidad actualmente está en su versión preliminar .
Para más información, consulte Configuración de puntos de conexión privados para un centro de eventos.
Pasos siguientes
Vea los artículos siguientes:
Configuración del firewall de IP para un centro de eventos
Configuración de puntos de conexión de servicio de red virtual para un centro de eventos
Configuración de puntos de conexión privados para un centro de eventos
Controles de seguridad para Azure Event Hubs
18/08/2020 • 3 minutes to read • Edit Online
En este artículo se explican los controles de seguridad integrados en Azure Event Hubs.
Un control de seguridad es una cualidad o característica de un servicio de Azure que ayuda a dicho servicio a
prevenir y detectar vulnerabilidades de seguridad, así como a responder a ellas.
En cada control, utilizamos "Sí" o "No" para indicar si dicho control está habilitado o no en el servicio, y "N/D" si no
está disponible para el servicio. También se puede incluir una nota o un vínculo para aportar más información
sobre un atributo.
Red
C O N T RO L DE SEGURIDA D SÍ/ N O N OTA S DO C UM EN TA C IÓ N
Compatibilidad con la No
inserción de redes virtuales
Compatibilidad con el Sí
aislamiento de red y los
firewalls
Compatibilidad con la No
tunelización forzada
Supervisión y registro
C O N T RO L DE SEGURIDA D SÍ/ N O N OTA S DO C UM EN TA C IÓ N
Compatibilidad con la Sí
supervisión de Azure (Log
Analytics, Application
Insights, etc.)
Identidad
C O N T RO L DE SEGURIDA D SÍ/ N O N OTA S DO C UM EN TA C IÓ N
C O N T RO L DE SEGURIDA D SÍ/ N O N OTA S DO C UM EN TA C IÓ N
Cifrado del lado servidor en Sí. Disponible para clústeres Se puede usar una clave Configuración de claves
reposo: claves administradas dedicados. administrada por el cliente administradas por el cliente
por el cliente (BYOK) en Azure Key Vault para para cifrar datos en reposo
cifrar los datos en el centro de Azure Event Hubs
de eventos en reposo. mediante Azure Portal
Administración de configuración
C O N T RO L DE SEGURIDA D SÍ/ N O N OTA S DO C UM EN TA C IÓ N
Compatibilidad con la Sí
administración de
configuración (control de
versiones de configuración,
etc.)
Pasos siguientes
Más información sobre los controles de seguridad integrados en los servicios de Azure.
Controles de Cumplimiento normativo de Azure
Policy para Azure Event Hubs
18/08/2020 • 3 minutes to read • Edit Online
Cumplimiento normativo de Azure Policy proporciona definiciones de iniciativas creadas y administradas por
Microsoft, conocidas como integraciones, para los dominios de cumplimiento y los controles de seguridad
relativos a distintos estándares de cumplimiento. En esta página se enumeran los dominios de cumplimiento y
los controles de seguridad para Azure Event Hubs. Para que los recursos de Azure cumplan con el estándar
específico, puede asignar las integraciones de un control de seguridad de manera individual.
El título de cada definición de directiva integrada se vincula a la definición de directiva en Azure Portal. Use el
vínculo de la columna Versión de directiva para ver el origen en el repositorio de GitHub de Azure Policy.
IMPORTANT
Cada control que se muestra a continuación está asociado a una o varias definiciones de Azure Policy. Estas directivas pueden
ayudarle a evaluar el cumplimiento del control; sin embargo, a menudo no hay una coincidencia 1:1 o completa entre un
control y una o varias directivas. Como tal, el cumplimiento con Azure Policy solo se refiere a las propias directivas; esto no
garantiza que sea totalmente compatible con todos los requisitos de un control. Además, el estándar de cumplimiento incluye
controles que no se abordan con las definiciones de Azure Policy en este momento. Por lo tanto, el cumplimiento en
Azure Policy es solo una vista parcial del estado general de cumplimiento. Las asociaciones entre los controles y las
definiciones de cumplimiento normativo de Azure Policy para estos estándares de cumplimiento pueden cambiar con el
tiempo.
VERSIÓ N DE L A
DIREC T IVA DIREC T IVA
DO M A IN ID. DE C O N T RO L T ÍT ULO DE C O N T RO L ( A ZURE PO RTA L) ( GIT HUB)
Pasos siguientes
Más información al respecto en Cumplimiento normativo de Azure Policy.
Los elementos integrados se pueden encontrar en el repositorio de GitHub de Azure Policy.
Línea de base de seguridad de Azure para Event
Hubs
18/08/2020 • 67 minutes to read • Edit Online
La línea de base de seguridad de Azure para Event Hubs contiene recomendaciones que lo ayudarán a mejorar la
posición de seguridad de la implementación.
La base de referencia de este servicio se extrae de la versión 1.0 de Azure Security Benchmark, que proporciona
recomendaciones sobre cómo puede proteger las soluciones en la nube en Azure con nuestra guía de
procedimientos recomendados.
Para obtener más información, consulte Introducción a las líneas de base de seguridad de Azure.
Seguridad de redes
Para obtener más información, consulte Control de seguridad: seguridad de red.
1.1: Proteja los recursos mediante grupos de seguridad de red o Azure Firewall en su red virtual
Guía : La integración de Event Hubs en puntos de conexión de servicio de red virtual permite el acceso seguro a las
funcionalidades de mensajería desde cargas de trabajo, tales como máquinas virtuales que están enlazadas a redes
virtuales, con una ruta de acceso del tráfico de red que está protegida en ambos extremos.
Una vez que se enlaza con al menos un punto de conexión de servicio de subred de red virtual, el espacio de
nombres respectivo de Event Hubs ya solo aceptará el tráfico procedente de redes virtuales autorizadas. Desde la
perspectiva de la red virtual, el enlace del espacio de nombres de Event Hubs a un punto de conexión de servicio
configura un túnel de redes aislado desde la subred de la red virtual al servicio de mensajería.
También puede crear un punto de conexión privado, que es una interfaz de red que lo conecta de forma privada y
segura al servicio de Azure Event Hubs mediante el servicio de Azure Private Link. El punto de conexión privado
usa una dirección IP privada de la red virtual para incorporar el servicio de manera eficaz a su red virtual. Todo el
tráfico dirigido al servicio se puede enrutar mediante el punto de conexión privado, por lo que no se necesita
ninguna puerta de enlace, dispositivos NAT, conexiones de ExpressRoute o VPN ni direcciones IP públicas.
También puede proteger el espacio de nombres de Azure Event Hubs mediante firewalls. Azure Event Hubs admite
controles de acceso basado en IP para la compatibilidad con el firewall de entrada. Puede establecer reglas de
firewall mediante Azure Portal, plantillas de Azure Resource Manager, o a través de la CLI de Azure o Azure
PowerShell.
Procedimiento para usar puntos de conexión de servicio de red virtual con Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-service-endpoints
Para más información, consulte Integración de Azure Event Hubs en Azure Private Link:
https://docs.microsoft.com/azure/event-hubs/private-link-service.
Habilitación de la integración y los firewalls de redes virtuales en el espacio de nombres de Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-tutorial-virtual-networks-firewalls
Procedimiento para configurar reglas de firewall de IP para espacios de nombres de Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-ip-filtering
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.2: Supervise y registre la configuración y el tráfico de redes virtuales, subredes y NIC
Instrucciones : Use Azure Security Center y siga las recomendaciones de protección de redes para ayudar a
proteger sus recursos de Event Hubs en Azure. Si usa máquinas virtuales de Azure para obtener acceso a los
centros de eventos, habilite los registros de flujo de grupos de seguridad de red (NSG) y envíe los registros a una
cuenta de almacenamiento para la auditoría de tráfico.
Cómo habilitar los registros de flujo de NSG: https://docs.microsoft.com/azure/network-watcher/network-watcher-
nsg-flow-logging-portal
Descripción de la seguridad de red proporcionada por Azure Security Center:
https://docs.microsoft.com/azure/security-center/security-center-network-recommendations
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.3: Proteja las aplicaciones web críticas
Instrucciones : No aplicable; esta recomendación está pensada para las aplicaciones web que se ejecutan en Azure
App Service o en recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
1.4: Deniegue las comunicaciones con direcciones IP malintencionadas conocidas
Instrucciones : Habilite el estándar de DDoS Protection en las redes virtuales asociadas a los centros de eventos
para protegerse de los ataques por denegación de servicio distribuidos (DDoS). Use la inteligencia sobre amenazas
integrada de Azure Security Center para denegar las comunicaciones con direcciones IP malintencionadas
conocidas o no utilizadas.
Cómo configurar la protección contra DDoS: https://docs.microsoft.com/azure/virtual-network/manage-ddos-
protection
Para obtener más información sobre la inteligencia sobre amenazas integrada de Azure Security Center:
https://docs.microsoft.com/azure/security-center/security-center-alerts-service-layer
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.5: Registre los paquetes de red y registros de flujo
Guía : Si usa máquinas virtuales de Azure para obtener acceso a los centros de eventos, habilite los registros de
flujo de grupos de seguridad de red (NSG) y envíe los registros a una cuenta de almacenamiento para la auditoría
de tráfico. También puede enviar registros de flujo de grupo de seguridad de red a un área de trabajo de
Log Analytics y usar el Análisis de tráfico para proporcionar información detallada sobre el flujo de tráfico en la
nube de Azure. Algunas de las ventajas del Análisis de tráfico son la capacidad de visualizar la actividad de la red e
identificar las zonas activas, identificar las amenazas de seguridad, comprender los patrones de flujo de tráfico y
detectar configuraciones de red incorrectas.
Si es necesario para investigar actividades anómalas, habilite la captura de paquetes de Network Watcher.
Cómo habilitar los registros de flujo de NSG: https://docs.microsoft.com/azure/network-watcher/network-watcher-
nsg-flow-logging-portal
Habilitación y uso del Análisis de tráfico: https://docs.microsoft.com/azure/network-watcher/traffic-analytics
Cómo habilitar Network Watcher: https://docs.microsoft.com/azure/network-watcher/network-watcher-create
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.6: Implemente sistemas de prevención de intrusiones y detección de intrusiones (IDS/IPS ) basados en la red
Instrucciones : Si usa máquinas virtuales de Azure para obtener acceso a los centros de eventos, seleccione una
oferta de Azure Marketplace que admita la funcionalidad de IDS/IPS con funcionalidades de inspección de carga. Si
la detección o prevención de intrusiones basadas en la inspección de la carga no es necesaria en su organización,
puede usar la característica de firewall integrada de Azure Event Hubs. Puede restringir el acceso al espacio de
nombres de Event Hubs para un intervalo limitado de direcciones IP o una dirección IP específica mediante reglas
de firewall.
Azure Marketplace:
https://azuremarketplace.microsoft.com/marketplace/?term=Firewall
Procedimiento para agregar una regla de firewall en Event Hubs para una dirección IP especificada:
https://docs.microsoft.com/azure/event-hubs/event-hubs-ip-filtering
Super visión de Azure Security Center : No disponible todavía
Responsabilidad : Customer
1.7: Administre el tráfico a las aplicaciones web
Instrucciones : No aplicable; esta recomendación está pensada para las aplicaciones web que se ejecutan en Azure
App Service o en recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
1.8: Minimice la complejidad y la sobrecarga administrativa de las reglas de seguridad de red
Guía : No aplicable, esta recomendación está pensada para las aplicaciones web que se ejecutan en Azure App
Service o en recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
1.9: Mantenga las configuraciones de seguridad estándar para dispositivos de red
Guía : Defina e implemente configuraciones de seguridad estándar para los recursos de red asociados a los
espacios de nombres de Azure Event Hubs con Azure Policy. Use alias de Azure Policy en los espacios de nombres
"Microsoft.EventHub" y "Microsoft.Network" para crear directivas personalizadas con el fin de auditar o aplicar la
configuración de red de los espacios de nombres de Event Hubs. También puede usar definiciones de directivas
integradas relacionadas con Azure Event Hubs, como:
El centro de eventos debe usar un punto de conexión del servicio de red virtual.
Cómo configurar y administrar Azure Policy: https://docs.microsoft.com/azure/governance/policy/tutorials/create-
and-manage
Directiva integrada de Azure para espacio de nombres de Event Hubs:
https://docs.microsoft.com/azure/governance/policy/samples/built-in-policies#event-hub
Ejemplos de Azure Policy para redes: https://docs.microsoft.com/azure/governance/policy/samples/built-in-
policies#network
Creación de un plano técnico de Azure: https://docs.microsoft.com/azure/governance/blueprints/create-blueprint-
portal
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
1.10: Documente las reglas de configuración de tráfico
Guía : Use etiquetas para redes virtuales y otros recursos relacionados con la seguridad de red y el flujo de tráfico
que están asociados a los centros de eventos.
Creación y uso de etiquetas: https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
1.11: Use herramientas automatizadas para supervisar las configuraciones de recursos de red y detectar cambios
Guía : Use el registro de actividad de Azure para supervisar las configuraciones de los recursos de red y detectar
cambios en los recursos de red relacionados con Azure Event Hubs. Cree alertas en Azure Monitor que se
desencadenarán cuando se produzcan cambios en los recursos de red críticos.
Visualización y recuperación de eventos del registro de actividad de Azure: https://docs.microsoft.com/azure/azure-
monitor/platform/activity-log-view
Creación de alertas en Azure Monitor: https://docs.microsoft.com/azure/azure-monitor/platform/alerts-activity-log
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
Registro y supervisión
Para obtener más información, consulte Control de seguridad: registro y supervisión.
2.1: Uso de orígenes de sincronización de hora aprobados
Guía : No aplicable; Microsoft mantiene el origen de la hora usado en los recursos de Azure, como Azure Event
Hubs, para las marcas de tiempo de los registros.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
2.2: Configuración de la administración central de registros de seguridad
Instrucciones : Dentro de Azure Monitor, configure los registros relacionados con Event Hubs en el registro de
actividad y la configuración de diagnóstico de Event Hubs para enviar los registros a un área de trabajo de Log
Analytics que se va a consultar o a una cuenta de almacenamiento para el almacenamiento de archivo a largo
plazo.
Procedimiento para establecer la configuración de diagnóstico para Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-diagnostic-logs
Descripción del registro de actividad de Azure: https://docs.microsoft.com/azure/azure-monitor/platform/platform-
logs-overview
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
2.3: Habilitación del registro de auditoría para recursos de Azure
Guía : Habilite la configuración de diagnóstico para el espacio de nombres de Azure Event Hubs. Existen tres
categorías de configuración de diagnóstico para Azure Event Hubs: Registros de archivo, registros operativos y
registros de escalabilidad automática. Habilite los registros operativos para capturar información sobre lo que
sucede durante las operaciones de Event Hubs, en concreto, el tipo de operación, como la creación del centro de
eventos, los recursos usados y el estado de la operación.
Además, puede habilitar la configuración de diagnóstico del registro de actividad de Azure y enviarla a una cuenta
de Azure Storage, un centro de eventos o un área de trabajo de Log Analytics. Los registros de actividades
proporcionan información sobre las operaciones llevadas a cabo en Azure Event Hubs y otros recursos. Con los
registros de actividades, se puede responder a las preguntas "qué, quién y cuándo" de las operaciones de escritura
(PUT, POST, DELETE) llevadas a cabo en los espacios de nombres de Azure Event Hubs.
Procedimiento para habilitar la configuración de diagnóstico para Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-diagnostic-logs
Procedimiento para habilitar la configuración de diagnóstico para el registro de actividad de Azure:
https://docs.microsoft.com/azure/azure-monitor/platform/diagnostic-settings-legacy
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
2.4: Recopilación de registros de seguridad de sistemas operativos
Instrucciones : No aplicable; esta recomendación está pensada para los recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
2.5: Configuración de la retención del almacenamiento de registros de seguridad
Guía : En Azure Monitor, establezca el período de retención del área de trabajo de Log Analytics de acuerdo con la
normativa de cumplimiento de su organización, con el fin de capturar y revisar los incidentes relacionados con los
centros de eventos.
Configuración de parámetros de retención de registros de áreas de trabajo de Log Analytics:
https://docs.microsoft.com/azure/azure-monitor/platform/manage-cost-storage#change-the-data-retention-period
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
2.6: Supervisión y registros de revisión
Guía : Analice y supervise los registros en busca de comportamientos anómalos y revise periódicamente los
resultados relacionados con los centros de eventos. Use Log Analytics de Azure Monitor para revisar los registros y
realizar consultas en los datos del registro. Como alternativa, puede habilitar e incorporar datos en Azure Sentinel o
en una herramienta SIEM de terceros.
Para obtener más información acerca del área de trabajo de Log Analytics, consulte:
https://docs.microsoft.com/azure/azure-monitor/log-query/get-started-portal
Procedimiento para realizar consultas personalizadas en Azure Monitor: https://docs.microsoft.com/azure/azure-
monitor/log-query/get-started-queries
Procedimiento de incorporación de Azure Sentinel: https://docs.microsoft.com/azure/sentinel/quickstart-onboard
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
2.7: Habilitación de alertas para actividades anómalas
Guía : Dentro de Azure Monitor, configure los registros relacionados con Azure Event Hubs en el registro de
actividad y la configuración de diagnóstico de Event Hubs para enviar los registros a un área de trabajo de Log
Analytics que se va a consultar o a una cuenta de almacenamiento para el almacenamiento de archivo a largo
plazo. Use el área de trabajo de Log Analytics para crear alertas para actividades anómalas que se encuentren en
registros y eventos de seguridad.
Como alternativa, puede habilitar e incorporar datos en Azure Sentinel.
Introducción al registro de actividad de Azure: https://docs.microsoft.com/azure/azure-monitor/platform/platform-
logs-overview
Procedimiento para establecer la configuración de diagnóstico para Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-diagnostic-logs
Alertas sobre datos de registro del área de trabajo de Log Analytics: https://docs.microsoft.com/azure/azure-
monitor/learn/tutorial-response
Incorporación de Azure Sentinel: https://docs.microsoft.com/azure/sentinel/quickstart-onboard
Super visión de Azure Security Center : No disponible todavía
Responsabilidad : Customer
2.8: Centralización del registro antimalware
Guía : No aplicable; Event Hubs no procesa el registro antimalware.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
2.9: Habilitación del registro de consultas DNS
Guía : No aplicable; Event Hubs no procesa ni genera registros relacionados con DNS.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
2.10: Habilitación del registro de auditoría de la línea de comandos
Guía : No aplicable; esta guía está pensada para recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
Protección de datos
Para obtener más información, consulte Control de seguridad: protección de datos.
4.1: Mantenimiento de un inventario de información confidencial
Instrucciones : Use etiquetas en los recursos relacionados con las instancias de Event Hubs para ayudar a realizar
un seguimiento de los recursos de Azure que almacenan o procesan información confidencial.
Creación y uso de etiquetas: https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.2: Aislamiento de los sistemas que almacenan o procesan información confidencial
Instrucciones : Implemente suscripciones y/o grupos de administración independientes para los entornos de
desarrollo, prueba y producción. Los espacios de nombres de Event Hubs deben estar separados por una red
virtual con puntos de conexión de servicio habilitados y etiquetados adecuadamente.
También puede proteger el espacio de nombres de Azure Event Hubs mediante firewalls. Azure Event Hubs admite
controles de acceso basado en IP para la compatibilidad con el firewall de entrada. Puede establecer reglas de
firewall mediante Azure Portal, plantillas de Azure Resource Manager, o a través de la CLI de Azure o Azure
PowerShell.
Creación de suscripciones adicionales de Azure: https://docs.microsoft.com/azure/billing/billing-create-subscription
Creación de grupos de administración: https://docs.microsoft.com/azure/governance/management-groups/create
Configuración de reglas de firewall de IP para espacios de nombres de Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-ip-filtering
Procedimiento para crear y usar etiquetas: https://docs.microsoft.com/azure/azure-resource-manager/resource-
group-using-tags
Procedimiento para crear una red virtual: https://docs.microsoft.com/azure/virtual-network/quick-create-portal
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.3: Supervisión y bloqueo de una transferencia no autorizada de información confidencial
Guía : Al usar máquinas virtuales para tener acceso a los centros de eventos, aproveche las redes virtuales, los
puntos de conexión de servicio, el firewall de Event Hubs, los grupos de seguridad de red y las etiquetas de servicio
para mitigar la posibilidad de que se produzca una filtración de datos.
Microsoft administra la infraestructura subyacente para Azure Event Hubs y ha implementado controles estrictos
para evitar la pérdida o exposición de los datos de los clientes.
Configuración de reglas de firewall de IP para espacios de nombres de Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-ip-filtering
Introducción a los puntos de conexión de servicio de red virtual con Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-service-endpoints
Integración de Azure Event Hubs en Azure Private Link: https://docs.microsoft.com/azure/event-hubs/private-link-
service
Introducción a los grupos de seguridad de red y las etiquetas de servicio: https://docs.microsoft.com/azure/virtual-
network/security-overview
Descripción de la protección de datos de los clientes en Azure:
https://docs.microsoft.com/azure/security/fundamentals/protection-customer-data
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.4: Cifrado de toda la información confidencial en tránsito
Guía : Azure Event Hubs aplica las comunicaciones cifradas con TLS de forma predeterminada. Actualmente se
admiten las versiones de TLS 1.0, 1.1 y 1.2. Sin embargo, TLS 1.0 y 1.1 están en proceso de desuso en todo el sector,
por lo que se recomienda TLS 1.2 si es posible.
Para comprender las características de seguridad de Event Hubs, consulte Seguridad de red:
https://docs.microsoft.com/azure/event-hubs/network-security
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
4.5: Uso de una herramienta de detección activa para identificar datos confidenciales
Instrucciones : Las características de identificación, clasificación y prevención de pérdida de datos todavía no están
disponibles para Azure Event Hubs. Implemente una solución de terceros, si es necesario, para fines de
cumplimiento.
En el caso de la plataforma subyacente administrada por Microsoft, Microsoft trata todo el contenido de los clientes
como confidencial y hace grandes esfuerzos para proteger a los clientes contra la pérdida y exposición de sus
datos. Para garantizar la seguridad de los datos de los clientes dentro de Azure, Microsoft ha implementado y
mantiene un conjunto de controles y funcionalidades eficaces de protección de datos.
Descripción de la protección de datos de los clientes en Azure:
https://docs.microsoft.com/azure/security/fundamentals/protection-customer-data
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Compartido
4.6: Uso de RBAC de Azure para controlar el acceso a los recursos
Guía : Azure Event Hubs admite la autorización de solicitudes a recursos de Event Hubs mediante
Azure Active Directory (AD). Con Azure AD, puede usar el control de acceso basado en rol (RBAC) para conceder
permisos a una entidad de seguridad, que puede ser un usuario o una entidad de servicio de aplicación.
Introducción a RBAC de Azure AD y los roles disponibles para Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/authorize-access-azure-active-directory
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.7: Uso de la prevención de pérdida de datos basada en host para aplicar el control de acceso
Guía : No aplicable; esta guía está pensada para recursos de proceso.
Microsoft administra la infraestructura subyacente para Event Hubs y ha implementado controles estrictos para
evitar la pérdida o exposición de los datos de los clientes.
Descripción de la protección de datos de los clientes en Azure:
https://docs.microsoft.com/azure/security/fundamentals/protection-customer-data
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
4.8: Cifrado de información confidencial en reposo
Guía : Azure Event Hubs admite la opción de cifrado de datos en reposo con claves administradas por Microsoft o
claves administradas por el cliente. Esta característica permite crear, rotar, deshabilitar y revocar el acceso a las
claves administradas por el cliente que se usan para cifrar datos en reposo de Azure Event Hubs.
Procedimiento para configurar claves administradas por el cliente para el cifrado de Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/configure-customer-managed-key
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.9: Registro y alerta de cambios en los recursos críticos de Azure
Guía : Use Azure Monitor con el registro de actividad de Azure para crear alertas para cuando se produzcan
cambios en las instancias de producción de Azure Event Hubs y otros recursos críticos o relacionados.
Procedimiento para crear alertas para eventos de registro de actividad de Azure:
https://docs.microsoft.com/azure/azure-monitor/platform/alerts-activity-log
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
Administración de vulnerabilidades
Para obtener más información, consulte Control de seguridad: administración de vulnerabilidades.
5.1: Ejecute herramientas de análisis de vulnerabilidades automatizado
Instrucciones : No aplicable; Microsoft realiza la administración de vulnerabilidades en los sistemas subyacentes
que admiten Event Hubs.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
5.2: Implemente una solución de administración de revisiones de sistema operativo automatizada
Guía : No aplicable; Microsoft realiza la administración de revisiones en los sistemas subyacentes que admiten
Event Hubs.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
5.3: Implemente una solución automatizada de administración de revisiones de software de terceros
Guía : No aplicable; la prueba comparativa está pensada para recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
5.4: Compare los exámenes de vulnerabilidades opuestos
Instrucciones : No aplicable; Microsoft realiza la administración de vulnerabilidades en los sistemas subyacentes
que admiten Event Hubs.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
5.5: Use un proceso de clasificación de riesgos para priorizar la corrección de las vulnerabilidades detectadas
Instrucciones : No aplicable; Microsoft realiza la administración de vulnerabilidades en los sistemas subyacentes
que admiten Event Hubs.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Microsoft
Configuración segura
Para obtener más información, consulte Control de seguridad: configuración segura.
7.1: Establezca configuraciones seguras para todos los recursos de Azure
Guía : Defina e implemente configuraciones de seguridad estándar para las implementaciones de Azure Event
Hubs. Use alias de Azure Policy en el espacio de nombres "Microsoft.EventHub" para crear directivas personalizadas
con el fin de auditar o aplicar las configuraciones. También puede usar definiciones de directivas integradas para
Azure Event Hubs, como:
Los registros de diagnóstico del centro de eventos deben estar habilitados
El centro de eventos debe usar un punto de conexión del servicio de red virtual
Directiva integrada de Azure para espacio de nombres de Event Hubs:
https://docs.microsoft.com/azure/governance/policy/samples/built-in-policies#event-hub
Visualización de los alias de Azure Policy disponibles:
https://docs.microsoft.com/powershell/module/az.resources/get-azpolicyalias?view=azps-3.3.0
Cómo configurar y administrar Azure Policy: https://docs.microsoft.com/azure/governance/policy/tutorials/create-
and-manage
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.2: Establezca configuraciones del sistema operativo seguras
Instrucciones : No aplicable; esta recomendación está pensada para los recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.3: Mantenga configuraciones de recursos de Azure seguras
Guía : Use la directiva de Azure Policy [deny] y [deployifnotexist] para aplicar la configuración segura en los
recursos habilitados para Event Hubs.
Configuración y administración de Azure Policy:
https://docs.microsoft.com/azure/governance/policy/tutorials/create-and-manage
Para obtener más información, consulte los efectos de Azure Policy:
https://docs.microsoft.com/azure/governance/policy/concepts/effects
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.4: Mantenga configuraciones del sistema operativo seguras
Instrucciones : No aplicable; esta recomendación está pensada para los recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.5: Almacene de forma segura la configuración de los recursos de Azure
Guía : Si usa definiciones personalizadas de Azure Policy para los recursos de Event Hubs u otros relacionados, use
Azure Repos para almacenar y administrar el código de forma segura.
Cómo almacenar código en Azure DevOps: https://docs.microsoft.com/azure/devops/repos/git/gitworkflow?
view=azure-devops
Documentación de Azure Repos: https://docs.microsoft.com/azure/devops/repos/index?view=azure-devops
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.6: Almacene imágenes de sistema operativo personalizadas de forma segura
Instrucciones : No aplicable; esta recomendación está pensada para los recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.7: Implemente herramientas de administración de configuración del sistema
Guía : Use alias de Azure Policy en el espacio de nombres "Microsoft.EventHub" para crear directivas personalizadas
con el fin de auditar y aplicar las configuraciones del sistema y enviar alertas sobre ellas. Además, desarrolle un
proceso y una canalización para administrar las excepciones de las directivas.
Cómo configurar y administrar Azure Policy: https://docs.microsoft.com/azure/governance/policy/tutorials/create-
and-manage
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.8: Implemente herramientas de administración de configuración del sistema para sistemas operativos
Instrucciones : No aplicable; esta recomendación está pensada para los recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.9: Implemente la supervisión de configuración automatizada para servicios de Azure
Guía : Use alias de Azure Policy en el espacio de nombres "Microsoft.EventHub" para crear directivas personalizadas
con el fin de auditar y aplicar las configuraciones del sistema y enviar alertas sobre ellas. Use la directiva de Azure
Policy [audit], [deny] y [deployifnotexist] para aplicar automáticamente las configuraciones en las
implementaciones de Azure Event Hubs y los recursos relacionados.
Cómo configurar y administrar Azure Policy: https://docs.microsoft.com/azure/governance/policy/tutorials/create-
and-manage
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.10: Implemente la supervisión de configuración automatizada para sistemas operativos
Instrucciones : No aplicable; esta recomendación está pensada para los recursos de proceso.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.11: Administre los secretos de Azure de forma segura
Guía : En el caso de las máquinas virtuales de Azure o las aplicaciones web que se ejecutan en Azure App Service y
se usan para tener acceso a los centros de eventos, use Managed Service Identity junto con Azure Key Vault para
simplificar y proteger la administración de firmas de acceso compartido para sus implementaciones de Azure Event
Hubs. Asegúrese de que la eliminación temporal de Key Vault esté habilitada.
Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event Hubs:
https://docs.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest
Configuración de claves administradas por el cliente para Event Hubs: https://docs.microsoft.com/azure/event-
hubs/configure-customer-managed-key
Cómo integrar las identidades administradas de Azure: https://docs.microsoft.com/azure/azure-app-
configuration/howto-integrate-azure-managed-service-identity
Cómo crear un almacén de claves: https://docs.microsoft.com/azure/key-vault/quick-create-portal
Cómo proporcionar la autenticación de Key Vault con una identidad administrada:
https://docs.microsoft.com/azure/key-vault/managed-identity
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.12: Administre las identidades de forma segura y automática
Guía : En el caso de las máquinas virtuales de Azure o las aplicaciones web que se ejecutan en Azure App Service y
se usan para tener acceso a los centros de eventos, use Managed Service Identity junto con Azure Key Vault para
simplificar y proteger Event Hubs de Azure. Asegúrese de que la eliminación temporal de Key Vault esté habilitada.
Use Identidades administradas para proporcionar a los servicios de Azure una identidad administrada
automáticamente en Azure Active Directory (AD). Identidades administradas le permite autenticarse en cualquier
servicio que admita la autenticación de Azure AD, incluido Azure Key Vault, sin necesidad de credenciales en el
código.
Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event Hubs:
https://docs.microsoft.com/azure/event-hubs/authenticate-managed-identity?tabs=latest
Configuración de claves administradas por el cliente para Event Hubs: https://docs.microsoft.com/azure/event-
hubs/configure-customer-managed-key
Cómo configurar las identidades administradas: https://docs.microsoft.com/azure/active-directory/managed-
identities-azure-resources/qs-configure-portal-windows-vm
Cómo integrar las identidades administradas de Azure: https://docs.microsoft.com/azure/azure-app-
configuration/howto-integrate-azure-managed-service-identity
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.13: Elimine la exposición de credenciales no intencionada
Instrucciones : Implemente el escáner de credenciales para identificar las credenciales en el código. El escáner de
credenciales también fomenta el traslado de credenciales detectadas a ubicaciones más seguras, como Azure Key
Vault.
Cómo configurar el escáner de credenciales: https://secdevtools.azurewebsites.net/helpcredscan.html
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
Recuperación de datos
Para obtener más información, consulte Control de seguridad: recuperación de datos.
9.1: Garantía de copias de seguridad automáticas periódicas
Instrucciones : Configure la recuperación ante desastres geográfica para Azure Event Hubs. Cuando hay regiones
de Azure completas o centros de datos (si no se utilizan zonas de disponibilidad) que experimentan un tiempo de
inactividad, es crucial que el procesamiento de datos siga funcionando en otra región o centro de datos. De esta
forma, la recuperación ante desastres geográfica y la replicación geográfica son características importantes para
cualquier empresa. Azure Event Hubs admite tanto la recuperación ante desastres con localización geográfica como
la replicación geográfica, en el nivel de espacio de nombres.
Introducción a la recuperación ante desastres geográfica para Azure Event Hubs:
https://docs.microsoft.com/azure/event-hubs/event-hubs-geo-dr#availability-zones
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
9.2: Realización de copias de seguridad completas del sistema y copia de seguridad de las claves administradas
por el cliente
Guía : Azure Event Hubs proporciona cifrado de datos en reposo con Azure Storage Service Encryption (Azure SSE).
Event Hubs se basa en Azure Storage para almacenar los datos y, de forma predeterminada, todos los datos que se
almacenan con Azure Storage se cifran mediante claves administradas por Microsoft. Si usa Azure Key Vault para
almacenar claves administradas por el cliente, asegúrese de realizar copias de seguridad automatizadas periódicas
de las claves.
Asegúrese de realizar copias de seguridad automatizadas periódicas de sus secretos de Key Vault con el siguiente
comando de PowerShell: Backup-AzKeyVaultSecret
Procedimiento para configurar claves administradas por el cliente para el cifrado de datos de Azure Event Hubs en
reposo: https://docs.microsoft.com/azure/event-hubs/configure-customer-managed-key
Realización de copias de seguridad de secretos de Key Vault:
https://docs.microsoft.com/powershell/module/azurerm.keyvault/backup-azurekeyvaultsecret
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
9.3: Validación de todas las copias de seguridad, incluidas las claves administradas por el cliente
Guía : Pruebe la restauración de las claves administradas por el cliente de la copia de seguridad.
Restauración de las claves del almacén de claves en Azure:
https://docs.microsoft.com/powershell/module/azurerm.keyvault/restore-azurekeyvaultkey?view=azurermps-
6.13.0
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
9.4: Garantía de la protección de las copias de seguridad y las claves administradas del cliente
Guía : Habilite la eliminación temporal en Key Vault para proteger las claves contra la eliminación accidental o
malintencionada. Azure Event Hubs requiere que las claves administradas por el cliente tengan configurada
Eliminación temporal y No purgar.
Configure la eliminación temporal para la cuenta de Azure Storage que se usa para capturar datos de Event Hubs.
Tenga en cuenta que esta característica aún no se admite para Azure Data Lake Storage Gen 2.
Habilitación de la eliminación temporal en Key Vault: https://docs.microsoft.com/azure/storage/blobs/storage-blob-
soft-delete?tabs=azure-portal
Configuración de un almacén de claves con claves: https://docs.microsoft.com/azure/event-hubs/configure-
customer-managed-key
Eliminación temporal de blobs de Azure Storage: https://docs.microsoft.com//azure/storage/blobs/storage-blob-
soft-delete?tabs=azure-portal
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
Pasos siguientes
Consulte la prueba comparativa de seguridad de Azure.
Obtenga más información sobre las líneas de base de seguridad de Azure.
Guía del protocolo AMQP 1.0 Azure Service Bus y
Event Hubs
18/08/2020 • 62 minutes to read • Edit Online
Advanced Message Queueing Protocol 1.0 es un protocolo de tramas y transferencia estandarizado para transferir
mensajes de forma asincrónica, segura y confiable entre dos partes. Es el principal protocolo de Azure Service Bus
Messaging y Azure Event Hubs. Ambos servicios también admiten HTTPS. El protocolo SBMP propietario, que
también se admite, está desapareciendo en favor de AMQP.
AMQP 1.0 es el resultado de una amplia colaboración del sector que reunió a proveedores de middleware, como
Microsoft y Red Hat, con muchos usuarios de middleware de mensajería, como JP Morgan Chase, que representa
al sector de los servicios financieros. El foro de normalización técnica para las especificaciones del protocolo AMQP
y la extensión es OASIS, y ha logrado la aprobación formal como estándar internacional como ISO/IEC 19494.
Objetivos
Este artículo resume brevemente los conceptos básicos de la especificación de mensajería AMQP 1.0, junto con un
pequeño conjunto de borradores de especificaciones de la extensión que actualmente se está finalizando en el
comité técnico de OASIS para AMQP; también explica cómo Azure Service Bus implementa y crea basándose en
estas especificaciones.
El objetivo es que cualquier desarrollador que usa una pila de cliente de AMQP 1.0 existente en cualquier
plataforma pueda interactuar con Azure Service Bus mediante AMQP 1.0.
Las pilas de propósito general de AMQP 1.0 comunes, como Apache Proton o AMQP.NET Lite, ya implementan
todos los protocolos importantes de AMQP 1.0. Los gestos fundacionales a veces se encapsulan con una API de
mayor nivel; Apache Proton incluso ofrece dos: la API de Messenger imperativa y la API de Reactor reactiva.
En la siguiente sección, se supone que la administración de conexiones, sesiones y vínculos de AMQP, y la
administración de las transferencias de tramas y el control de flujo se tratan mediante la pila correspondiente (por
ejemplo, Apache Proton-C) y no requieren demasiada atención específica de los desarrolladores de aplicaciones, o
ninguna atención. Suponemos de forma abstracta la existencia de unas primitivas de API, como la capacidad de
conectarse y de crear algún tipo de objetos de abstracción remitente y receptor, que luego tienen alguna forma de
operaciones send() y receive() , respectivamente.
Cuando se habla de las funcionalidades avanzadas de Azure Service Bus, como la consulta de mensajes o la
administración de sesiones, estas características se explican en relación a AMQP, pero también como una
pseudoimplementación superpuesta sobre esta abstracción de API supuesta.
¿Qué es AMQP?
AMQP es un protocolo de tramas y transferencia. Las tramas significa que proporciona una estructura para los
flujos de datos binarios que fluyan en ambas direcciones de una conexión de red. La estructura proporciona la
delineación de bloques de datos distintivos tramas que se intercambiarán entre las partes conectadas. Las
funcionalidades de transferencia se aseguran de que ambas partes de la comunicación pueden establecer un
conocimiento compartido acerca de cuándo se transferirán las tramas y cuándo se considerarán completadas las
transferencias.
A diferencia de los anteriores borradores expirados producidos por el grupo de trabajo de AMQP que todavía usan
algunos agentes de mensajes, el protocolo AMQP 1.0 estandarizado y final del grupo de trabajo no prescribe la
presencia de un agente de mensajes o de ninguna topología concreta para las entidades dentro de un agente de
mensajes.
Puede usar el protocolo para la comunicación punto a punto simétrica, para la interacción con los agentes de
mensajes que admiten las colas y las entidades de publicación/suscripción, como hace Azure Service Bus. También
se puede utilizar para la interacción con la infraestructura de mensajería cuando los patrones de interacción son
distintos de las colas regulares, como sucede con Azure Event Hubs. Un Centro de eventos actúa como una cola
cuando se le envían eventos, pero actúa más como un servicio de almacenamiento en serie cuando se leen los
eventos desde él; en cierto modo, se parece a una unidad de cinta. El cliente elige un desplazamiento en el flujo de
datos disponible y, después, atiende todos los eventos desde ese desplazamiento hasta el más reciente disponible.
El protocolo AMQP 1.0 está diseñado para ser extensible, lo que permite que las especificaciones mejoren sus
funcionalidades. Las tres especificaciones de la extensión que tratamos en este documento lo muestran. Para la
comunicación a través de la infraestructura existente de HTTPS/WebSockets, la configuración de los puertos TCP
de AMQP nativos puede ser difícil. Una especificación de enlace define cómo superponer AMQP a WebSockets.
Para interactuar con la infraestructura de mensajería en forma de solicitud/respuesta para fines de administración
o para proporcionar una funcionalidad avanzada, la especificación de Administración de AMQP define las
primitivas de interacción básica necesarias. Para la integración del modelo de autorización federada, la
especificación de seguridad basada en notificaciones de AMQP define cómo asociar y renovar los tokens de
autorización asociados a los vínculos.
Por lo tanto, la conexión de red está anclada en el contenedor. El contenedor la inicia en el rol de cliente, realizando
una conexión de socket TCP saliente a un contenedor en el rol de receptor, que escucha y acepta las conexiones TCP
entrantes. El protocolo de enlace de conexión incluye negociar la versión del protocolo, declarar o negociar el uso
de la seguridad de nivel de transporte (TLS/SSL) y un protocolo de enlace de autenticación y autorización en el
ámbito de la conexión que se basa en SASL.
Azure Service Bus requiere el uso de TLS en todo momento. Admite conexiones a través del puerto TCP 5671,
donde la conexión TCP primero se superpone con TLS antes de entrar en el protocolo de enlace del protocolo
AMQP y también admite conexiones a través del puerto TCP 5672, donde el servidor ofrece inmediatamente una
actualización obligatoria de la conexión a TLS con el modelo prescrito por AMQP. El enlace de WebSockets de
AMQP crea un túnel a través del puerto TCP 443 que es equivalente a las conexiones 5671 de AMQP.
Después de configurar la conexión y TLS, Service Bus ofrece dos opciones de mecanismo SASL:
Normalmente, SASL PLAIN se utiliza para pasar las credenciales de usuario y la contraseña a un servidor.
Service Bus no tiene cuentas, sino reglas de seguridad de acceso compartido con nombre, que confieren
derechos y están asociadas a una clave. El nombre de una regla se usa como nombre de usuario y la clave
(como texto codificado con base64) se utiliza como contraseña. Los derechos asociados a la regla elegida rigen
las operaciones permitidas en la conexión.
SASL ANONYMOUS se utiliza para omitir la autorización de SASL cuando el cliente desea usar el modelo de
seguridad basada en notificaciones (CBS), que se describe más adelante. Con esta opción, se puede establecer
una conexión de cliente de forma anónima por un breve período, durante el cual el cliente solo puede
interactuar con el punto de conexión CBS y se debe completar el protocolo de enlace CBS.
Una vez establecida la conexión de transporte, cada contenedor declara el tamaño máximo de trama que desea
controlar y después de qué tiempo de espera inactivo se desconectará unilateralmente si no hay ninguna actividad
en la conexión.
También declaran cuántos canales simultáneos se admiten. Un canal es una ruta de transferencia unidireccional,
saliente y virtual sobre la conexión. Una sesión toma un canal de cada uno de los contenedores interconectados
para formar una ruta de comunicación bidireccional.
Las sesiones tienen un modelo de control de flujo basado en ventanas; cuando se crea una sesión, cada parte
declara el número de tramas que está dispuesto a aceptar en su ventana de recepción. A medida que las partes
intercambian tramas, las tramas transferidas llenan esa ventana y se detienen cuando la ventana está llena, y hasta
que la ventana se restablece o se expande mediante el performativo del flujo (performativo es el término de AMQP
para los gestos en el nivel de protocolo intercambiados entre las dos partes).
Este modelo basado en ventanas es parecido al concepto de control de flujo basado en ventanas de TCP, pero en el
nivel de sesión dentro del socket. El concepto del protocolo de permitir que haya varias sesiones simultáneas existe
para que el tráfico de alta prioridad pueda adelantar al tráfico normal limitado, como en un carril rápido de una
autopista.
En la actualidad, Azure Service Bus utiliza exactamente una sesión para cada conexión. El tamaño de trama máximo
de Service Bus es 262 144 bytes (256 KB) para Service Bus estándar y Event Hubs. Para Service Bus Premium es 1
048 576 (1 MB). Service Bus no impone ninguna ventana específica de limitación en el nivel de sesión, pero
restablece la ventana periódicamente como parte del control de flujo en el nivel de vínculo (consulte la siguiente
sección).
Las conexiones, los canales y las sesiones son efímeros. Si la conexión subyacente se contrae, es necesario
restablecer las conexiones, el túnel TLS, el contexto de autorización SASL y las sesiones.
Requisitos de puertos de salida de AMQP
Los clientes que usan conexiones AMQP a través de TCP requieren que se abran los puertos 5671 y 5672 en el
firewall local. Junto con estos puertos, podría ser necesario abrir puertos adicionales si está habilitada la
característica EnableLinkRedirect. EnableLinkRedirect es una nueva característica de mensajería que ayuda a
omitir un salto al recibir mensajes, lo que ayuda a mejorar el rendimiento. El cliente comenzará a comunicarse
directamente con el servicio back-end a través del intervalo de puertos 104XX como se muestra en la siguiente
imagen.
Un cliente de .NET producirá un error SocketException ("Intento de obtener acceso a un socket de una manera no
permitida por los permisos de acceso") si el firewall bloquea estos puertos. La característica se puede deshabilitar
estableciendo EnableAmqpLinkRedirect=false en la cadena de conexión, lo que obliga a los clientes a comunicarse
con el servicio remoto a través del puerto 5671.
Vínculos
AMQP transfiere los mensajes a través de vínculos. Un vínculo es una ruta de comunicación creada en una sesión
que permite transferir mensajes en un sentido; la negociación de estado de la transferencia es a través del vínculo
y bidireccional entre las partes conectadas.
Cualquier contenedor pueden crear vínculos en cualquier momento en una sesión existente, lo que hace que
AMQP sea diferente de muchos otros protocolos, incluidos HTTP y MQTT, donde la iniciación de las transferencias
y la ruta de la transferencia es un privilegio exclusivo de la parte que se crea la conexión de socket.
El contenedor que inicia el vínculo pide al contenedor opuesto que acepte un vínculo y elije un el rol de remitente o
receptor. Por lo tanto, cualquier contenedor puede iniciar la creación de rutas de comunicación unidireccionales o
bidireccionales, con esta última modelada como pares de vínculos.
Se asigna nombre a los vínculos y se asocian a los nodos. Como se indicó al principio, los nodos son las entidades
que se comunican dentro de un contenedor.
En Service Bus, un nodo es directamente equivalente a una cola, un tema, una suscripción o una subcola de
mensajes fallidos de una cola o suscripción. Por lo tanto, el nombre de nodo utilizado en AMQP es el nombre
relativo de la entidad dentro del espacio de nombres de Service Bus. Si una cola se denomina myqueue , ese es
también su nombre de nodo de AMQP. Una suscripción de un tema sigue la convención de API HTTP, ya que se
ordena en una colección de recursos de "suscripciones" y, por consiguiente, una suscripción sub en un tema
mytopic tiene el nombre de nodo de AMQP mytopic/subscriptions/sub .
El cliente que se conecta también debe usar un nombre de nodo local para crear los vínculos; Service Bus no es
preceptivo acerca de esos nombres de nodo y no los interpreta. Normalmente, las pilas de cliente de AMQP 1.0
utilizan un esquema para asegurarse de que estos nombres de nodo efímero son únicos en el ámbito del cliente.
Transferencias
Una vez establecido un vínculo, los mensajes se pueden transferir a través de ese vínculo. En AMQP, se realiza una
transferencia con un gesto de protocolo explícito (el performativo transfer) que mueve un mensaje del remitente al
receptor a través de un vínculo. Una transferencia está completa cuando que se "determina", lo que significa que
ambas partes han establecido una conocimiento compartido del resultado de esa transferencia.
En el caso más simple, el remitente puede enviar mensajes "previamente determinados", lo que significa que el
cliente no está interesado en el resultado y el receptor no proporciona ningún comentario sobre el resultado de la
operación. Este modo es compatible con Service Bus en el nivel del protocolo AMQP, pero no se expone en
ninguna de las API de cliente.
Lo normal es que los mensajes se envíen sin determinar y el receptor indique entonces la aceptación o el rechazo
mediante el performativo disposition. Se produce un rechazo cuando el receptor no puede aceptar el mensaje por
alguna razón y el mensaje de rechazo contiene información sobre el motivo, que es una estructura de error
definida por AMQP. Si se rechazan los mensajes debido a errores internos dentro de Service Bus, el servicio
devuelve información adicional dentro de esa estructura que puede utilizarse para proporcionar sugerencias de
diagnóstico al personal de soporte si está registrando solicitudes de soporte técnico. Obtendrá más detalles sobre
los errores más adelante.
Una forma especial de rechazo es el estado publicado, que indica que el receptor no tiene ninguna objeción técnica
a la transferencia, pero tampoco tiene ningún interés en determinarla. Ese es el caso, por ejemplo, cuando un
mensaje se entrega a un cliente de Service Bus y el cliente elige "abandonar" el mensaje porque no puede realizar
el trabajo resultante de procesar el mensaje, mientras que la entrega del mensaje en sí no tiene ningún error. Una
variación de este estado es el estado modificado, que permite realizar cambios en el mensaje cuando se envía. En
la actualidad, Service Bus no utiliza ese estado.
La especificación AMQP 1.0 define otro estado de disposición, denominado recibido, que ayuda específicamente a
controlar la recuperación de vínculos. La recuperación de vínculos permite reconstituir el estado de un vínculo y las
entregas pendientes sobre una nueva conexión y sesión, cuando se pierden la conexión y sesión anteriores.
Service Bus no admite la recuperación de vínculos; si el cliente pierde la conexión a Service Bus con una
transferencia de mensaje sin determinar pendiente, dicha transferencia se pierde y el cliente debe volver a
conectarse, restablecer el vínculo e intentar de nuevo la transferencia.
Como tal, Service Bus y Event Hubs admiten transferencias "al menos una vez", donde el remitente puede estar
seguro de que el mensaje se ha almacenado y aceptado, pero no admite transferencias "exactamente una vez" en
el nivel de AMQP, donde el sistema intentará recuperar el vínculo y continuar negociando el estado de entrega para
evitar la duplicación de la transferencia del mensaje.
Para compensar posibles envíos duplicados, Service Bus admite la detección de duplicados como una característica
opcional en colas y temas. La detección de duplicados registra los identificadores de todos los mensajes entrantes
durante un período definido por el usuario y después elimina silenciosamente todos los mensajes enviados con los
mismos identificadores de mensaje durante esa misma ventana.
Control de flujo
Además del modelo de control de flujo en el nivel de sesión que se ha tratado anteriormente, cada vínculo tiene su
propio modelo de control de flujo. El control de flujo en el nivel de sesión protege el contenedor para que no tenga
que controlar muchas tramas de una vez; el control de flujo de nivel de vínculo pone la aplicación a cargo de
cuántos mensajes desea controlar desde un vínculo y cuándo.
En un vínculo, las transferencias solo se pueden producir si el remitente tiene suficiente crédito del vínculo. El
crédito del vínculo es un contador establecido por el receptor con el performativo flow , que tiene un ámbito en un
vínculo. Cuando el remitente tiene crédito del vínculo asignado, intenta utilizar ese crédito con la entrega de
mensajes. Cada entrega de mensajes reduce en uno el crédito del vínculo restante. Cuando se agota el crédito del
vínculo, las entregas se detienen.
Cuando Service Bus está en el rol de receptor, proporciona instantáneamente al remitente el crédito del vínculo
suficiente para que los mensajes puedan enviarse de inmediato. Puesto que se utiliza el crédito del vínculo, Service
Bus envía ocasionalmente un performativo flow al remitente para actualizar el saldo del crédito del vínculo.
En el rol de remitente, Service Bus envía mensajes para utilizar todo el crédito del vínculo pendiente.
Una llamada "recibir" en el nivel de API se traduce en un performativo flow enviado a Service Bus por el cliente;
Service Bus usa ese crédito tomando el primer mensaje desbloqueado y disponible de la cola, bloqueándolo y
transfiriéndolo. Si no hay ningún mensaje disponible para la entrega, todo el crédito pendiente por cualquier
vínculo establecido con esa entidad concreta permanece registrado en orden de llegada, y los mensajes se
bloquean y transfieren a medida que estén disponibles para usar el crédito pendiente.
Se libera el bloqueo de un mensaje cuando la transferencia se determina en uno de los estados terminales
aceptado, rechazado o publicado. El mensaje se quita de Service Bus cuando el estado terminal aceptado.
Permanece en Service Bus y se entrega al siguiente receptor cuando la transferencia alcance cualquiera de los
otros estados. Service Bus pasa automáticamente el mensaje a la cola de mensajes fallidos de la entidad al alcanzar
el número máximo de entregas permitido para la entidad debido a rechazos o lanzamientos repetidos.
Aunque las API de Service Bus no exponen directamente dicha opción en la actualidad, un cliente del protocolo
AMQP de nivel inferior puede utilizar el modelo de crédito del vínculo para convertir la interacción de "estilo de
extracción", que emite una unidad de crédito para cada solicitud de recepción, en un modelo de "estilo de
inserción" al emitir un gran número de créditos del vínculo y, a continuación, recibir los mensajes cuando estén
disponibles sin intervención adicional. Se admite la inserción mediante la configuración de las propiedades
MessagingFactory.PrefetchCount o MessageReceiver.PrefetchCount. Si son distintas de cero, el cliente de AMQP las
usa como crédito del vínculo.
En este contexto, es importante comprender que el reloj de la expiración del bloqueo en el mensaje dentro de la
entidad se inicia cuando el mensaje se toma de la entidad, no cuando se coloca en la transferencia. Cada vez que el
cliente indica que está preparado para recibir mensajes mediante la emisión de crédito del vínculo, se espera que
extraiga activamente los mensajes a través de la red y que esté preparado para controlarlos. De lo contrario, el
bloqueo del mensaje puede haber expirado incluso antes de que el mensaje se entregue. El uso del control de flujo
del crédito del vínculo debe reflejar directamente la disponibilidad inmediata para tratar con mensajes disponibles
enviados al receptor.
En resumen, las secciones siguientes proporcionan una introducción esquemática del flujo de performativos
durante diferentes interacciones de API. Cada sección describe una operación lógica diferente. Algunas de esas
interacciones pueden ser "perezosas", lo que significa que solo pueden realizarse cuando se solicitan. La creación
de un remitente del mensaje puede no provocar una interacción de la red hasta que se envía o solicita el primer
mensaje.
Las flechas de la tabla siguiente muestran la dirección de flujo de performativos.
Creación del receptor del mensaje
<-- detach(
handle={numeric handle},
closed=true ,
error={error info}
)
Envío (correcto)
Envío (error)
REM OTO A Z URE SERVIC E B US
Recepción
error de Hadoop
En las siguientes secciones se explican las propiedades de las secciones de mensajes de AMQP estándar utilizadas
por Service Bus y cómo se asignan al conjunto de API de Service Bus.
Cualquier propiedad que la aplicación necesite definir debe asignarse al valor application-properties de AMQP.
N O M B RE DEL C A M P O USO N O M B RE DE L A A P I
durable - -
priority - -
first-acquirer - -
delivery-count - DeliveryCount
properties
N O M B RE DEL C A M P O USO N O M B RE DE L A A P I
reply-to-group-id - ReplyToSessionId
Capacidad de transacciones
Una transacción agrupa dos o más operaciones en un ámbito de ejecución. Por naturaleza, una transacción de este
tipo debe garantizar que todas las operaciones que pertenecen a un grupo determinado de operaciones tendrán
éxito o darán error de forma conjunta. Las operaciones se agrupan según un identificador txn-id .
Para permitir la interacción transaccional, el cliente actúa como un transaction controller que controla las
operaciones que deben agruparse. El servicio de Bus Service actúa como un transactional resource y funciona tal
como solicitó el transaction controller .
El cliente y el servicio se comunican a través de un control link establecido por el cliente. El controlador envía los
mensajes declare y discharge a través del vínculo de control para asignar y completar las transacciones
respectivamente (no representan la demarcación del trabajo transaccional). El envío o la recepción real no se
realiza en este vínculo. Cada operación transaccional solicitada se identifica explícitamente con el txn-id deseado
y, por lo tanto, puede aparecer en cualquier vínculo de la conexión. Si el vínculo de control se cierra mientras
siguen presentes las transacciones no descargadas que este creó, todas esas transacciones se revierten
inmediatamente, y los intentos de llevar a cabo más trabajo transaccional en ellas darán lugar a un error. Los
mensajes en el vínculo de control no deben estar preestablecidos.
Cada conexión debe iniciar su propio vínculo de control para poder iniciar y finalizar transacciones. El servicio
define un objetivo especial que funciona como un coordinator . El cliente o el controlador establece un vínculo de
control para este objetivo. El vínculo de control está fuera del límite de una entidad, es decir, el mismo vínculo de
control se puede usar para iniciar y descargar transacciones de varias entidades.
Iniciar una transacción
Para iniciar el trabajo transaccional. el controlador debe obtener un elemento txn-id desde el coordinador. Para
ello, envía un mensaje de tipo declare . Si la declaración se realiza con éxito, el coordinador responde con un
resultado de disposición, que lleva el elemento txn-id asignado.
attach( ------>
name={link name},
... ,
role=sender ,
target=Coordinator
)
<------ attach(
name={link name},
... ,
target=Coordinator()
)
transfer( ------>
delivery-id=0, ...)
{ AmqpValue (Declare() )}
<------ disposition(
first=0, last=0,
state=Declared (
txn-id ={transaction ID}
))
Nota: El elemento fail=true indica la reversión de una transacción, y fail=false hace referencia a la
confirmación.
transfer( ------>
delivery-id=0, ...)
{ AmqpValue (Declare())}
<------ disposition(
first=0, last=0,
state=Declared(
txn-id={transaction ID}
))
C L IEN T E ( C O N T RO L A DO R) DIREC C IÓ N SERVIC E B US ( C O O RDIN A DO R)
...
Trabajo transaccional
en otros vínculos
...
transfer( ------>
delivery-id=57, ...)
{ AmqpValue (
Discharge(txn-id=0,
fail=false) )}
<------ disposition(
first=57, last=57,
state=Accepted() )
transfer( ------>
delivery-id=0, ...)
{ AmqpValue (Declare())}
<------ disposition(
first=0, last=0,
state=Declared(
txn-id={transaction ID}
))
transfer( ------>
handle=1,
delivery-id=1,
state=
TransactionalState(
txn-id=0) )
{ payload }
<------ disposition(
first=1, last=1,
state=TransactionalState(
txn-id=0,
outcome=Accepted() ))
transfer( ------>
delivery-id=0, ...)
{ AmqpValue (Declare())}
C L IEN T E ( C O N T RO L A DO R) DIREC C IÓ N SERVIC E B US ( C O O RDIN A DO R)
<------ disposition(
first=0, last=0,
state=Declared(
txn-id={transaction ID}
))
<------ transfer(
handle=2,
delivery-id=11,
state=null)
{ payload }
disposition( ------>
first=11, last=11,
state=TransactionalState(
txn-id=0,
outcome=Accepted() ))
NOTE
Se admiten las operaciones avanzadas de mensajería de Service Bus mediante un modelo de solicitud y respuesta. Los
detalles de estas operaciones se describen en el artículo El protocolo AMQP 1.0 de Microsoft Azure Service Bus: operaciones
de respuesta/solicitud.
Administración de AMQP
La especificación de la administración de AMQP es la primera de las extensiones de borrador que se analizan en
este artículo. Esta especificación define un conjunto de protocolos superpuesto al protocolo AMQP que permite las
interacciones de administración con la infraestructura de mensajería a través de AMQP. La especificación define
operaciones genéricas como crear, leer, actualizar y eliminar para administrar entidades dentro de una
infraestructura de mensajería y un conjunto de operaciones de consulta.
Todos los gestos requieren una interacción de solicitud/respuesta entre el cliente y la infraestructura de mensajería
y, por tanto, la especificación define cómo modelar ese patrón de interacción sobre AMQP: el cliente se conecta a la
infraestructura de mensajería, inicia una sesión y crea un par de vínculos. En un vínculo, el cliente actúa como
remitente y en el otro actúa como receptor, creando así un par de vínculos que puede actuar como un canal
bidireccional.
Con ese par de vínculos en su lugar, la implementación de la solicitud/respuesta es sencilla: una solicitud es un
mensaje enviado a una entidad dentro de la infraestructura de mensajería que comprende este patrón. En ese
mensaje de solicitud, el campo reply-to de la sección properties se establece en el identificador target para el
vínculo en el que se va a entregar la respuesta. La entidad de control procesa la solicitud y después entrega la
respuesta a través del vínculo cuyo identificador target coincide con el identificador reply-to indicado.
Obviamente, el patrón requiere que el contenedor del cliente y el identificador generado por el cliente para el
destino de la respuesta sean únicos en todos los clientes y, por motivos de seguridad, también difíciles de predecir.
Los intercambios de mensajes usados para el protocolo de administración y para todos los demás protocolos que
usan el mismo patrón se producen en el nivel de la aplicación; no definen nuevos gestos en el nivel de protocolo
AMQP. Eso es intencionado para que las aplicaciones puedan aprovechar inmediatamente estas extensiones con
pilas de AMQP 1.0 compatibles.
Service Bus no implementa actualmente ninguna de las características principales de la especificación de
administración, pero el patrón de solicitud/respuesta definido por la especificación de administración es
fundamental para la característica de seguridad basada en notificaciones y para casi todas las funcionalidades
avanzadas que se tratan en las secciones siguientes:
Autorización basada en notificaciones
El borrador de la especificación de autorización basada en notificaciones (CBS) de AMQP se basa en el patrón de
solicitud/respuesta de la especificación de administración; describe un modelo generalizado para el uso de tokens
de seguridad federados con AMQP.
El modelo de seguridad predeterminado de AMQP que se describe en la introducción se basa en SASL y se integra
con el protocolo de enlace de conexión de AMQP. El uso de SASL tiene la ventaja de ofrecer un modelo extensible
para el que se ha definido un conjunto de mecanismos del que se puede beneficiar cualquier protocolo que
emplee formalmente SASL. Entre estos mecanismos están: "PLAIN" para la transferencia de usuarios y
contraseñas, “EXTERNAL” para enlazar con la seguridad de nivel de TLS, “ANONYMOUS” para expresar la ausencia
de autenticación y autorización explícita y una amplia variedad de mecanismos adicionales que permiten pasar
credenciales de autenticación y autorización o tokens.
La integración de SASL de AMQP tiene dos inconvenientes:
Todas las credenciales y los tokens se limitan al ámbito de la conexión. Una infraestructura de mensajería puede
desear proporcionar un control de acceso diferenciado por entidad. Por ejemplo, permitiendo que el portador
de un token envíe a la cola A pero no a cola B. Con el contexto de autorización anclado en la conexión, no es
posible usar una sola conexión y utilizar tokens de acceso diferentes para la cola A y la cola B.
Normalmente, los tokens de acceso solo son válidos durante un tiempo limitado. Esta validez obliga al usuario
a volver a adquirir periódicamente los tokens y proporciona una oportunidad al emisor del token de rechazar la
emisión de un nuevo token si los permisos de acceso del usuario han cambiado. Las conexiones de AMQP
pueden durar períodos muy largos. El modelo SASL solo proporciona una oportunidad para establecer un
token en tiempo de conexión, lo que significa que la infraestructura de mensajería tiene para desconectar el
cliente cuando el token expira o debe aceptar el riesgo de permitir una comunicación continua con un cliente
cuyos derechos de acceso pueden haberse revocado mientras tanto.
La especificación de CBS de AMQP, implementada por Service Bus, proporciona una solución alternativa elegante
para estos problemas: Permite que un cliente asocie los tokens de acceso a cada nodo y actualice esos tokens antes
de que expiren, sin interrumpir el flujo de mensajes.
CBS define un nodo de administración virtual denominado $cbs, proporcionado por la infraestructura de
mensajería. El nodo de administración acepta los tokens en nombre de los otros nodos de la infraestructura de
mensajería.
El gesto del protocolo es un intercambio de solicitud y respuesta, tal como está definido en la especificación de
administración. Esto significa que el cliente establece un par de vínculos con el nodo $cbs, pasa una solicitud en el
vínculo de salida y, a continuación, espera la respuesta en el vínculo de entrada.
El mensaje de solicitud tiene las siguientes propiedades de la aplicación:
La propiedad name identifica la entidad a la que se va a asociar el token. En Service Bus es la ruta de acceso a la
cola, el tema o la suscripción. La propiedad type identifica el tipo de token:
amqp:jwt JSON Web Token (JWT) Valor de AMQP (cadena) No disponible todavía.
amqp:swt Simple Web Token (SWT) Valor de AMQP (cadena) Solo se admite para los
tokens SWT emitidos por
AAD y ACS
Los tokens confieren derechos. Service Bus conoce tres derechos fundamentales: "Enviar" permite enviar,
"Escuchar" permite recibir y "Administrar" permite manipular las entidades. Los tokens SWT emitidos por
AAD/ACS incluyen explícitamente dichos derechos como notificaciones. Los tokens de SAS de Service Bus hacen
referencia a las reglas configuradas en el espacio de nombres o la entidad, y dichas reglas se configuran con
derechos. Firmar el token con la clave asociada a esa regla hace que el token exprese los derechos
correspondientes. El token asociado a una entidad con put-token permite que el cliente conectado interactúe con la
entidad de acuerdo con los derechos del token. Un vínculo en el que cliente adopta el rol sender requiere el
derecho "Enviar"; adoptar el rol receiver requiere el derecho "Escuchar".
El mensaje de respuesta tiene los siguientes valores de application-properties
El cliente puede llamar a put-token repetidamente y para cualquier entidad de la infraestructura de mensajería. El
ámbito de los tokens es el cliente actual y se anclan en la conexión actual, lo que significa que el servidor elimina
todos los tokens retenidos cuando la conexión se interrumpe.
La implementación actual de Service Bus solo permite CBS junto con el método SASL “ANONYMOUS”. Siempre
debe existir una conexión SSL/TLS antes del protocolo de enlace SASL.
Por tanto, el mecanismo ANONYMOUS debe ser compatible con el cliente de AMQP 1.0 elegido. El acceso
anónimo significa que el protocolo de enlace de conexión inicial, incluida la creación de la sesión inicial, tiene lugar
sin que Service Bus sepa quién está creando la conexión.
Una vez establecida la conexión y la sesión, las únicas operaciones permitidas son asociar los vínculos al nodo $cbs
y enviar la solicitud put-token. Un token válido debe establecerse correctamente mediante una solicitud put-token
para algún nodo de entidad en un plazo de 20 segundos después de establecer la conexión; de lo contrario, Service
Bus interrumpe la conexión unilateralmente.
El cliente es responsable de realizar un seguimiento de la expiración del token. Cuando expira un token, Service
Bus elimina rápidamente todos los vínculos de la conexión a la entidad correspondiente. Para evitar el problema, el
cliente puede sustituir el token del nodo por uno nuevo en cualquier momento mediante el nodo de
administración virtual $cbs con el mismo gesto put-token y sin interferir con el tráfico de carga que fluye en
diferentes vínculos.
Funcionalidad "enviar por"
Enviar por / Transferir remitente es una funcionalidad que permite a Service Bus desviar un mensaje dado a una
entidad de destino a través de otra entidad. Esta característica se usa para realizar operaciones entre entidades en
una sola transacción.
Gracias a esta funcionalidad, puede crear un remitente y establecer el vínculo a via-entity . Al establecer el
vínculo, se pasa información adicional para establecer el verdadero destino de los mensajes o transferencias en ese
vínculo. Una vez que la asociación se ha realizado correctamente, todos los mensajes enviados en este vínculo se
reenvían automáticamente a destination-entity a través de via-entity.
Nota: La autenticación debe realizarse en ambos elementos via-entity y destination-entity antes de establecer
este vínculo.
REM OTO DIREC C IÓ N A Z URE SERVIC E B US
attach( ------>
name={link name},
role=sender,
source={client link ID},
target= {via-entity} ,
proper ties=map [(
com.microsoft:transfer-
destination-address=
{destination-entity} )] )
<------ attach(
name={link name},
role=receiver,
source={client link ID},
target={via-entity},
properties=map [(
com.microsoft:transfer-destination-
address=
{destination-entity} )] )
Pasos siguientes
Para aprender más sobre AMQP, visite los siguientes vínculos:
Información general sobre AMQP para Service Bus
Compatibilidad de AMQP 1.0 con los temas y las colas con particiones de Service Bus
AMQP de Service Bus para Windows Server
Traslado de un espacio de nombres de Azure Event
Hubs a otra región
18/08/2020 • 8 minutes to read • Edit Online
Existen varios escenarios en los que puede que deba mover su espacio de nombres de Event Hubs existente de una
región a otra. Por ejemplo, si desea crear un espacio de nombres con la misma configuración para realizar pruebas.
También es posible que desee mover un espacio de nombres secundario a otra región como parte del
planeamiento de recuperación ante desastres.
NOTE
En este artículo se muestra cómo exportar una plantilla de Azure Resource Manager para un espacio de nombres de Event
Hubs existente y, a continuación, usar la plantilla para crear un espacio de nombres con la misma configuración en otra
región. Sin embargo, este proceso no traslada los eventos que todavía no se han procesado. Debe procesar los eventos del
espacio de nombres original antes de eliminarlo.
Prerrequisitos
Asegúrese de que los servicios y las características que usa su cuenta se admitan en la región de destino.
En el caso de las características en vista previa (GB), asegúrese de que la suscripción está en la lista de
permitidos para la región de destino.
Si tiene Característica de captura habilitada para Event Hubs en el espacio de nombres, mueva las cuentas de
Azure Storage o Azure Data Lake Store Gen 2 o Azure Data Lake Store Gen 1 antes de mover el espacio de
nombres Event Hubs. También puede trasladar el grupo de recursos que contiene los espacios de nombres de
Storage y de Event Hubs a la otra región siguiendo unos pasos similares a los que se describen en este artículo.
Si el espacio de nombres de Event Hubs está en un clúster de Event Hubs , cree un clúster dedicado en la
región de destino antes de seguir los pasos de este artículo. También puede usar la plantilla de inicio rápido
en GitHub para crear un clúster de Event Hubs. En la plantilla, quite la parte del espacio de nombres de JSON
para crear solo el clúster.
Preparación
Para empezar, exporte una plantilla de Resource Manager. Esta plantilla contiene la configuración que describe el
espacio de nombres de Event Hubs.
1. Inicie sesión en Azure Portal.
2. Seleccione Todos los recursos y, después, seleccione su espacio de nombres de Event Hubs.
3. Seleccione > Configuración > Expor tar plantilla .
4. Elija Descargar en la página Expor tar plantilla .
5. Busque el archivo ZIP que descargó desde el portal y descomprímalo en la carpeta que prefiera.
Este archivo ZIP contiene los archivos .json que incluyen la plantilla y los scripts para implementar la
plantilla.
Move
Implemente la plantilla para crear un espacio de nombres de Event Hubs en la región de destino.
1. En Azure Portal, haga clic en Crear un recurso .
2. En Buscar en Marketplace , escriba implementación de plantillas y, después, presione ENTRAR .
3. Seleccione Implementación de plantillas .
4. Seleccione Crear .
5. Seleccione Cree su propia plantilla en el editor .
6. Seleccione Cargar archivo y, después, siga las instrucciones para cargar el archivo template.json que
descargó en la última sección.
7. Seleccione Guardar para guardar la plantilla.
8. En la página Implementación personalizada , siga estos pasos:
a. Seleccione una suscripción de Azure.
b. Seleccione un grupo de recursos existente o cree uno. Si el espacio de nombres de origen se
encontraba en un clúster de Event Hubs, seleccione el grupo de recursos que contiene el clúster en la
región de destino.
c. Seleccione la ubicación o región de destino. Si ha seleccionado un grupo de recursos existente, esta
configuración es de solo lectura.
d. En la sección CONFIGURACIÓN , lleve a cabo estos pasos:
a. Escriba el nombre del nuevo espacio de nombres .
b. Si el espacio de nombres de origen se encontraba en un clúster de Event Hubs , escriba los
nombres del grupo de recursos y del clúster de Event Hubs como parte del
identificador externo .
c. Si el centro de eventos del espacio de nombres usa una cuenta de Storage para capturar
eventos, especifique el nombre del grupo de recursos y la cuenta de almacenamiento para el
campo StorageAccounts_<original storage account name>_external .
/subscriptions/0000000000-0000-0000-0000-0000000000000/resourceGroups/<STORAGE'S RESOURCE
GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>
Descarte o limpieza
Después de la implementación, si quiere empezar de nuevo, puede eliminar el espacio de nombres de Event
Hubs de destino y repetir los pasos descritos en las secciones Preparación y Traslado de este artículo.
Para confirmar los cambios y completar el traslado de un espacio de nombres de Event Hubs, elimine el espacio
de nombres de Event Hubs de origen . Asegúrese de que ha procesado todos los eventos en el espacio de
nombres antes de eliminarlo.
Para eliminar un espacio de nombres de Event Hubs (de origen o destino) mediante Azure Portal:
1. En la ventana de búsqueda de la parte superior de Azure Portal, escriba Event Hubs y seleccione Event
Hubs en los resultados de la búsqueda. Verá los espacios de nombres de Event Hubs en una lista.
2. Seleccione el espacio de nombres de destino que desea eliminar y, a continuación, seleccione Eliminar en la
barra de herramientas.
Pasos siguientes
En este tutorial, ha trasladado un espacio de nombres de Azure Event Hubs de una región a otra y ha limpiado los
recursos de origen. Para obtener más información sobre cómo trasladar recursos entre regiones y la recuperación
ante desastres en Azure, consulte:
Traslado de los recursos a un nuevo grupo de recursos o a una nueva suscripción
Traslado de máquinas virtuales de Azure a otra región
Agregar particiones de forma dinámica a un centro
de eventos (tema Apache Kafka) en Azure Event
Hubs
18/08/2020 • 11 minutes to read • Edit Online
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. 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. Una partición es una secuencia ordenada de eventos que se mantiene en
un centro de eventos. A medida que llegan eventos más recientes, se agregan al final de esta secuencia. Para más
información sobre las particiones en general, consulte Particiones.
Puede especificar el número de particiones en el momento de crear un centro de eventos. En algunos escenarios,
puede que tenga que agregar particiones después de crear el centro de eventos. En este artículo se describe cómo
agregar particiones de forma dinámica a un centro de eventos existente.
IMPORTANT
La adición dinámica de particiones solo está disponible en clústeres de Event Hubs dedicados .
NOTE
En el caso de los clientes de Apache Kafka, un centro de eventos se asigna a un tema de Kafka . Para obtener más
asignaciones entre Azure Event Hubs y Apache Kafka, consulte Asignación conceptual de Kafka y Event Hubs.
CLI
Use el comando az eventhubs eventhub update de la CLI para actualizar particiones en un centro de eventos.
Apache Kafka
Use la API de AlterTopics (por ejemplo, a través de la herramienta de temas de Kafka de la CLI) para aumentar el
número de particiones. Para obtener más información, consulte Modificación de temas de Kafka.
Recomendaciones
Si usa la clave de partición con las aplicaciones de productor y depende del hash de clave para garantizar el
orden en una partición, no se recomienda agregar particiones de forma dinámica.
IMPORTANT
Aunque los datos existentes conservan el orden, el hash de partición se interrumpirá para los mensajes con hash
aplicados cuando el número de particiones cambie debido a la adición de particiones.
Se recomienda agregar una partición a un tema existente o a una instancia del centro de eventos en los
siguientes casos:
Cuando se usa el método round robin (predeterminado) para enviar eventos.
Con estrategias de creación de particiones predeterminadas de Kafka, como Sticky Assignor.
Pasos siguientes
Para más información sobre las particiones, consulte Particiones.
Uso de Blob Storage como almacén de puntos de
comprobación: Event Hubs en Azure Stack Hub
(versión preliminar)
18/08/2020 • 2 minutes to read • Edit Online
Si usa Azure Blob Storage como 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. 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 de almacenamiento es la 2017-11-09. En este caso, tendrá que usar código para
establecer como destino la versión de la API del servicio de almacenamiento en 2017-11-09. Para obtener un
ejemplo de cómo establecer como destino una versión específica de la API de almacenamiento, vea estos ejemplos
en GitHub:
.NET
Java.
JavaScript o TypeScript
Python: sincrónico, asincrónico
IMPORTANT
Event Hubs en Azure Stack Hub se encuentra actualmente en versión preliminar y es gratuito.
Si ejecuta un receptor de Event Hubs que usa Blob Storage como almacén de puntos de comprobación sin tener
como destino la versión que admite Azure Stack Hub, recibirá el mensaje de error siguiente:
The value for one of the HTTP headers is not in the correct format
The value for one of the HTTP headers is not in the correct format.
RequestId:f048aee8-a90c-08ba-4ce1-e69dba759297
Time:2020-03-17T22:04:13.3559296Z
ErrorCode:InvalidHeaderValue
Error:None
HeaderName:x-ms-version
HeaderValue:2019-07-07
Exception is HttpResponseError('The value for one of the HTTP headers is not in the correct
format.\nRequestId:f048aee8-a90c-08ba-4ce1-e69dba759297\nTime:2020-03-
17T22:04:13.3559296Z\nErrorCode:InvalidHeaderValue\nError:None\nHeaderName:x-ms-version\nHeaderValue:2019-07-
07')
The exception is HttpResponseError('The value for one of the HTTP headers is not in the correct
format.\nRequestId:f048aee8-a90c-08ba-4ce1-e69dba759297\nTime:2020-03-
17T22:04:13.3559296Z\nErrorCode:InvalidHeaderValue\nError:None\nHeaderName:x-ms-version\nHeaderValue:2019-07-
07'). Retrying after 71.45254944090853 seconds
Pasos siguientes
Vea el artículo siguiente para obtener información sobre la creación de particiones y puntos de comprobación:
Equilibrio de carga de particiones entre varias instancias de una aplicación
Desuso del soporte técnico de Azure Service
Manager para Azure Service Bus, Relay y Event Hubs
18/08/2020 • 5 minutes to read • Edit Online
Resource Manager, nuestra pila de infraestructura en la nube de próxima generación, está reemplazando por
completo el modelo de Azure Service Management "clásico" (modelo de implementación clásica). Como
consecuencia, tanto las API REST del modelo de implementación clásica como el soporte técnico para Service Bus,
Relay y Event Hubs se retirarán el 1 de noviembre de 2021. La primera vez que se informó de este desuso fue en un
anuncio de Microsoft Tech Community, pero recientemente hemos decidido ampliar el período de desuso dos años
más allá del momento del anuncio original. Para facilitar la identificación, estas API tienen
management.core.windows.net en su identificador URI. En la tabla siguiente encontrará una lista de las API en desuso
y su versión para Azure Resource Manager que debería usar ahora.
Para seguir usando Service Bus, Relay y Event Hubs, cambie a Resource Manager antes del 31 de octubre de 2021.
Animamos a todos los clientes que aún usan las API antiguas a que realicen pronto el cambio, con el fin de poder
aprovechar las ventajas adicionales de Resource Manager, entre las que se incluyen la agrupación de recursos, las
etiquetas, un proceso de administración e implementación simplificado, y un control de acceso específico mediante
el control de acceso basado en rol (RBAC).
Para más información sobre las diferencias entre Azure Resource Manager y Azure Service Manager, consulte el
blog de TechNet.
Para obtener más información sobre las API de Service Manager y Resource Manager para Azure Service Bus, Relay
y Event Hubs, consulte nuestra documentación de la API REST:
Azure Service Bus
Azure Event Hubs
Azure Relay
Topics-GetTopicsAsync list
Azure Service Bus
GET
https://management.core.windows.net/{subscription
ID}/services/ServiceBus/Namespaces/{namespace
name}/topics? $skip={skip}&$top={top}
Queues-GetQueueAsync get
Azure Service Bus
GET
https://management.core.windows.net/{subscription
ID}/services/ServiceBus/Namespaces/{namespace
name}/queues/{queueName}
Relays-GetRelaysAsync list
Get Relays
GET
https://management.core.windows.net/{subscription
ID}/services/ServiceBus/Namespaces/{namespace
name}/relays? $skip={skip}&$top={top}
NamespaceAuthorization
Rules-
CreateNamespaceAuthor
izationRuleAsync
EventHubsCrud- list
ListEventHubsAsync
List Event Hubs
GET
https://management.core.windows.net/{subscription
ID}/services/ServiceBus/Namespaces/{namespace
name}/eventhubs?$skip={skip}&$top={top}
EventHubsCrud- get
GetEventHubAsync
Get Event Hubs
GET
https://management.core.windows.net/{subscription
ID}/services/ServiceBus/Namespaces/{namespace
name}/eventhubs/{eventHubPath}
Topics-GetTopicAsync get
GET
https://management.core.windows.net/{subscription
ID}/services/ServiceBus/Namespaces/{namespace
name}/topics/{topicPath}
Pasos siguientes
Consulte la documentación siguiente:
Documentación más reciente de API REST
Azure Service Bus
Azure Event Hubs
Azure Relay
Documentación más reciente de Azure PowerShell
Azure Service Bus
Azure Event Hubs
Azure Event Grid
Obtención de una cadena de conexión de Event Hubs
18/08/2020 • 4 minutes to read • Edit Online
Para utilizar Event Hubs, debe crear un espacio de nombres de Event Hubs. Un espacio de nombres es un contenedor de ámbito para varios
centros de eventos o temas de Kafka. Este espacio de nombres proporciona un FQDN único. Una vez creado un espacio de nombres, puede
obtener la cadena de conexión necesaria para comunicarse con Event Hubs.
La cadena de conexión para Azure Event Hubs tiene los siguientes componentes incrustados dentro de ella:
FQDN = el FQDN del espacio de nombres de Event Hubs que creó (incluye el espacio de nombres de Event Hubs seguido de
servicebus.windows.net).
SharedAccessKeyName = el nombre que eligió para las claves SAS de la aplicación.
SharedAccessKey = el valor generado de la clave.
La plantilla de la cadena de conexión tiene el siguiente aspecto
Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>
6. Seleccione una directiva de acceso compar tido en la lista de directivas. El valor predeterminado se denomina:
RootManageSharedAccessPolicy . Puede agregar una directiva con los permisos adecuados (lectura y escritura) y usar esa directiva.
7. Seleccione el botón Copiar junto al campo Cadena de conexión: clave principal .
Puede usar Get-AzEventHubKey para obtener la cadena de conexión del nombre de directiva o regla específica, tal como se muestra a
continuación:
az eventhubs namespace authorization-rule keys list --resource-group dummyresourcegroup --namespace-name dummynamespace --name
RootManageSharedAccessKey
O bien puede usar lo siguiente para obtener la cadena de conexión para una entidad EventHub:
az eventhubs eventhub authorization-rule keys list --resource-group dummyresourcegroup --namespace-name dummynamespace --eventhub-name
dummyeventhub --name RootManageSharedAccessKey
Para más información sobre los comandos de la CLI de Azure para Event Hubs, consulte CLI de Azure para Event Hubs.
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Creación de un Centro de eventos
Intercambio de eventos entre consumidores y
productores que utilizan distintos protocolos: AMQP,
Kafka y HTTPS
18/08/2020 • 17 minutes to read • Edit Online
Azure Event Hubs admite tres protocolos para consumidores y productores: AMQP, Kafka y HTTPS. Cada uno de
estos protocolos tiene su propia manera de representar un mensaje, por lo que surge la pregunta siguiente: si una
aplicación envía eventos a un centro de eventos con un protocolo y los consume con otro, ¿qué aspecto tienen las
distintas partes y valores del evento cuando llegan al consumidor? En este artículo se describen los procedimientos
recomendados para el productor y el consumidor a fin de garantizar que la aplicación de consumo interprete
correctamente los valores de un evento.
La información de este artículo abarca específicamente estos clientes, con las versiones indicadas utilizadas para
desarrollar los fragmentos de código:
Cliente Java de Kafka (versión 1.1.1 en https://www.mvnrepository.com/artifact/org.apache.kafka/kafka-clients)
Cliente de Microsoft Azure Event Hubs para Java (versión 1.1.0 en https://github.com/Azure/azure-event-hubs-
java)
Cliente de Microsoft Azure Event Hubs para .NET (versión 2.1.0 en https://github.com/Azure/azure-event-hubs-
dotnet)
Microsoft Azure Service Bus (versión 5.0.0 en https://www.nuget.org/packages/WindowsAzure.ServiceBus)
HTTPS (solo es compatible con productores)
Otros clientes de AMQP pueden comportarse de forma ligeramente diferente. AMQP tiene un sistema de tipos bien
definidos, pero los aspectos específicos de serializar los tipos específicos de lenguaje hacia y desde ese sistema de
tipos depende del cliente, igual que de cómo el cliente proporciona acceso a las partes de un mensaje AMQP.
Este código crea una canalización de bytes transparente entre las dos mitades de la aplicación y permite al
desarrollador de la aplicación serializar y deserializar manualmente en cualquier forma deseada, incluida la toma
de decisiones de deserialización en tiempo de ejecución, por ejemplo, según el tipo o la información del remitente
en las propiedades del conjunto de usuarios del evento.
Las aplicaciones que tienen un solo tipo de cuerpo de evento fijo pueden utilizar otros serializadores y
deserializadores de Kafka para convertir datos de forma transparente. Por ejemplo, considere una aplicación que
utiliza JSON. La construcción y la interpretación de la cadena JSON se produce en el nivel de aplicación. En el nivel
de Event Hubs, el cuerpo del evento siempre es una cadena, una secuencia de bytes que representa los caracteres
de la codificación UTF-8. En este caso, el productor o consumidor Kafka puede aprovechar el elemento
StringSerializer o StringDeserializer proporcionado como se muestra en el código siguiente:
Productor de cadena UTF -8 de Kafka
Para el lado AMQP, Java y .NET proporcionan maneras integradas para convertir cadenas a o desde secuencias de
bytes UTF-8. Los clientes de Microsoft AMQP representan los eventos como una clase denominada EventData. En
los ejemplos siguientes se muestra cómo serializar una cadena UTF-8 en un cuerpo de evento EventData con un
productor AMQP y cómo deserializar un cuerpo de evento EventData en una cadena UTF-8 en un consumidor
AMQP.
Productor de cadena UTF -8 de Java AMQP
// getting the event body bytes depends on which .NET client is used
byte[] bodyBytes = ed.Body.Array; // Microsoft Azure Event Hubs Client for .NET
// byte[] bodyBytes = ed.GetBytes(); // Microsoft Azure Service Bus
Como Kafka es código abierto, el desarrollador de aplicaciones puede inspeccionar la implementación de cualquier
serializador o deserializador e implementar código, que produzca o consuma una secuencia de bytes compatible en
el lado AMQP.
// BEST PRACTICE: include a property which indicates that properties will need AMQP deserialization
working.Properties.Add("AMQPheaders", 0);
AMQP a Kafka, parte 2: usar AmqpDeserializer para deserializar las propiedades de un consumidor Kafka
Si la aplicación conoce el tipo esperado para una propiedad, existen métodos de deserialización que no requieren
una conversión más tarde, pero generan un error si la propiedad no es del tipo esperado.
AMQP a Kafka, parte 3: una manera diferente de usar AmqpDeserializer en un consumidor Kafka
// BEST PRACTICE: detect whether AMQP deserialization is needed
if (headerNamedAMQPheaders != null) {
// Property "MyStringProperty" is expected to be of type string.
try {
final String propertyString = amqpDeser.deserializeString(headerNamedMyStringProperty.value());
// do work here
}
catch (IllegalArgumentException e) {
// property was not a string
}
Ir en la otra dirección es más complicado, porque el consumidor AMQP siempre ve los encabezados establecidos
por un productor Kafka como bytes sin formato (tipo org.apache.qpid.proton.amqp.Binary para el cliente de
Microsoft Azure Event Hubs para Java, o System.Byte[] para los clientes .NET AMQP de Microsoft). La ruta de
acceso más fácil es usar uno de los serializadores proporcionados con Kafka para generar los bytes para los valores
de encabezado en el lado del productor Kafka y, a continuación, escribir un código de deserialización compatible en
el lado del consumidor AMQP.
Al igual que para AMQP a Kafka, el procedimiento recomendado es incluir una propiedad en los mensajes enviados
a través de Kafka. El consumidor AMQP puede usar la propiedad para determinar si los valores de encabezado
necesitan deserialización. El valor de la propiedad no es importante. Solo necesita un nombre conocido que el
consumidor AMQP pueda buscar en la lista de encabezados y ajustar su comportamiento en consecuencia. Si no se
puede cambiar el productor Kafka, también es posible que la aplicación de consumo compruebe si el valor de la
propiedad es de tipo binario o de bytes, e intente la deserialización en función del tipo.
Kafka a AMQP, parte 1: crear y enviar un evento desde Kafka con propiedades
final String topicName = /* topic name */
final ProducerRecord<Long, String> pr = new ProducerRecord<Long, String>(topicName, /* other arguments */);
final Headers h = pr.headers();
// BEST PRACTICE: include a property which indicates that properties will need deserialization
h.add("RawHeaders", intSer.serialize(0));
rawbytes = ((org.apache.qpid.proton.amqp.Binary)ed.getProperties().get("MyLongProperty")).getArray();
long myLongProperty = 0;
for (byte b : rawbytes) {
myLongProperty <<= 8;
myLongProperty |= ((long)b & 0x00FF);
}
rawbytes = ((org.apache.qpid.proton.amqp.Binary)ed.getProperties().get("MyShortProperty")).getArray();
short myShortProperty = (short)rawbytes[0];
myShortProperty <<= 8;
myShortProperty |= ((short)rawbytes[1] & 0x00FF);
rawbytes = ((org.apache.qpid.proton.amqp.Binary)ed.getProperties().get("MyFloatProperty")).getArray();
int intbits = 0;
for (byte b : rawbytes) {
intbits <<= 8;
intbits |= ((int)b & 0x00FF);
}
float myFloatProperty = Float.intBitsToFloat(intbits);
rawbytes = ((org.apache.qpid.proton.amqp.Binary)ed.getProperties().get("MyDoubleProperty")).getArray();
long longbits = 0;
for (byte b : rawbytes) {
longbits <<= 8;
longbits |= ((long)b & 0x00FF);
}
double myDoubleProperty = Double.longBitsToDouble(longbits);
rawbytes = ((org.apache.qpid.proton.amqp.Binary)ed.getProperties().get("MyStringProperty")).getArray();
String myStringProperty = new String(rawbytes, StandardCharsets.UTF_8);
}
Pasos siguientes
En este artículo se muestra cómo hacer streaming a instancias de Event Hubs sin cambiar los clientes del protocolo
o ejecutar sus propios clústeres. Para obtener más información acerca de Event Hubs y Event Hubs para Kafka,
consulte los artículos siguientes:
Más información sobre Events Hubs
Información sobre Event Hubs para Kafka
Más ejemplos en GitHub de Event Hubs para Kafka
Use MirrorMaker para transmitir eventos desde Kafka local a una instancia de Event Hubs en la nube.
Aprenda a transmitir en una instancia de Event Hubs mediante aplicaciones nativas de Kafka, Apache Flink o
Akka Streams.
Guía de programación de .NET para Azure Event
Hubs (paquete heredado Microsoft.Azure.EventHubs)
18/08/2020 • 15 minutes to read • Edit Online
En este artículo se describen algunos escenarios comunes para escribir código mediante Azure Event Hubs. En él
se presupone un conocimiento previo de Event Hubs. Para obtener una visión general conceptual de Event Hubs,
consulte la Información general de Azure Event Hubs.
WARNING
Esta guía se refiere al paquete Microsoft.Azure.EventHubs anterior. Se recomienda migrar el código a fin de usar el
paquete Azure.Messaging.EventHubs más reciente.
Publicadores de eventos
Los eventos se envían a un centro de eventos mediante HTTP POST o una conexión AMQP 1.0. La elección de cuál
usar y cuándo depende del escenario específico abordado. Las conexiones AMQP 1.0 se miden como conexiones
asincrónicas en Service Bus y son más apropiadas en los escenarios con volúmenes mayores de mensajes
frecuentes y requisitos de latencia menores, ya que proporcionan un canal de mensajería persistente.
Si se usan las API administradas de .NET, las construcciones principales para publicar datos en Event Hubs son las
clases EventHubClient y EventData. EventHubClient proporciona el canal de comunicación AMQP a través del que
se envían eventos al centro de eventos. La clase EventData representa un evento y se usa para publicar mensajes
en un centro de eventos. Esta clase incluye el cuerpo, algunos metadatos (Properties) e información de encabezado
(SystemProperties) sobre el evento. Otras propiedades se agregan al objeto EventData cuando este atraviesa un
centro de eventos.
Introducción
Las clases .NET que admiten Event Hubs se proporcionan en el paquete NuGet Microsoft.Azure.EventHubs. Puede
instalarlas mediante el Explorador de soluciones de Visual Studio o la Consola del Administrador de paquetes de
Visual Studio. Para ello, emita el siguiente comando en la ventana Consola del administrador de paquetes :
Install-Package Microsoft.Azure.EventHubs
};
eventHubClient = EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
Serialización de eventos
La clase EventData tiene dos constructores sobrecargados que aceptan diversos parámetros, bytes o una matriz de
bytes, que representan la carga de datos de eventos. Cuando se usa JSON con EventData, puede usar
Encoding.UTF8.GetBytes() para recuperar la matriz de bytes de una cadena codificada con JSON. Por ejemplo:
Clave de partición
NOTE
Si no está familiarizado con las particiones, consulte este artículo.
Al enviar datos de eventos, puede especificar un valor con hash para generar una asignación de partición. La
partición se especifica mediante la propiedad PartitionSender.PartitionID. Sin embargo, la decisión de usar
particiones implica la elección entre disponibilidad y coherencia.
Consideraciones sobre disponibilidad
El uso de una clave de partición es opcional y debe considerar detenidamente si desea o no utilizar uno. Si no
especifica una clave de partición cuando se publica un evento, se usa una asignación de tipo round robin. En
muchos casos, el uso de una clave de partición es una buena elección si el orden de los eventos es importante.
Cuando se usa una clave de partición, estas particiones requieren la disponibilidad en un solo nodo y las
interrupciones pueden producirse a lo largo del tiempo; por ejemplo, cuando los nodos de ejecución se reinician y
revisan. Por lo tanto, si establece un identificador de partición y esa partición deja de estar disponible por alguna
razón, un intento de acceder a los datos de esa partición provocará un error. Si la alta disponibilidad es más
importante, no especifique una clave de partición; en ese caso, los eventos se envían a las particiones que usan el
modelo round robin descrito anteriormente. En este escenario, se realiza una selección explícita entre
disponibilidad (ningún identificador de partición) y coherencia (anclar eventos a un identificador de partición).
Otra consideración es el control de retrasos en el procesamiento de eventos. En algunos casos podría ser mejor
quitar datos y reintentarlo que intentar seguir con el procesamiento, lo que puede provocar más retrasos de
procesamiento descendente. Por ejemplo, con un tablero de cotizaciones es preferible esperar a tener todos los
datos actualizados, pero en un escenario de chat en directo o VOIP sería preferible disponer de los datos
rápidamente, aunque no estén completos.
Dadas estas consideraciones de disponibilidad, en estos casos puede elegir una de las siguientes estrategias de
control de errores:
Detener (dejar de leer Event Hubs hasta que se solucionen cosas)
Quitar (los mensajes no son importantes, quítelos)
Reintentar (reintentar los mensajes cuando lo vea apropiado)
Para obtener más información y una explicación sobre las ventajas y desventajas entre la disponibilidad y la
coherencia, consulte Disponibilidad y coherencia en Event Hubs.
Consumidores de eventos
La clase EventProcessorHost procesa los datos de Event Hubs. Debe usar esta implementación para generar los
lectores de eventos en la plataforma .NET. EventProcessorHost proporciona un entorno de tiempo de ejecución
seguro, seguro para subprocesos y de varios procesos para las implementaciones de procesadores de eventos que
también ofrecen administración de concesión de puntos de comprobación y particiones.
Para usar la clase EventProcessorHost, puede implementar IEventProcessor. Esta interfaz contiene cuatro métodos:
OpenAsync
CloseAsync
ProcessEventsAsync
ProcessErrorAsync
Para iniciar el procesamiento de eventos, cree una instancia de EventProcessorHost, proporcionando los
parámetros adecuados para el centro de eventos. Por ejemplo:
NOTE
EventProcessorHost y sus clases relacionadas se ofrecen en el paquete Microsoft.Azure.EventHubs.Processor . Agregue
el paquete al proyecto de Visual Studio siguiendo las instrucciones de este artículo o emitiendo el comando siguiente en la
ventana de la Consola del Administrador de paquetes: Install-Package Microsoft.Azure.EventHubs.Processor .
var eventProcessorHost = new EventProcessorHost(
EventHubName,
PartitionReceiver.DefaultConsumerGroupName,
EventHubConnectionString,
StorageConnectionString,
StorageContainerName);
await eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();
En este momento, el host intenta adquirir una concesión en cada partición del centro de eventos mediante un
algoritmo "expansivo". Estas concesiones duran un período de tiempo determinado y después deben renovarse. A
medida que nuevos nodos, instancias de trabajo en este caso, pasan a estar en línea, colocan reservas de concesión
y, con el tiempo, la carga cambia entre los nodos a medida que cada una trata de adquirir más concesiones.
Con el tiempo, se establece un equilibrio. Esta capacidad dinámica permite la aplicación del escalado automático
basado en CPU a los consumidores para escalar vertical y horizontalmente. Debido a que Event Hubs no tiene un
concepto directo de recuentos de mensajes, el uso medio de la CPU suele ser el mejor mecanismo para medir el
back-end o la escala del consumidor. Si los publicadores empiezan a publicar más eventos de los que los
consumidores pueden procesar, el aumento de la CPU en los consumidores puede usarse para producir una escala
automática en el recuento de instancias de trabajador.
La clase EventProcessorHost también implementa un mecanismo de puntos de comprobación basado en el
almacenamiento de Azure. Este mecanismo almacena el desplazamiento en función de la partición, para que cada
consumidor pueda determinar cuál fue el último punto de comprobación del cliente anterior. A medida que las
particiones pasan de un nodo a otro a través de concesiones, este es el mecanismo de sincronización que facilita el
desplazamiento de cargas.
Revocación de publicador
Además de las características avanzadas del entorno en tiempo de ejecución del host del procesador de eventos, el
servicio Event Hubs permite la revocación del editor con el fin de impedir a editores específicos el envío de eventos
a un centro de eventos. Estas características son útiles si se ha visto comprometido el token de un publicador o si
una actualización de software está provocando que se comporten incorrectamente. En estas situaciones, es posible
bloquear que la identidad del editor, que forma parte de su token de SAS, publique eventos.
NOTE
Actualmente, solo la API REST es compatible con esta característica (revocación del editor).
Para más información acerca de la revocación del publicador y cómo realizar envíos a Event Hubs como publicador,
consulte el ejemplo de Event Hubs Large Scale Secure Publishing (Publicación segura a gran escala de Event Hubs).
Pasos siguientes
Para obtener más información acerca de los escenarios de Event Hubs, visite estos vínculos:
Introducción a la API de Event Hubs
¿Qué es Event Hubs?
Disponibilidad y coherencia en Event Hubs
Referencia de la API de host del procesador de eventos
Procesamiento de datos de un centro de eventos con
Azure Stream Analytics
18/08/2020 • 7 minutes to read • Edit Online
El servicio Azure Stream Analytics permite ingerir, procesar y analizar fácilmente los datos de streaming
procedentes de Azure Event Hubs, lo que proporciona valiosa información para emprender acciones en tiempo real.
Esta integración le permite crear rápidamente una canalización de análisis de la ruta de acceso activa. Puede usar
Azure Portal para visualizar los datos de entrada y escribir una consulta de Stream Analytics. Cuando la consulta
esté lista, podrá transferirla a producción con solo unos pocos clics.
Ventajas principales
Estas son las principales ventajas de la integración de Azure Event Hubs y Azure Stream Analytics:
Vista previa de datos : puede obtener una vista previa de los datos de entrada de un centro de eventos en
Azure Portal.
Comprobación de la consulta : prepare una consulta de transformación y pruébela directamente en Azure
Portal. Si necesita información sobre la sintaxis del lenguaje de consulta, consulte la documentación sobre el
lenguaje de consulta de Stream Analytics.
Implementación de la consulta en producción : puede implementar la consulta en producción creando e
iniciando un trabajo de Azure Stream Analytics.
Flujo integral
1. Inicie sesión en Azure Portal.
2. Vaya al espacio de nombres de Event Hubs y acceda al centro de eventos que contiene los datos de
entrada.
3. Seleccione Procesar datos en la página del centro de eventos.
4. En el icono Enable real-time insights from events (Extraer información en tiempo real de los eventos),
seleccione Explorar .
5. Aparecerá una página de consulta con los valores ya establecidos en los campos siguientes:
a. El centro de eventos , como entrada de la consulta.
b. Una consulta SQL de ejemplo con la instrucción SELECT.
c. Un alias de salida que hace referencia a los resultados de la prueba de consulta.
NOTE
Si usa esta característica por primera vez, esta página le pedirá permiso para crear un grupo de consumidores
y una directiva del centro de eventos para obtener una vista previa de los datos de entrada.
6. Seleccione Crear en el panel Vista previa de la entrada , tal como se muestra en la imagen anterior.
7. Aparecerá inmediatamente una instantánea de los últimos datos de entrada en esta pestaña.
El tipo de serialización de los datos se detecta automáticamente (JSON o CSV). Puede cambiarlo
manualmente a JSON, CSV o AVRO.
Puede obtener una vista previa de los datos de entrada en formato de tabla o en formato sin procesar.
Si los datos que aparecen no están actualizados, seleccione Actualizar para ver los eventos más
recientes.
Este es un ejemplo de datos con formato de tabla :
8. Seleccione Test quer y (Consulta de prueba) para ver una instantánea de los resultados de prueba de la
consulta en la pestaña Test results (Resultados de la prueba). También puede descargar los resultados.
9. Escriba su propia consulta para transformar los datos. Consulte Stream Analytics Query Language reference
(Referencia del lenguaje de consulta de Stream Analytics).///
10. Cuando haya probado la consulta y desee moverla a producción, seleccione Deploy quer y (Implementar
consulta). Para implementar la consulta, cree un trabajo de Azure Stream Analytics, donde podrá configurar
una salida del trabajo e iniciarlo. Para crear un trabajo de Stream Analytics, especifique un nombre para el
trabajo y seleccione Create (Crear).
NOTE
Le recomendamos que cree un grupo de consumidores y una directiva para cada nuevo trabajo de Azure Stream
Analytics que cree en la página de Event Hubs. Los grupos de consumidores solo permiten cinco lectores simultáneos,
por lo que, si se proporciona un grupo de consumidores dedicado para cada trabajo, se evitarán los errores que
podrían surgir en caso de que se superara ese límite. Las directivas dedicadas le permiten cambiar la clave o revocar
permisos sin afectar a otros recursos.
11. El trabajo de Stream Analytics se crea en el mismo lugar de la consulta que coincide con la consulta probada;
el centro de eventos se utiliza como entrada.
12. Para completar la canalización, establezca la salida de la consulta y seleccione Star t (Iniciar) para iniciar el
trabajo.
NOTE
Antes de iniciar el trabajo, no olvide reemplazar el alias de salida por el nombre de salida que creó en Azure Stream
Analytics.
Restricciones conocidas
Cuando se prueba la consulta, los resultados tardan aproximadamente seis segundos en cargarse. Estamos
trabajando para mejorar el rendimiento de las pruebas. Sin embargo, cuando se implementa en producción, la
latencia de Azure Stream Analytics es inferior a un segundo.
Unidades de streaming
El valor de Azure Stream Analytics se establece de forma predeterminada en tres unidades de streaming (SU). Para
ajustar esta configuración, seleccione Escala en el menú izquierdo de la página Trabajo de Stream Analytics de
Azure Portal. Para más información sobre las unidades de streaming, consulte Descripción y ajuste de las unidades
de streaming.
Pasos siguientes
Para más información sobre de las consultas de Stream Analytics, consulte este artículo sobre el lenguaje de
consulta de Stream Analytics
Guía del desarrollador de Apache Kafka para Azure
Event Hubs
18/08/2020 • 11 minutes to read • Edit Online
En este artículo se proporcionan vínculos a artículos que describen cómo integrar las aplicaciones de Apache
Kafka en Azure Event Hubs.
Información general
Event Hubs proporciona un punto de conexión de Kafka que las aplicaciones basadas en Kafka existentes pueden
usar como alternativa a la ejecución de su propio clúster de Kafka. Event Hubs admite el protocolo de Apache
Kafka 1.0 y versiones posteriores, y funciona con las aplicaciones existentes de Kafka, incluida MirrorMaker. Para
obtener más información, consulte Event Hubs para Apache Kafka.
Tutoriales
Tutoriales en GitHub
Consulte los siguientes tutoriales en GitHub:
Confluent's Schema Registry En este tutorial encontrará una guía para la integración de
Schema Registry y Event Hubs para Kafka.
Tutoriales en DOCS
Además, consulte el tutorial: Procesamiento de eventos de Apache Kafka para Event Hubs mediante Stream
Analytics en este conjunto de contenido, que muestra cómo transmitir datos a Event Hubs y procesarlos con
Azure Stream Analytics.
Reflejo de un agente de Kafka en un centro de eventos Muestra cómo reflejar un agente de Kafka en un centro de
eventos mediante Kafka MirrorMaker.
Conexión de Apache Spark a un centro de eventos Le guía a través de la conexión de la aplicación de Spark a
Event Hubs para el streaming en tiempo real.
Conexión de Apache Flink a un centro de eventos Se muestra cómo conectar Apache Flink a un centro de
eventos sin cambiar los clientes del protocolo o ejecutar sus
propios clústeres.
Integración de Apache Kafka Connect en Event Hubs Le guía por la integración de Kafka Connect con un centro de
(versión preliminar) eventos y la implementación de conectores básicos
FileStreamSource y FileStreamSink.
Conexión de Akka Streams a un centro de eventos Muestra cómo conectar Akka Streams a un centro de
eventos sin cambiar los clientes del protocolo ni ejecutar sus
propios clústeres.
Cómo usar el iniciador de Spring Boot para Apache Kafka Muestra cómo configurar una aplicación de Spring Cloud
con Azure Event Hubs Stream Binder basada en Java creada con Spring Boot
Initializer para usar Apache Kafka con Azure Event Hubs.
Pasos siguientes
Revise los ejemplos del repositorio de GitHub azure-event-hubs-for-kafka en las carpetas de guías de inicio
rápido y tutoriales.
Consulte también los siguientes artículos:
Guía de solución de problemas de Apache Kafka para Event Hubs
Preguntas más frecuentes: Event Hubs para Apache Kafka
Guía de migración de Kafka para Event Hubs
Migración a Azure Event Hubs para ecosistemas de
Apache Kafka
18/08/2020 • 4 minutes to read • Edit Online
Azure Event Hubs expone un punto de conexión de Apache Kafka, que le permite conectarse a Event Hubs
mediante el protocolo Kafka. Al realizar cambios mínimos en una aplicación de Kafka existente, puede conectarse a
Azure Event Hubs y disfrutar de las ventajas del ecosistema de Azure. Event Hubs para Kafka admite Apache Kafka
versión 1.0 y posteriores.
Antes de la migración
Crear una cuenta de Azure
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Creación de un espacio de nombres de Event Hubs
Siga las instrucciones paso a paso de Creación de un centro de eventos para crear un espacio de nombres de Event
Hubs y un centro de eventos.
Cadena de conexión
Siga los pasos del artículo Obtención de la cadena de conexión del portal. Anote la cadena de conexión para usarla
más adelante.
Nombre de dominio completo (FQDN )
Es posible que también necesite el nombre de dominio completo que señala a su espacio de nombres de Event
Hubs. El nombre de dominio completo puede encontrarse en la cadena de conexión de la siguiente manera:
Endpoint=sb:// mynamespace.servicebus.windows.net /;SharedAccessKeyName=XXXXXX;SharedAccessKey=XXXXXX
Si el espacio de nombres de Event Hubs se implementa en una nube no pública, el nombre de dominio puede ser
distinto (por ejemplo, *.servicebus.chinacloudapi.cn, *.servicebus.usgovcloudapi.net o *.servicebus.cloudapi.de).
Migración
Actualización de la configuración del cliente de Kafka
Para conectarse a un centro de eventos habilitado para Kafka, debe actualizar las configuraciones de cliente de
Kafka. Si no encuentra la suya, pruebe a buscar dónde está establecido bootstrap.servers en su aplicación.
Inserte las siguientes configuraciones donde corresponda en su aplicación. Asegúrese de actualizar los valores
bootstrap.servers y sasl.jaas.config para dirigir al cliente al punto de conexión de Kafka para Event Hubs con la
autenticación correcta.
bootstrap.servers={MYNAMESPACE}.servicebus.windows.net:9093
request.timeout.ms=60000
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString"
password="{CONNECTION STRING TO YOUR NAMESPACE}";
Si sasl.jaas.config no es una configuración compatible con su marco, busque las configuraciones que se usan
para establecer el nombre de usuario y contraseña de SASL y úselas en su lugar. Establezca el nombre de usuario
en $ConnectionString y la contraseña para la cadena de conexión de Event Hubs.
Después de la migración
Ejecute la aplicación de Kafka que envía eventos a un centro de eventos. A continuación, compruebe que el centro
de eventos recibe los eventos mediante Azure Portal. En la página Información general del espacio de nombres
de Event Hubs, cambie a la vista Mensajes de la sección Métricas . Actualice la página para actualizar el gráfico.
Puede tardar unos segundos en mostrar que los mensajes se han recibido.
Pasos siguientes
Para obtener más información acerca de Event Hubs y Event Hubs para Kafka, consulte los artículos siguientes:
Guía de solución de problemas de Apache Kafka para Event Hubs
Preguntas más frecuentes: Event Hubs para Apache Kafka
Guía del desarrollador de Apache Kafka para Azure Event Hubs
Configuraciones recomendadas
Guía de solución de problemas de Apache Kafka para
Event Hubs
18/08/2020 • 9 minutes to read • Edit Online
En este artículo se proporcionan sugerencias para la solución de problemas que pueden aparecer al usar Event
Hubs para Apache Kafka.
No se recibieron registros
Puede que vea que los consumidores no están obteniendo ningún registro y se están reequilibrando
constantemente. En este escenario, los consumidores no obtienen ningún registro y se reequilibran
constantemente. Cuando se produce no hay ninguna excepción o error, pero los registros de Kafka mostrarán que
los consumidores están atascados intentando volver a unirse al grupo y asignar las particiones. Las causas
principales pueden ser varias:
Asegúrese de que request.timeout.ms y session.timeout.ms tengan al menos los valores recomendados de
60000 y 30000 respectivamente. Si estos valores son demasiado bajos podrían provocar tiempos de expiración
de consumidor, que, a su vez, provocarían reequilibrios (lo que provocaría más tiempos de expiración, que
provocarían más reequilibrios, y así sucesivamente)
Si la configuración coincide con los valores recomendados y aun así sigue viendo un reequilibrio constante, no
dude en abrir una incidencia (no olvide incluir toda la configuración en la incidencia para que podamos ayudarle
a depurar).
UnknownServerException
Puede recibir un excepción UnknownServerException de las bibliotecas de cliente de Kafka que sea similar al
ejemplo siguiente:
Registre una incidencia con el servicio de soporte técnico de Microsoft. El registro en el nivel de depuración y las
marcas de tiempo de excepción en UTC son útiles para depurar el problema.
Otros problemas
Si ve problemas al usar Kafka en Event Hubs, compruebe los siguientes elementos.
Firewall que bloquea el tráfico : asegúrese de que el firewall no está bloqueando el puerto 9093 .
TopicAuthorizationException : las causas más comunes de esta excepción son:
Un error de escritura en la cadena de conexión del archivo de configuración, o
Un intento de uso de Event Hubs para Kafka en un espacio de nombres de nivel básico. La característica
Event Hubs para Kafka solo es compatible con los espacios de nombres de niveles Estándar y Dedicado.
La versión de Kafka no coincide : Event Hubs para ecosistemas de Kafka admite las versiones 1.0 y
posteriores de Kafka. Algunas aplicaciones que usan la versión 0.10 de Kafka y versiones posteriores pueden
funcionar ocasionalmente gracias a la compatibilidad con versiones anteriores del protocolo de Kafka, pero se
recomienda seriamente no usar versiones antiguas de la API. Las versiones 0.9 y anteriores de Kafka no admiten
los protocolos SASL necesarios y no se pueden conectar a Event Hubs.
Codificaciones extrañas en encabezados de AMQP al consumir con Kafka : al enviar eventos a un centro
de eventos a través de AMQP, los encabezados de carga de AMQP se serializan en la codificación de AMQP. Los
consumidores de Kafka no deserializan los encabezados de AMQP. Para leer los valores de encabezado,
descodifique manualmente los encabezados AMQP. Como alternativa, puede evitar el uso de encabezados
AMQP si sabe que va a consumir a través del protocolo Kafka. Para más información, consulte este problema de
GitHub.
Autenticación SASL : la obtención de un marco para cooperar con el protocolo de autenticación SASL que
requiere Event Hubs puede resultar más difícil de lo que parece. Vea si puede solucionar problemas relacionados
con la configuración mediante los recursos del marco en la autenticación SASL.
límites
Apache Kafka frente a Event Hubs Kafka. En su mayor parte, Event Hubs Kafka tienen los mismos valores
predeterminados, propiedades, códigos de error y comportamiento general que Apache Kafka. Las instancias en las
que difieren explícitamente (o donde Event Hubs impone un límite que Kafka no tiene) se enumeran a continuación:
La longitud máxima de la propiedad group.id es 256 caracteres
El tamaño máximo de offset.metadata.max.bytes es 1024 bytes
Las confirmaciones de desplazamiento se limitan a 4 llamadas por segundo por partición con un tamaño de
registro interno máximo de 1 MB
Pasos siguientes
Para obtener más información acerca de Event Hubs y Event Hubs para Kafka, consulte los artículos siguientes:
Guía del desarrollador de Apache Kafka para Event Hubs
Guía de migración de Kafka para Event Hubs
Preguntas más frecuentes: Event Hubs para Apache Kafka
Configuraciones recomendadas
Uso de Apache Kafka MirrorMaker con Event Hubs
para Apache Kafka
18/08/2020 • 8 minutes to read • Edit Online
En este ejemplo se muestra cómo reflejar un agente de Kafka en un centro de eventos mediante Kafka
MirrorMaker.
NOTE
Este ejemplo está disponible en GitHub.
Introducción
Un aspecto importante de las aplicaciones de escala en la nube modernas es la capacidad de actualizar, mejorar y
cambiar la infraestructura sin interrumpir el servicio. En este tutorial se muestra cómo un centro de eventos y
Kafka MirrorMaker se pueden integrar en una canalización de Kafka existente en Azure al "crear un reflejo" del
flujo de entrada de Kafka en el servicio Event Hubs.
Un punto de conexión de Kafka en Azure Event Hubs permite conectarse a Azure Event Hubs mediante el
protocolo Kafka (es decir, clientes de Kafka). Al realizar cambios mínimos en una aplicación de Kafka, puede
conectarse a Azure Event Hubs y disfrutar de las ventajas del ecosistema de Azure. Las instancias de Event Hubs
actualmente son compatibles con Kafka versión 1.0 y posteriores.
Prerrequisitos
Para completar este tutorial, asegúrese de disponer de los siguientes elementos:
Lea el artículo Event Hubs para Apache Kafka.
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Kit de desarrollo de Java (JDK) 1.7+
En Ubuntu, ejecute apt-get install default-jdk para instalar el JDK.
Asegúrese de establecer la variable de entorno JAVA_HOME para que apunte a la carpeta donde está
instalado el JDK.
Descargue e instale un archivo binario de Maven
En Ubuntu, puede ejecutar apt-get install maven para instalar Maven.
Git
En Ubuntu, puede ejecutar sudo apt-get install git para instalar Git.
bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093
client.id=mirror_maker_producer
Para comprobar que los eventos llegan al centro de eventos, consulte las estadísticas de entrada en Azure Portal o
ejecute un consumidor en el centro de eventos.
Con MirrorMaker en ejecución, los eventos que se envían al clúster de Kafka de origen son recibidos por el clúster
de Kafka y el centro de eventos reflejado. Al usar MirrorMaker y un punto de conexión de Kafka para Event Hubs,
puede migrar una canalización de Kafka existente al servicio de Azure Event Hubs administrado sin cambiar el
clúster existente ni interrumpir ningún flujo de datos en curso.
Ejemplos
Consulte los siguientes ejemplos en GitHub:
Código de ejemplo de este tutorial en GitHub
Kafka MirrorMaker para Azure Event Hubs que se ejecuta en una instancia de contenedor de Azure
Pasos siguientes
Para obtener más información acerca de Event Hubs para Kafka, consulte los artículos siguientes:
Conexión de Apache Spark a un centro de eventos
Conexión de Apache Flink a un centro de eventos
Integración de Kafka Connect con un centro de eventos
Exploración de ejemplos en nuestro GitHub
Conexión de Akka Streams a un centro de eventos
Guía del desarrollador de Apache Kafka para Azure Event Hubs
Conexión de una aplicación de Apache Spark con
Azure Event Hubs
18/08/2020 • 4 minutes to read • Edit Online
Este tutorial le guía a través de la conexión de la aplicación de Spark a Event Hubs para el streaming en tiempo
real. Esta integración permite el streaming sin tener que cambiar sus clientes de protocolo o ejecutar sus propios
clústeres de Kafka o Zookeeper. Este tutorial necesita Apache Spark v2.4 o superior y Apache Kafka v2.0 o superior.
NOTE
Este ejemplo está disponible en GitHub.
Prerrequisitos
Antes de comenzar este tutorial, asegúrese de que dispone de lo siguiente:
Suscripción de Azure. En caso de no tener ninguna, cree una cuenta gratuita.
Apache Spark v2.4
Apache Kafka v2.0
Git
NOTE
El adaptador Spark-Kafka se actualizó para ser compatible con Kafka v2.0 a partir de Spark v2.4. En versiones anteriores de
Spark, el adaptador admitía Kafka v0.10 y versiones posteriores, pero confiaba específicamente en las API de Kafka v0.10.
Como Event Hubs para Kafka no admite Kafka v0.10, los adaptadores Spark-Kafka de versiones de Spark anteriores a la v2.4
no se admiten en Event Hubs para ecosistemas de Kafka.
df = /**Dataframe**/
Pasos siguientes
Para obtener más información acerca de Event Hubs y Event Hubs para Kafka, consulte los artículos siguientes:
Reflejo de un agente de Kafka en un centro de eventos
Conexión de Apache Flink a un centro de eventos
Integración de Kafka Connect con un centro de eventos
Exploración de ejemplos en nuestro GitHub
Conexión de Akka Streams a un centro de eventos
Guía del desarrollador de Apache Kafka para Azure Event Hubs
Uso de Apache Flink con Azure Event Hubs para
Apache Kafka
18/08/2020 • 6 minutes to read • Edit Online
En este tutorial se muestra cómo conectar Apache Flink a un centro de eventos sin cambiar los clientes del
protocolo o ejecutar sus propios clústeres. Azure Event Hubs admite Apache Kafka versión 1.0..
Uno de los beneficios clave de usar Apache Kafka es el ecosistema de plataformas a los que se puede conectar.
Event Hubs combina la flexibilidad de Kafka con la escalabilidad, coherencia y compatibilidad del ecosistema de
Azure.
En este tutorial, aprenderá a:
Creación de un espacio de nombres de Event Hubs
Clonación del proyecto de ejemplo
Ejecutar el productor Flink
Ejecutar el consumidor Flink
NOTE
Este ejemplo está disponible en GitHub.
Prerrequisitos
Para completar este tutorial, asegúrese de cumplir estos requisitos previos:
Lea el artículo Event Hubs para Apache Kafka.
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Kit de desarrollo de Java (JDK) 1.7+
En Ubuntu, ejecute apt-get install default-jdk para instalar el JDK.
Asegúrese de establecer la variable de entorno JAVA_HOME para que apunte a la carpeta donde está
instalado el JDK.
Descargue e instale un archivo binario de Maven
En Ubuntu, puede ejecutar apt-get install maven para instalar Maven.
Git
En Ubuntu, puede ejecutar sudo apt-get install git para instalar Git.
bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093
client.id=FlinkExampleProducer
sasl.mechanism=PLAIN
security.protocol=SASL_SSL
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="$ConnectionString" \
password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
El productor ahora comenzará a enviar eventos al centro de eventos en el tema test e imprimir los eventos en
stdout.
bootstrap.servers={YOUR.EVENTHUBS.FQDN}:9093
group.id=FlinkExampleConsumer
sasl.mechanism=PLAIN
security.protocol=SASL_SSL
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="$ConnectionString" \
password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
Si el centro de eventos tiene eventos (por ejemplo, si el productor también se está ejecutando), el consumidor
comienza a recibir eventos del tema test .
Revise la guía del conector Kafka de Flink para más información acerca de cómo conectar Flink a Kafka.
Pasos siguientes
Para más información sobre Event Hubs para Kafka, vea los artículos siguientes:
Reflejo de un agente de Kafka en un centro de eventos
Conexión de Apache Spark a un centro de eventos
Integración de Kafka Connect con un centro de eventos
Exploración de ejemplos en nuestro GitHub
Conexión de Akka Streams a un centro de eventos
Guía del desarrollador de Apache Kafka para Azure Event Hubs
Integración de la compatibilidad con Apache Kafka
Connect en Azure Event Hubs (versión preliminar)
18/08/2020 • 8 minutes to read • Edit Online
A medida que aumenta la ingesta para las necesidades del negocio, también aumenta la necesidad de ingerir para
varios orígenes y receptores externos. Apache Kafka Connect proporciona dicha plataforma para conectar e
importar o exportar datos desde y hacia cualquier sistema externo como MySQL, HDFS y sistema de archivos
mediante un clúster de Kafka. Este tutorial le guiará por el uso del marco Kafka Connect con Event Hubs.
Este tutorial le guiará por la integración de Kafka Connect con un centro de eventos de Azure y la implementación
de conectores básicos FileStreamSource y FileStreamSink. Esta funcionalidad actualmente está en su versión
preliminar. Aunque estos conectores no están pensados para su uso en la producción, muestran un escenario de
un extremo a otro de Kafka Connect en el que Azure Event Hubs actúa como un agente de Kafka.
NOTE
Este ejemplo está disponible en GitHub.
Prerrequisitos
Para completar este tutorial, asegúrese de cumplir estos requisitos previos:
Suscripción de Azure. En caso de no tener ninguna, cree una cuenta gratuita.
Git
Linux/MacOS
Versión de Kafka (versión 1.1.1, Scala versión 2.11), disponible en kafka.apache.org
Lea el artículo de introducción Event Hubs para Apache Kafka.
rest.advertised.host.name=connect
offset.flush.interval.ms=10000
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
producer.security.protocol=SASL_SSL
producer.sasl.mechanism=PLAIN
producer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
consumer.security.protocol=SASL_SSL
consumer.sasl.mechanism=PLAIN
consumer.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";
NOTE
Kafka Connect utiliza Kafka AdminClient API para crear temas automáticamente con configuraciones recomendadas, incluida
la compactación. Una rápida comprobación del espacio de nombres en Azure Portal revela que los temas internos del
trabajo de Connect se han creado automáticamente.
Los temas internos de Kafka Connect deben usar compactación . El equipo de Event Hubs no es responsable de corregir
configuraciones incorrectas si los temas internos de Connect no están configurados correctamente.
Creación de conectores
Esta sección le guiará por la rotación de los conectores FileStreamSource y FileStreamSink.
1. Cree un directorio para archivos de datos de entrada y salida.
mkdir ~/connect-quickstart
2. Cree dos archivos: un archivo con datos de inicialización de los que lee el conector FileStreamSource y otro
en el que escribe nuestro conector FileStreamSink.
3. Cree un conector FileStreamSource. Asegúrese de reemplazar las llaves por la ruta de acceso del directorio
particular.
Debería ver el centro de eventos connect-quickstart en la instancia de Event Hubs después de ejecutar el
comando anterior.
4. Compruebe el estado del conector de origen.
curl -s http://localhost:8083/connectors/file-source/status
Si lo desea, puede usar Explorador de Service Bus para comprobar que los eventos han llegado al tema
connect-quickstart .
5. Cree un conector FileStreamSink. Una vez más, asegúrese de reemplazar las llaves por la ruta de acceso del
directorio particular.
7. Compruebe que se han replicado los datos entre los archivos y que son idénticos en ambos archivos.
Limpieza
Kafka Connect crea temas de centro de eventos para almacenar las configuraciones, los desplazamientos y los
estados que persisten incluso después de que el clúster de Connect se haya desactivado. A menos que se desee
esta persistencia, se recomienda eliminar estos temas. También puede eliminar el centro de eventos
connect-quickstart que se creó durante el transcurso de este tutorial.
Pasos siguientes
Para obtener más información acerca de Event Hubs para Kafka, consulte los artículos siguientes:
Reflejo de un agente de Kafka en un centro de eventos
Conexión de Apache Spark a un centro de eventos
Conexión de Apache Flink a un centro de eventos
Exploración de ejemplos en nuestro GitHub
Conexión de Akka Streams a un centro de eventos
Guía del desarrollador de Apache Kafka para Azure Event Hubs
Uso de Akka Streams con Event Hubs para Apache
Kafka
18/08/2020 • 5 minutes to read • Edit Online
En este tutorial se muestra cómo conectar Akka Streams a un centro de eventos sin cambiar los clientes del
protocolo o ejecutar sus propios clústeres. Azure Event Hubs para Kafka admite Apache Kafka versión 1.0.
En este tutorial, aprenderá a:
Creación de un espacio de nombres de Event Hubs
Clonación del proyecto de ejemplo
Ejecutar el productor de Akka Streams
Ejecutar el consumidor de Akka Streams
NOTE
Este ejemplo está disponible en GitHub.
Prerrequisitos
Para completar este tutorial, asegúrese de cumplir estos requisitos previos:
Lea el artículo Event Hubs para Apache Kafka.
Suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar.
Kit de desarrollo de Java (JDK) 1.8+
En Ubuntu, ejecute apt-get install default-jdk para instalar el JDK.
Asegúrese de establecer la variable de entorno JAVA_HOME para que apunte a la carpeta donde está
instalado el JDK.
Descargue e instale un archivo binario de Maven
En Ubuntu, puede ejecutar apt-get install maven para instalar Maven.
Git
En Ubuntu, puede ejecutar sudo apt-get install git para instalar Git.
akka.kafka.producer {
#Akka Kafka producer properties can be defined here
El productor ahora comienza a enviar eventos al centro de eventos en el tema test e imprimir los eventos a
stdout.
bootstrap.servers="{YOUR.EVENTHUBS.FQDN}:9093"
sasl.mechanism=PLAIN
security.protocol=SASL_SSL
sasl.jaas.config="org.apache.kafka.common.security.plain.PlainLoginModule required
username=\"$ConnectionString\" password=\"{YOUR.EVENTHUBS.CONNECTION.STRING}\";"
}
}
Si el centro de eventos tiene eventos (por ejemplo, si el productor también está ejecutándose), el consumidor
comienza a recibir eventos del tema test .
Consulte la Guía de Kafka de Akka Streams para más información sobre Akka Streams.
Pasos siguientes
Para obtener más información acerca de Event Hubs para Kafka, consulte los artículos siguientes:
Reflejo de un agente de Kafka en un centro de eventos
Conexión de Apache Spark a un centro de eventos
Conexión de Apache Flink a un centro de eventos
Integración de Kafka Connect con un centro de eventos
Exploración de ejemplos en nuestro GitHub
Guía del desarrollador de Apache Kafka para Azure Event Hubs
Preguntas más frecuentes: Event Hubs para Apache
Kafka
18/08/2020 • 4 minutes to read • Edit Online
En este artículo se responden algunas de las preguntas más frecuentes sobre la migración a Event Hubs de Apache
Kafka.
Pasos siguientes
Para obtener más información acerca de Event Hubs y Event Hubs para Kafka, consulte los artículos siguientes:
Guía del desarrollador de Apache Kafka para Event Hubs
Guía de migración de Kafka para Event Hubs
Guía de solución de problemas de Apache Kafka para Event Hubs
Configuraciones recomendadas
Métricas de Azure Event Hubs en Azure Monitor
18/08/2020 • 12 minutes to read • Edit Online
Las métricas de Event Hubs le permiten conocer el estado de los recursos de Event Hubs en su suscripción de
Azure. Con un amplio conjunto de datos de métricas, puede evaluar el estado general de los centros de eventos, no
solo en el nivel de espacio de nombres, sino también en el nivel de entidad. Estas estadísticas pueden ser
importantes, ya que le ayudan a supervisar el estado de los centros de eventos. Las métricas también pueden
ayudarle a solucionar problemas de causa principal sin necesidad de ponerse en contacto con el soporte técnico de
Azure.
Azure Monitor proporciona interfaces de usuario unificadas para la supervisión de distintos servicios de Azure.
Para obtener más información, vea Supervisión de Microsoft Azure y el ejemplo Retrieve Azure Monitor metrics
with .NET (Recuperación de métricas de Azure Monitor con .NET) en GitHub.
Acceso a la métrica
Azure Monitor proporciona varias maneras de tener acceso a las métricas. Puede acceder a las métricas desde
Azure Portal, o usar las API de Azure Monitor (REST y .NET) y soluciones de análisis como Log Analytics y Event
Hubs. Para más información, vea Datos de supervisión recopilados por Azure Monitor.
De forma predeterminada, las métricas están habilitadas y puede acceder a datos de los últimos 30 días. Si es
necesario conservar los datos durante un periodo mayor, se pueden archivar en una cuenta de Azure Storage. Esto
se configura en la configuración de diagnóstico de Azure Monitor.
También puede tener acceso a las métricas directamente a través del espacio de nombres. Para ello, seleccione el
espacio de nombres y, después, haga clic en Métricas . Para mostrar las métricas filtradas al ámbito del centro de
eventos, seleccione el centro de eventos y, después, haga clic en Métricas .
Para ver métricas que admitan las dimensiones, debe filtrar por el valor de la dimensión que desee como se
muestra en el siguiente ejemplo:
Facturación
Actualmente, el uso de métricas en Azure Monitor es gratuito. Sin embargo, si usa otras soluciones que ingieren
datos de métricas, puede que se le facturen dichas soluciones. Por ejemplo, se le facturará por Azure Storage si
archiva datos de métricas en una cuenta de Azure Storage. También se le facturará por Azure si transmite datos de
métricas a registros de Azure Monitor para realizar análisis avanzados.
Las siguientes métricas ofrecen una visión general del estado de su servicio.
NOTE
Se están dejando de usar algunas métricas a medida que se mueven a otro nombre. Esto podría requerir que actualice las
referencias. Las métricas que se marquen con la palabra clave "en desuso" no se admitirán en el futuro.
Los valores de las métricas se envían a Azure Monitor cada minuto. La granularidad de tiempo define el intervalo
de tiempo para el que se presentan los valores de las métricas. El intervalo de tiempo compatible para todas las
métricas de Event Hubs es 1 minuto.
Solicitud de métricas
Cuenta el número de solicitudes de operaciones de datos y administración.
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Cuota de errores superada El número de solicitudes que superó la cuota disponible. Para
más información sobre las cuotas de Event Hubs, vea este
artículo.
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Métricas de procesamiento
N O M B RE DE L A M ÉT RIC A DESC RIP C IÓ N
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Métricas de mensaje
N O M B RE DE L A M ÉT RIC A DESC RIP C IÓ N
N O M B RE DE L A M ÉT RIC A DESC RIP C IÓ N
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: bytes
Tipo de agregación: total
Dimensión: EntityName
Unidad: bytes
Tipo de agregación: total
Dimensión: EntityName
Métricas de conexión
N O M B RE DE L A M ÉT RIC A DESC RIP C IÓ N
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Capture el trabajo pendiente El número de bytes que se aún se tiene que capturar en el
destino elegido.
Unidad: bytes
Tipo de agregación: total
Dimensión: EntityName
Unidad: recuento
Tipo de agregación: total
Dimensión: EntityName
Unidad: bytes
Tipo de agregación: total
Dimensión: EntityName
Dimensiones de métricas
Azure Event Hubs admite las siguientes dimensiones para las métricas de Azure Monitor. La adición de
dimensiones a las métricas es opcional. Si no agrega dimensiones, las métricas se especifican en el nivel de espacio
de nombres.
Registros de diagnóstico : los registros de diagnóstico proporcionan información más completa sobre
las operaciones y acciones realizadas en el espacio de nombres mediante la API o mediante clientes de
administración en el SDK de lenguaje.
En la sección siguiente se muestra cómo habilitar los registros de diagnóstico para un espacio de nombres
de Event Hubs.
Registros de errores de usuario de Kafka Capturan información sobre las API de Kafka llamadas en
Event Hubs.
Evento de conexión de red virtual de Event Hubs Captura información sobre las direcciones IP y las redes
virtuales que envían tráfico a Event Hubs.
Registros de usuario de claves administradas por el cliente Capturan las operaciones relacionadas con las claves
administradas por el cliente.
Todos los registros se almacenan en el formato de notación de objetos JavaScript (JSON). Cada entrada tiene
campos de cadena que usan el formato descrito en las secciones siguientes.
N O M B RE DESC RIP C IÓ N
category ArchiveLogs
{
"TaskName": "EventHubArchiveUserError",
"ActivityId": "000000000-0000-0000-0000-0000000000000",
"trackingId": "0000000-0000-0000-0000-00000000000000000",
"resourceId": "/SUBSCRIPTIONS/000000000-0000-0000-0000-0000000000000/RESOURCEGROUPS/<Resource Group
Name>/PROVIDERS/MICROSOFT.EVENTHUB/NAMESPACES/<Event Hubs Namespace Name>",
"eventHub": "<Event Hub full name>",
"partitionId": "1",
"archiveStep": "ArchiveFlushWriter",
"startTime": "9/22/2016 5:11:21 AM",
"failures": 3,
"durationInSeconds": 360,
"message": "Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (404) Not
Found. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.\r\n at
Microsoft.WindowsAzure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException[T]
(HttpStatusCode expectedStatusCode, HttpStatusCode actualStatusCode, T retVal, StorageCommandBase`1 cmd,
Exception ex)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.<PutBlockImpl>b__3e(RESTCommand`1
cmd, HttpWebResponse resp, Exception ex, OperationContext ctx)\r\n at
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndGetResponse[T](IAsyncResult getResponseResult)\r\n
--- End of inner exception stack trace ---\r\n at
Microsoft.WindowsAzure.Storage.Core.Util.StorageAsyncResult`1.End()\r\n at
Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.
<CreateCallbackVoid>b__3(IAsyncResult ar)\r\n--- End of stack trace from previous location where exception was
thrown ---\r\n at System.",
"category": "ArchiveLogs"
}
N O M B RE DESC RIP C IÓ N
Category OperationalLogs
Example:
{
"ActivityId": "00000000-0000-0000-0000-00000000000000",
"EventName": "Create EventHub",
"resourceId": "/SUBSCRIPTIONS/00000000-0000-0000-0000-0000000000000/RESOURCEGROUPS/<Resource Group
Name>/PROVIDERS/MICROSOFT.EVENTHUB/NAMESPACES/<Event Hubs namespace name>",
"SubscriptionId": "000000000-0000-0000-0000-000000000000",
"EventTimeString": "9/28/2016 8:40:06 PM +00:00",
"EventProperties": "{\"SubscriptionId\":\"0000000000-0000-0000-0000-000000000000\",\"Namespace\":\"
<Namespace Name>\",\"Via\":\"https://<Namespace
Name>.servicebus.windows.net/f8096791adb448579ee83d30e006a13e/?api-version=2016-
07\",\"TrackingId\":\"5ee74c9e-72b5-4e98-97c4-08a62e56e221_G1\"}",
"Status": "Succeeded",
"Caller": "ServiceBus Client",
"category": "OperationalLogs"
}
N O M B RE DESC RIP C IÓ N
{
"TrackingId": "fb1b3676-bb2d-4b17-85b7-be1c7aa1967e",
"Message": "Scaled-up EventHub TUs (UpdateStartTimeUTC: 5/13/2020 7:48:36 AM, PreviousValue: 1,
UpdatedThroughputUnitValue: 2, AutoScaleReason: 'IncomingMessagesPerSecond reached 2170')",
"ResourceId": "/subscriptions/0000000-0000-0000-0000-
000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name"
}
N O M B RE DESC RIP C IÓ N
Ejemplo
{
"RequestId": "FE01001A89E30B020000000304620E2A_KafkaExampleConsumer#0",
"Operation": "Join.Start",
"ClientId": "KafkaExampleConsumer#0",
"Message": "Start join group for new member namespace-name:c:$default:I:KafkaExampleConsumer#0-
cc40856f7f3c4607915a571efe994e82, current group size: 0, API version: 2, session timeout: 10000ms, rebalance
timeout: 300000ms.",
"SubscriptionId": "0000000-0000-0000-0000-000000000000",
"NamespaceName": "namespace-name",
"ResourceId": "/subscriptions/0000000-0000-0000-0000-
000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
"Category": "KafkaCoordinatorLogs"
}
N O M B RE DESC RIP C IÓ N
N O M B RE DESC RIP C IÓ N
Ejemplo
{
"SubscriptionId": "0000000-0000-0000-0000-000000000000",
"NamespaceName": "namespace-name",
"IPAddress": "1.2.3.4",
"Action": "Deny Connection",
"Reason": "IPAddress doesn't belong to a subnet with Service Endpoint enabled.",
"Count": "65",
"ResourceId": "/subscriptions/0000000-0000-0000-0000-
000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
"Category": "EventHubVNetConnectionEvent"
}
N O M B RE DESC RIP C IÓ N
Pasos siguientes
Introducción a Event Hubs
Ejemplos de Event Hubs
Introducción a Event Hubs
.NET Core
Java
Python
JavaScript
Envío de datos de Windows Azure Diagnostics
Extension a Azure Event Hubs
18/08/2020 • 7 minutes to read • Edit Online
Azure Diagnostics Extension es un agente de Azure Monitor que recopila datos de supervisión del sistema
operativo invitado y de las cargas de trabajo de las máquinas virtuales de Azure y de otros recursos de proceso. En
este artículo, se explica cómo puede enviar datos desde Windows Azure Diagnostic Extension (WAD) a Azure Event
Hubs para reenviarlos después fuera de Azure.
Datos admitidos
Los datos recopilados del sistema operativo invitado que pueden enviarse a Event Hubs son los siguientes. Otros
orígenes de datos recopilados por WAD, como los volcados de memoria y los registros de IIS, no se pueden enviar
a Event Hubs.
Eventos de Seguimiento de eventos para Windows (ETW)
Contadores de rendimiento
Registros de eventos de Windows, incluidos los registros de aplicaciones en el registro de eventos de Windows
Registros de infraestructura de diagnóstico de Azure
Requisitos previos
Windows Diagnostics Extension 1.6 o versiones posteriores. Consulte el historial de versiones en Historial y
versiones de esquemas de configuración de Azure Diagnostics Extension y los recursos admitidos en la
introducción a Azure Diagnostics Extension.
Siempre debe aprovisionarse un espacio de nombres de Event Hubs. Consulte la introducción a Event Hubs para
más información.
Esquema de configuración
Consulte las diferentes opciones para habilitar y configurar Diagnostics Extension en Instalación y configuración de
Windows Azure Diagnostics Extension (WAD) y una referencia del esquema de configuración en Esquema de
configuración de Azure Diagnostics. De aquí hasta el final del artículo, se describe cómo se utiliza esta
configuración para enviar datos a un centro de eventos.
Azure Diagnostics siempre envía registros y métricas a una cuenta de Azure Storage. Puede configurar uno o varios
receptores de datos para enviar datos a otros destinos. Cada receptor de datos se define en el elemento
SinksConfig de la configuración pública con información confidencial en la configuración privada. Esta
configuración de los centros de eventos utiliza los valores de la tabla siguiente.
A continuación, se incluyen ejemplos de la configuración pública y privada. Se trata de una configuración mínima
con un solo contador de rendimiento y un solo registro de eventos que ilustra cómo se configura y utiliza el
receptor de datos del centro de eventos. Puede ver un ejemplo más complejo en Esquema de configuración de
Azure Diagnostics.
Configuración pública
{
"WadCfg": {
"DiagnosticMonitorConfiguration": {
"overallQuotaInMB": 5120,
"PerformanceCounters": {
"scheduledTransferPeriod": "PT1M",
"sinks": "myEventHub",
"PerformanceCounterConfiguration": [
{
"counterSpecifier": "\\Processor(_Total)\\% Processor Time",
"sampleRate": "PT3M"
}
]
},
"WindowsEventLog": {
"scheduledTransferPeriod": "PT1M",
"sinks": "myEventHub",
"DataSource": [
{
"name": "Application!*[System[(Level=1 or Level=2 or Level=3)]]"
}
]
}
},
"SinksConfig": {
"Sink": [
{
"name": "myEventHub",
"EventHub": {
"Url": "https://diags-mycompany-ns.servicebus.windows.net/diageventhub",
"SharedAccessKeyName": "SendRule"
}
}
]
}
},
"StorageAccount": "mystorageaccount",
}
Configuración privada
{
"storageAccountName": "mystorageaccount",
"storageAccountKey": "{base64 encoded key}",
"storageAccountEndPoint": "https://core.windows.net",
"EventHub": {
"Url": "https://diags-mycompany-ns.servicebus.windows.net/diageventhub",
"SharedAccessKeyName": "SendRule",
"SharedAccessKey": "{base64 encoded key}"
}
}
Opciones de configuración
Para enviar datos a un receptor de datos, debe especificar el atributo sinks en el nodo del origen de datos. El lugar
en el que incluya el atributo sinks determinará el ámbito de la asignación. En el ejemplo siguiente, el atributo sinks
está definido en el nodo PerformanceCounters , lo que hará que todos los contadores de rendimiento
secundarios se envíen al centro de eventos.
"PerformanceCounters": {
"scheduledTransferPeriod": "PT1M",
"sinks": "MyEventHub",
"PerformanceCounterConfiguration": [
{
"counterSpecifier": "\\Processor(_Total)\\% Processor Time",
"sampleRate": "PT3M"
},
{
"counterSpecifier": "\\Memory\\Available MBytes",
"sampleRate": "PT3M"
},
{
"counterSpecifier": "\\Web Service(_Total)\\ISAPI Extension Requests/sec",
"sampleRate": "PT3M"
}
]
}
En el ejemplo siguiente, el atributo sinks se aplica directamente a tres contadores, por lo que solo se enviarán estos
contadores de rendimiento al centro de eventos.
"PerformanceCounters": {
"scheduledTransferPeriod": "PT1M",
"PerformanceCounterConfiguration": [
{
"counterSpecifier": "\\Processor(_Total)\\% Processor Time",
"sampleRate": "PT3M",
"sinks": "MyEventHub"
},
{
"counterSpecifier": "\\Memory\\Available MBytes",
"sampleRate": "PT3M"
},
{
"counterSpecifier": "\\Web Service(_Total)\\ISAPI Extension Requests/sec",
"sampleRate": "PT3M"
},
{
"counterSpecifier": "\\ASP.NET\\Requests Rejected",
"sampleRate": "PT3M",
"sinks": "MyEventHub"
},
{
"counterSpecifier": "\\ASP.NET\\Requests Queued",
"sampleRate": "PT3M",
"sinks": "MyEventHub"
}
]
}
Validación de la configuración
Puede utilizar diferentes métodos para comprobar que los datos se están enviando al centro de eventos. El método
más sencillo es utilizar una captura de Event Hubs, tal y como se describe en Captura de eventos a través de Azure
Event Hubs en Azure Blob Storage o Azure Data Lake Storage.
Pasos siguientes
Información general de Event Hubs
Creación de un centro de eventos
Preguntas más frecuentes sobre Event Hubs
Escalado vertical y automático de las unidades de
procesamiento de Azure Event Hubs
18/08/2020 • 6 minutes to read • Edit Online
Azure Event Hubs es una plataforma de streaming de datos muy escalable. Por lo tanto, el uso de Event Hubs
suele aumentar después de empezar a utilizar el servicio. Para esta utilización, es necesario incrementar las
unidades de procesamiento predeterminadas con el objetivo de escalar Event Hubs y controlar velocidades de
transferencia más elevadas. La característica de inflado automático de Event Hubs escala verticalmente y de
forma automática mediante el aumento del número de unidades de procesamiento para responder a las
necesidades de utilización. Al aumentar las unidades de rendimiento, se evitan escenarios de limitación en los
que nos encontramos con:
Velocidades de entrada de datos que superan las unidades de rendimiento establecidas.
Velocidades de solicitud de salida de datos que superan las unidades de rendimiento establecidas.
El servicio Event Hubs aumenta el rendimiento cuando la carga aumenta más allá del umbral mínimo, sin que se
produzca ningún problema de las solicitudes con errores de ServerBusy.
NOTE
Los espacios de nombres de Event Hubs de nivel Básico no admiten el inflado automático.
NOTE
Al aplicar la configuración de inflado automático para aumentar las unidades de procesamiento, el servicio Event Hubs
emite los registros de diagnóstico que le proporcionan información acerca de por qué y cuándo aumentó el rendimiento.
Para habilitar el registro de diagnóstico para un centro de eventos, seleccione configuración de diagnóstico en el
menú izquierdo de la página del centro de eventos en Azure Portal. Para más información, vea Configuración de registros
de diagnóstico de Azure Event Hubs.
Habilitación del inflado automático mediante una plantilla de Azure Resource Manager
Puede habilitar el inflado automático durante la implementación de una plantilla de Azure Resource Manager.
Por ejemplo, establezca la propiedad isAutoInflateEnabled en True , y maximumThroughputUnits en 10. Por
ejemplo:
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('namespaceName')]",
"type": "Microsoft.EventHub/Namespaces",
"location": "[variables('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"properties": {
"isAutoInflateEnabled": true,
"maximumThroughputUnits": 10
},
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('eventHubName')]",
"type": "EventHubs",
"dependsOn": [
"[concat('Microsoft.EventHub/namespaces/', parameters('namespaceName'))]"
],
"properties": {},
"resources": [
{
"apiVersion": "2017-04-01",
"name": "[parameters('consumerGroupName')]",
"type": "ConsumerGroups",
"dependsOn": [
"[parameters('eventHubName')]"
],
"properties": {}
}
]
}
]
}
]
Para ver la plantilla completa, consulte la plantilla Create Event Hubs namespace and enable inflate (Creación de
un espacio de nombres de Event Hubs y habilitación del inflado) en GitHub.
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Bibliotecas de administración de Event Hubs
18/08/2020 • 2 minutes to read • Edit Online
Puede usar las bibliotecas de administración de Azure Event Hubs para aprovisionar de forma dinámica las
entidades y los espacios de nombres de Event Hubs. Esta naturaleza dinámica posibilita escenarios complejos de
implementación y mensajería, lo que permite determinar mediante programación qué entidades aprovisionar. Estas
bibliotecas están actualmente disponibles para .NET.
Funcionalidad admitida
Creación, actualización y eliminación de espacios de nombres
Creación, actualización y eliminación de Event Hubs
Creación, actualización y eliminación de grupos de consumidores
Prerequisites
Para comenzar a usar las bibliotecas de administración de Event Hubs, debe autenticarse con Azure Active Directory
(AAD). AAD requiere que se autentique como una entidad de servicio que proporciona acceso a los recursos de
Azure. Para más información sobre cómo crear una entidad de servicio, consulte uno de los siguientes artículos:
Uso de Azure Portal para crear una aplicación de Active Directory y una entidad de servicio con acceso a los
recursos
Uso de Azure PowerShell para crear a una entidad de servicio para acceder a recursos
Uso de la CLI de Azure para crear a una entidad de servicio para acceder a recursos
Estos tutoriales le proporcionan valores para AppId (identificador de cliente), TenantId y ClientSecret (clave de
autenticación), que usan las bibliotecas de administración con fines de autenticación. Debe tener permisos de
Propietario en el grupo de recursos en el que desea realizar la ejecución.
Modelo de programación
El patrón para manipular los recursos de Event Hubs sigue un protocolo común:
1. Obtenga un token de AAD mediante la biblioteca Microsoft.IdentityModel.Clients.ActiveDirectory .
4. Ejecute la llamada.
Pasos siguientes
Ejemplo de administración de .NET
Referencia de Microsoft.Azure.Management.EventHub
Configuración de reglas de firewall de IP para un
espacio de nombres de Azure Event Hubs
18/08/2020 • 7 minutes to read • Edit Online
Los espacios de nombres de Azure Event Hubs son accesibles de forma predeterminada desde Internet, siempre
que la solicitud venga con una autenticación y una autorización válidas. Con el firewall de IP, puede restringirlo
aún más a solo un conjunto de direcciones o intervalos de direcciones IPv4 en notación CIDR (Enrutamiento de
interdominios sin clases).
Esta característica es útil en escenarios en los que Azure Event Hubs debe ser accesible únicamente desde ciertos
sitios conocidos. Las reglas de firewall permiten configurar reglas para aceptar el tráfico procedente de
direcciones IPv4 concretas. Por ejemplo, si usa Event Hubs con Azure ExpressRoute, puede crear una regla de
firewall para permitir el tráfico procedente única y exclusivamente de las direcciones IP de la infraestructura
local.
WARNING
La habilitación del filtrado de IP puede evitar que otros servicios de Azure interactúen con Event Hubs.
Los servicios de confianza de Microsoft no se admiten cuando se implementan instancias de Virtual Network.
Estos son los escenarios comunes de Azure que no funcionan con instancias de Virtual Network (tenga en cuenta que la
lista NO está completa).
Azure Stream Analytics
Enrutamientos de Azure IoT Hub
Azure IoT Device Explorer
Los siguientes servicios de Microsoft deben estar en una red virtual
Azure Web Apps
Azure Functions
Reglas de firewall de IP
Las reglas de firewall de IP se aplican en el nivel del espacio de nombres de Event Hubs. Por lo tanto, las reglas
se aplican a todas las conexiones de clientes que usan cualquier protocolo admitido. Cualquier intento de
conexión desde una dirección IP que no coincida con una regla IP admitida en el espacio de nombres de Event
Hubs se rechaza como no autorizado. La respuesta no menciona la regla IP. Las reglas de filtro IP se aplican en
orden y la primera regla que coincida con la dirección IP determina la acción de aceptar o rechazar.
WARNING
Si elige la opción Redes seleccionadas y no especifica ninguna dirección IP o un intervalo de direcciones,
el servicio permitirá el tráfico desde todas las redes.
4. Seleccione Guardar en la barra de herramientas para guardar la configuración. Espere unos minutos
hasta que la confirmación se muestre en las notificaciones de Azure Portal.
La siguiente plantilla de Resource Manager permite agregar una regla de filtro de IP a un espacio de nombres de
Event Hubs.
Parámetros de plantilla:
ipMask es una única dirección IPv4 o un bloque de direcciones IP en la notación CIDR. Por ejemplo, en
notación CIDR 70.37.104.0/24 representa las 256 direcciones IPv4 de 70.37.104.0 a 70.37.104.255, donde 24
indica el número de bits de prefijo significativos para el intervalo.
NOTE
Si bien no hay reglas de denegación posibles, la plantilla de Azure Resource Manager tiene la acción predeterminada
establecida en "Permitir" , que no restringe las conexiones. Cuando se realizan las reglas de Virtual Network o de firewall,
es necesario cambiar el valor "defaultAction"
desde
"defaultAction": "Allow"
to
"defaultAction": "Deny"
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"eventhubNamespaceName": {
"type": "string",
"metadata": {
"description": "Name of the Event Hubs namespace"
}
},
"location": {
"type": "string",
"metadata": {
"description": "Location for Namespace"
}
}
},
"variables": {
"namespaceNetworkRuleSetName": "[concat(parameters('eventhubNamespaceName'), concat('/',
'default'))]",
},
"resources": [
{
"apiVersion": "2018-01-01-preview",
"name": "[parameters('eventhubNamespaceName')]",
"type": "Microsoft.EventHub/namespaces",
"location": "[parameters('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"properties": { }
},
{
"apiVersion": "2018-01-01-preview",
"name": "[variables('namespaceNetworkRuleSetName')]",
"type": "Microsoft.EventHub/namespaces/networkruleset",
"dependsOn": [
"[concat('Microsoft.EventHub/namespaces/', parameters('eventhubNamespaceName'))]"
],
"properties": {
"virtualNetworkRules": [<YOUR EXISTING VIRTUAL NETWORK RULES>],
"ipRules":
[
{
"ipMask":"10.1.1.1",
"action":"Allow"
},
{
"ipMask":"11.0.0.0/24",
"action":"Allow"
}
],
"trustedServiceAccessEnabled": false,
"defaultAction": "Deny"
}
}
],
"outputs": { }
}
Para implementar la plantilla, siga las instrucciones para Azure Resource Manager.
Pasos siguientes
Para restringir el acceso a Event Hubs a las redes virtuales de Azure, visite el siguiente vínculo:
Puntos de conexión de servicio de red virtual para Event Hubs
Permitir el acceso al espacio de nombres de Event
Hubs desde redes virtuales específicas
18/08/2020 • 12 minutes to read • Edit Online
La integración de Event Hubs con los puntos de conexión de servicio de red virtual (VNet) permite el acceso
seguro a las funcionalidades de mensajería desde cargas de trabajo tales como máquinas virtuales que están
enlazadas a redes virtuales, con una ruta de acceso del tráfico de red que está protegida en ambos extremos.
Una vez realizada la configuración para enlazarse con al menos un punto de conexión de servicio de subred de
red virtual, el espacio de nombres respectivo de Event Hubs ya solo aceptará el tráfico procedente de redes
virtuales autorizadas. Desde la perspectiva de la red virtual, el enlace de un espacio de nombres de Event Hubs a
un punto de conexión de servicio configura un túnel de redes aislado desde la subred de la red virtual al servicio
de mensajería.
El resultado es una relación privada y aislada entre las cargas de trabajo enlazadas a la subred y el espacio de
nombres respectivo de Event Hubs, a pesar de que la dirección de red que se puede observar en el punto de
conexión de servicio de mensajería esté en un intervalo IP público. Hay una excepción a este comportamiento. Al
habilitar un punto de conexión de servicio, de forma predeterminada, se habilita la regla denyall en el firewall de
IP asociado a la red virtual. Puede agregar direcciones IP específicas en el firewall de IP para habilitar el acceso al
punto de conexión público del centro de eventos.
WARNING
La implementación de la integración de instancias de Virtual Network puede evitar que otros servicios de Azure interactúen
con Event Hubs.
Los servicios de confianza de Microsoft no se admiten cuando se implementan instancias de Virtual Network.
Estos son los escenarios comunes de Azure que no funcionan con instancias de Virtual Network (tenga en cuenta que la
lista NO está completa).
Azure Stream Analytics
Enrutamientos de Azure IoT Hub
Azure IoT Device Explorer
Los siguientes servicios de Microsoft deben estar en una red virtual
Azure Web Apps
Azure Functions
Azure Monitor (configuración de diagnósticos)
IMPORTANT
Las redes virtuales se admiten en los niveles estándar y dedicado de Event Hubs. No se admiten en el nivel básico .
NOTE
La pestaña Redes solo se muestra para espacios de nombres estándar o dedicados .
De forma predeterminada, está seleccionada la opción Redes seleccionadas . Si no especifica una regla
de firewall de IP ni agrega una red virtual en esta página, se podrá acceder al espacio de nombres desde
todas las redes, incluida la red pública de Internet (mediante la clave de acceso).
Si selecciona la opción Todas las redes , el centro de eventos aceptará conexiones procedentes de
cualquier dirección IP (mediante la tecla de acceso). Esta configuración equivale a una regla que acepta el
intervalo de direcciones IP 0.0.0.0/0.
3. Para restringir el acceso a redes específicas, seleccione la opción Selected Networks (Redes
seleccionadas) en la parte superior de la página si aún no está seleccionada.
4. En la sección Red vir tual de la página, seleccione +Agregar red vir tual existente *. Seleccione +
Crear una red vir tual nueva si quiere crear una nueva red virtual.
5. En la lista de redes virtuales, seleccione la red virtual y después elija la subred . Debe habilitar el punto de
conexión de servicio antes de agregar la red virtual a la lista. Si no está habilitado el punto de conexión de
servicio, el portal le pedirá que lo habilite.
6. Debería ver el siguiente mensaje correcto después de habilitar el punto de conexión de servicio para la
subred para Microsoft.EventHub . Seleccione Agregar en la parte inferior de la página para agregar la
red.
NOTE
Si no puede habilitar el punto de conexión de servicio, puede ignorar el punto de conexión de servicio de red virtual
que falta mediante la plantilla de Resource Manager. Esta funcionalidad no está disponible en Azure Portal.
7. Seleccione Guardar en la barra de herramientas para guardar la configuración. Espere unos minutos hasta
que la confirmación se muestre en las notificaciones de Azure Portal.
NOTE
Para restringir el acceso a intervalos o direcciones concretos, consulte Permitir el acceso desde intervalos o
direcciones IP específicos.
NOTE
Si bien no hay reglas de denegación posibles, la plantilla de Azure Resource Manager tiene la acción predeterminada
establecida en "Permitir" , que no restringe las conexiones. Cuando se realizan las reglas de Virtual Network o de firewall,
es necesario cambiar el valor "defaultAction"
desde
"defaultAction": "Allow"
to
"defaultAction": "Deny"
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"eventhubNamespaceName": {
"type": "string",
"metadata": {
"description": "Name of the Event Hubs namespace"
}
},
"virtualNetworkName": {
"type": "string",
"metadata": {
"description": "Name of the Virtual Network Rule"
}
},
"subnetName": {
"type": "string",
"metadata": {
"description": "Name of the Virtual Network Sub Net"
}
},
"location": {
"type": "string",
"metadata": {
"metadata": {
"description": "Location for Namespace"
}
}
},
"variables": {
"namespaceNetworkRuleSetName": "[concat(parameters('eventhubNamespaceName'), concat('/', 'default'))]",
"subNetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets/',
parameters('virtualNetworkName'), parameters('subnetName'))]"
},
"resources": [
{
"apiVersion": "2018-01-01-preview",
"name": "[parameters('eventhubNamespaceName')]",
"type": "Microsoft.EventHub/namespaces",
"location": "[parameters('location')]",
"sku": {
"name": "Standard",
"tier": "Standard"
},
"properties": { }
},
{
"apiVersion": "2017-09-01",
"name": "[parameters('virtualNetworkName')]",
"location": "[parameters('location')]",
"type": "Microsoft.Network/virtualNetworks",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/23"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "10.0.0.0/23",
"serviceEndpoints": [
{
"service": "Microsoft.EventHub"
}
]
}
}
]
}
},
{
"apiVersion": "2018-01-01-preview",
"name": "[variables('namespaceNetworkRuleSetName')]",
"type": "Microsoft.EventHub/namespaces/networkruleset",
"dependsOn": [
"[concat('Microsoft.EventHub/namespaces/', parameters('eventhubNamespaceName'))]"
],
"properties": {
"virtualNetworkRules":
[
{
"subnet": {
"id": "[variables('subNetId')]"
},
"ignoreMissingVnetServiceEndpoint": false
}
],
"ipRules":[<YOUR EXISTING IP RULES>],
"trustedServiceAccessEnabled": false,
"defaultAction": "Deny"
}
}
],
"outputs": { }
}
Para implementar la plantilla, siga las instrucciones para Azure Resource Manager.
Pasos siguientes
Para obtener más información acerca de las redes virtuales, consulte los siguientes vínculos:
Punto de conexión de servicio de red virtual de Azure
Filtrado de IP de Azure Event Hubs
Permiso para acceder a los espacios de nombres de
Azure Event Hubs a través de puntos de conexión
privados
18/08/2020 • 18 minutes to read • Edit Online
Azure Private Link le permite acceder a los servicios de Azure (por ejemplo, Azure Event Hubs, Azure Storage y
Azure Cosmos DB) y a los servicios de asociados o clientes hospedados de Azure mediante un punto de
conexión privado de la red virtual.
Un punto de conexión privado es una interfaz de red que le conecta de forma privada y segura a un servicio con
la tecnología de Azure Private Link. El punto de conexión privado usa una dirección IP privada de la red virtual
para incorporar el servicio de manera eficaz a su red virtual. Todo el tráfico dirigido al servicio se puede enrutar
mediante el punto de conexión privado, por lo que no se necesita ninguna puerta de enlace, dispositivos NAT,
conexiones de ExpressRoute o VPN ni direcciones IP públicas. El tráfico entre la red virtual y el servicio atraviesa la
red troncal de Microsoft, eliminando la exposición a la red pública de Internet. Puede conectarse a una instancia
de un recurso de Azure, lo que le otorga el nivel más alto de granularidad en el control de acceso.
Para más información, consulte ¿Qué es Azure Private Link?
IMPORTANT
Esta característica se admite en los niveles tanto estándar como dedicado .
WARNING
La habilitación de los puntos de conexión privados puede evitar que otros servicios de Azure interactúen con Event Hubs.
Los servicios de confianza de Microsoft no se admiten cuando se usan instancias de Virtual Network.
Estos son los escenarios comunes de Azure que no funcionan con instancias de Virtual Network (tenga en cuenta que la
lista NO está completa).
Azure Stream Analytics
Enrutamientos de Azure IoT Hub
Azure IoT Device Explorer
Los siguientes servicios de Microsoft deben estar en una red virtual
Azure Web Apps
Azure Functions
NOTE
La pestaña Redes solo se muestra para espacios de nombres estándar o dedicados .
NOTE
De forma predeterminada, está seleccionada la opción Redes seleccionadas . Si no especifica una regla de firewall
de IP o agrega una red virtual, se puede acceder al espacio de nombres a través de la red pública de Internet.
b. Si selecciona Conéctese a un recurso de Azure por identificador de recurso o alias. , siga estos
pasos:
a. Escriba el identificador de recurso o alias . Puede ser el identificador de recurso o el alias
que alguien haya compartido con usted. La forma más fácil de obtener el identificador de
recurso es desplazarse hasta el espacio de nombres de Event Hubs de Azure Portal y copiar la
parte de URI a partir de /subscriptions/ . Vea la imagen siguiente como ejemplo.
b. En Subrecurso de destino , escriba espacio de nombres . Este es el tipo de subrecurso al
que puede acceder el punto de conexión privado.
c. (Opcional) Escriba un mensaje de solicitud . El propietario del recurso ve este mensaje
mientras administra la conexión del punto de conexión privado.
d. Después, seleccione Next (Siguiente): Configuración > situado en la parte inferior de la
página.
9. En la página Configuración , seleccione la subred de una red virtual en la que desee implementar el punto
de conexión privado.
a. Seleccione una red vir tual . En la lista desplegable, solo se muestran las redes virtuales de la
suscripción y la ubicación seleccionadas actualmente.
b. Seleccione una subred de la red virtual que seleccionó.
c. Seleccione Siguiente: Etiquetas > situado en la parte inferior de la página.
10. En la página Etiquetas , cree cualquier etiqueta (nombres y valores) que desee asociar al recurso de punto
de conexión privado. Después, en la parte inferior de la página, seleccione el botón Revisar y crear .
11. En Revisar y crear , revise toda la configuración y seleccione Crear para crear el punto de conexión
privado.
12. Confirme que la conexión de punto de conexión privado que ha creado aparece en la lista de puntos de
conexión. En este ejemplo, el punto de conexión privado se aprueba automáticamente porque se conectó a
un recurso de Azure de su directorio y tiene permisos suficientes.
Incorporación de un punto de conexión privado mediante PowerShell
En el ejemplo siguiente se muestra cómo usar Azure PowerShell para crear una conexión de punto de conexión
privado. No crea un clúster dedicado. Siga los pasos de este artículo para crear un clúster de Event Hubs
dedicado.
ESTA DO DE P UN TO DE C O N EXIÓ N
P RIVA DO DEL C O N SUM IDO R DEL
A C C IÓ N DEL SERVIC IO SERVIC IO DESC RIP C IÓ N
nslookup <event-hubs-namespace-name>.servicebus.windows.net
Non-authoritative answer:
Name: <event-hubs-namespace-name>.privatelink.servicebus.windows.net
Address: 10.0.0.4 (private IP address associated with the private endpoint)
Aliases: <event-hubs-namespace-name>.servicebus.windows.net
Pasos siguientes
Más información sobre Azure Private Link.
Más información acerca de Azure Event Hubs
Configuración de claves administradas por el cliente
para cifrar datos en reposo de Azure Event Hubs
mediante Azure Portal
18/08/2020 • 20 minutes to read • Edit Online
Azure Event Hubs proporciona cifrado de datos en reposo con Azure Storage Service Encryption (Azure SSE). Event
Hubs se basa en Azure Storage para almacenar los datos y, de forma predeterminada, todos los datos que se
almacenan con Azure Storage se cifran mediante claves administradas por Microsoft.
Información general
Azure Event Hubs ahora admite la opción de cifrado de datos en reposo con claves administradas por Microsoft o
claves administradas por el cliente (Bring Your Own Key – BYOK). Esta característica permite crear, rotar, deshabilitar
y revocar el acceso a las claves administradas por el cliente que se usan para cifrar datos en reposo de Azure Event
Hubs.
La habilitación de la característica BYOK es un proceso que solo hay que configurar una vez en el espacio de
nombres.
NOTE
La funcionalidad BYOK es compatible con los clústeres dedicados de un solo inquilino de Event Hubs. No se puede habilitar
para espacios de nombres de Event Hubs estándar.
Puede usar Azure Key Vault para administrar las claves y auditar su uso. Puede crear sus propias claves y
almacenarlas en un almacén de claves, o puede usar las API de Azure Key Vault para generarlas. Para obtener más
información sobre Azure Key Vault, consulte ¿Qué es Azure Key Vault?
En este artículo se muestra cómo configurar un almacén de claves con claves administradas del cliente mediante
Azure Portal. Para obtener información sobre cómo crear un almacén de claves mediante Azure Portal, consulte
Inicio rápido: Establecimiento y recuperación de un secreto de Azure Key Vault mediante Azure Portal.
IMPORTANT
El uso de claves administradas por el cliente con Azure Event Hubs requiere que el almacén de claves tenga configuradas dos
propiedades obligatorias. Son las siguientes: Eliminación temporal y No purgar . Estas propiedades están habilitadas de
manera predeterminada cuando crea un nuevo almacén de claves en Azure Portal. Sin embargo, si tiene que habilitar estas
propiedades en un almacén de claves existente, deberá usar PowerShell o la CLI de Azure.
3. Para agregar la protección de purgas a un almacén existente (que ya tenga habilitada la eliminación
temporal), use el comando az keyvault update.
c. Ahora puede seleccionar esta clave para asociarla con el espacio de nombres de Event Hubs para el
cifrado en la lista desplegable.
d. Rellene los detalles de la clave y haga clic en Seleccionar . Esto habilitará el cifrado de datos en
reposo en el espacio de nombres con una clave administrada por el cliente.
N O M B RE DESC RIP C IÓ N
{
"TaskName": "CustomerManagedKeyUserLog",
"ActivityId": "11111111-1111-1111-1111-111111111111",
"category": "error"
"resourceId": "/SUBSCRIPTIONS/11111111-1111-1111-1111-11111111111/RESOURCEGROUPS/DEFAULT-EVENTHUB-
CENTRALUS/PROVIDERS/MICROSOFT.EVENTHUB/NAMESPACES/FBETTATI-OPERA-EVENTHUB",
"keyVault": "https://mykeyvault.vault-int.azure-int.net",
"key": "mykey",
"version": "1111111111111111111111111111111",
"operation": "wrapKey",
"code": "404",
"message": "Key not found: ehbyok0/111111111111111111111111111111",
}
{
"TaskName": "CustomerManagedKeyUserLog",
"ActivityId": "11111111111111-1111-1111-1111111111111",
"category": "info"
"resourceId": "/SUBSCRIPTIONS/111111111-1111-1111-1111-11111111111/RESOURCEGROUPS/DEFAULT-EVENTHUB-
CENTRALUS/PROVIDERS/MICROSOFT.EVENTHUB/NAMESPACES/FBETTATI-OPERA-EVENTHUB",
"keyVault": "https://mykeyvault.vault-int.azure-int.net",
"key": "mykey",
"version": "111111111111111111111111111111",
"operation": "disable" | "restore",
"code": "",
"message": "",
}
NOTE
Reemplace los siguientes valores:
<EventHubsClusterName> : nombre del clúster de Event Hubs.
<EventHubsNamespaceName> : nombre del espacio de nombres de Event Hubs.
<Location> : ubicación del espacio de nombres de Event Hubs.
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion":"1.0.0.0",
"parameters":{
"clusterName":{
"value":"<EventHubsClusterName>"
},
"namespaceName":{
"value":"<EventHubsNamespaceName>"
},
"location":{
"value":"<Location>"
}
}
}
3. Ejecute el siguiente comando de PowerShell para implementar la plantilla y crear un espacio de nombres de
Event Hubs. A continuación, recupere el identificador del espacio de nombres de Event Hubs para usarlo
más adelante. Antes de ejecutar el comando, reemplace {MyRG} por el nombre del grupo de recursos.
$EventHubNamespaceId = $outputs.Outputs["eventHubNamespaceId"].value
Concesión de acceso al almacén de claves a la identidad del espacio de nombres de Event Hubs
1. Ejecute el siguiente comando para crear un almacén de claves con las características protección de purga
y eliminación temporal habilitadas.
O BIEN
Ejecute el siguiente comando para actualizar un almacén de claves existente . Antes de ejecutar el
comando, especifique valores para los nombres de grupo de recursos y almacén de claves.
2. Establezca la directiva de acceso del almacén de claves para que la identidad administrada del espacio de
nombres de Event Hubs pueda acceder al valor de la clave del almacén de claves. Use el identificador del
espacio de nombres de Event Hubs de la sección anterior.
Cifrado de datos en el espacio de nombres de Event Hubs con la clave administrada por el cliente desde el
almacén de claves
Hasta el momento ha realizado los pasos siguientes:
1. Ha creado un espacio de nombres premium con una identidad administrada.
2. Cree un almacén de claves y conceda a la identidad administrada acceso al almacén de claves.
En este paso, actualizará el espacio de nombres de Event Hubs con la información del almacén de claves.
1. Cree un archivo JSON llamado CreateEventHubClusterAndNamespace.json con el contenido siguiente:
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"parameters":{
"clusterName":{
"type":"string",
"metadata":{
"description":"Name for the Event Hub cluster."
}
},
"namespaceName":{
"type":"string",
"metadata":{
"description":"Name for the Namespace to be created in cluster."
}
},
"location":{
"type":"string",
"defaultValue":"[resourceGroup().location]",
"metadata":{
"description":"Specifies the Azure location for all resources."
}
},
"keyVaultUri":{
"type":"string",
"metadata":{
"description":"URI of the KeyVault."
}
},
"keyName":{
"type":"string",
"metadata":{
"description":"KeyName."
}
}
},
"resources":[
{
"type":"Microsoft.EventHub/namespaces",
"apiVersion":"2018-01-01-preview",
"name":"[parameters('namespaceName')]",
"location":"[parameters('location')]",
"identity":{
"type":"SystemAssigned"
},
"sku":{
"sku":{
"name":"Standard",
"tier":"Standard",
"capacity":1
},
"properties":{
"isAutoInflateEnabled":false,
"maximumThroughputUnits":0,
"clusterArmId":"[resourceId('Microsoft.EventHub/clusters', parameters('clusterName'))]",
"encryption":{
"keySource":"Microsoft.KeyVault",
"keyVaultProperties":[
{
"keyName":"[parameters('keyName')]",
"keyVaultUri":"[parameters('keyVaultUri')]"
}
]
}
}
}
]
}
NOTE
Reemplace los siguientes valores:
<EventHubsClusterName> : nombre del clúster de Event Hubs.
<EventHubsNamespaceName> : nombre del espacio de nombres de Event Hubs.
<Location> : ubicación del espacio de nombres de Event Hubs.
<KeyVaultName> : nombre de su almacén de claves.
<KeyName> : nombre de la clave del almacén de claves.
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion":"1.0.0.0",
"parameters":{
"clusterName":{
"value":"<EventHubsClusterName>"
},
"namespaceName":{
"value":"<EventHubsNamespaceName>"
},
"location":{
"value":"<Location>"
},
"keyName":{
"value":"<KeyName>"
},
"keyVaultUri":{
"value":"https://<KeyVaultName>.vault.azure.net"
}
}
}
3. Ejecute el siguiente comando de PowerShell para implementar la plantilla de Resource Manager. Antes de
ejecutar el comando, reemplace {MyRG} por el nombre del grupo de recursos.
New-AzResourceGroupDeployment -Name UpdateEventHubNamespaceWithEncryption -ResourceGroupName {MyRG} -
TemplateFile ./UpdateEventHubClusterAndNamespace.json -TemplateParameterFile
./UpdateEventHubClusterAndNamespaceParams.json
Solución de problemas
Como procedimiento recomendado, habilite siempre los registros como se muestra en la sección anterior. Esto
ayuda a realizar el seguimiento de las actividades cuando está habilitado el cifrado de BYOK. También ayuda a
limitar los problemas.
A continuación se muestran los códigos de error comunes que buscar cuando está habilitado el cifrado de BYOK.
Pasos siguientes
Vea los artículos siguientes:
Información general de Event Hubs
Introducción a Azure Key Vault
Solución de problemas de conectividad: Azure Event
Hubs
18/08/2020 • 16 minutes to read • Edit Online
Hay varias razones por las que las aplicaciones cliente no pueden conectarse a un centro de eventos. Los
problemas de conectividad que experimenta pueden ser permanentes o transitorios. Si el problema sucede todo el
tiempo (permanente), puede que desee comprobar la cadena de conexión, la configuración del firewall de la
organización, la configuración del firewall de IP, la configuración de seguridad de la red (puntos de conexión de
servicio, puntos de conexión privados, etc.), etc. En el caso de problemas transitorios, la actualización a la versión
más reciente del SDK, la ejecución de comandos para comprobar los paquetes descartados y la obtención de
seguimientos de red pueden ayudar a solucionar los problemas.
En este artículo se proporcionan consejos sobre cómo solucionar problemas de conectividad con Azure Event
Hubs.
En Linux:
telnet <yournamespacename>.servicebus.windows.net 5671
nslookup <YourNamespaceName>.servicebus.windows.net
nslookup <yournamespace>.servicebus.windows.net
2. Anote el nombre de la sección respuesta no autoritativa , que se encuentra en uno de los siguientes
formatos:
<name>-s1.cloudapp.net
<name>-s2.cloudapp.net
<name>-s3.cloudapp.net
3. Ejecute nslookup para cada uno con los sufijos s1, s2 y s3 para obtener las direcciones IP de las tres
instancias que se ejecutan en tres zonas de disponibilidad.
Compruebe que se permite la etiqueta de servicio AzureEventGrid en los grupos de seguridad de red
Si la aplicación se ejecuta dentro de una subred y hay un grupo de seguridad de red asociado, confirme si se
permite la salida de Internet o la etiqueta de servicio AzureEventGrid. Vea Etiquetas de servicio de red virtual y
busque EventHub .
Comprobar si la aplicación debe ejecutarse en una subred específica de una red virtual
Confirme que la aplicación se está ejecutando en una subred de red virtual que tiene acceso al espacio de
nombres. Si no es así, ejecute la aplicación en la subred que tenga acceso al espacio de nombres o agregue la
dirección IP del equipo en el que se ejecuta la aplicación al firewall de IP.
Cuando se crea un punto de conexión de servicio de red virtual para un espacio de nombres del centro de eventos,
el espacio de nombres solamente acepta tráfico de la subred enlazada al punto de conexión de servicio. Hay una
excepción a este comportamiento. Puede agregar direcciones IP específicas en el firewall de IP para habilitar el
acceso al punto de conexión público del centro de eventos. Para obtener más información, vea Puntos de conexión
de servicio de red.
Comprobar la configuración del firewall de IP para su espacio de nombres
Compruebe que el firewall de IP no bloquea la dirección IP pública de la máquina en la que se ejecuta la aplicación.
De forma predeterminada, los espacios de nombres de Azure Event Hubs son accesibles desde Internet, siempre
que la solicitud venga con una autenticación y una autorización válidas. Con el firewall de IP, puede restringirlo aún
más a solo un conjunto de direcciones o intervalos de direcciones IPv4 en notación CIDR (Enrutamiento de
interdominios sin clases).
Las reglas de firewall de IP se aplican en el nivel del espacio de nombres de Event Hubs. Por lo tanto, las reglas se
aplican a todas las conexiones de clientes que usan cualquier protocolo admitido. Cualquier intento de conexión
desde una dirección IP que no coincida con una regla IP admitida en el espacio de nombres de Event Hubs se
rechaza como no autorizado. La respuesta no menciona la regla IP. Las reglas de filtro IP se aplican en orden y la
primera regla que coincida con la dirección IP determina la acción de aceptar o rechazar.
Para obtener más información, consulte Configuración de reglas de firewall de IP para un espacio de nombres de
Azure Event Hubs. Para comprobar si tiene problemas de filtrado de direcciones IP, red virtual o cadena de
certificados, consulte Solución de problemas relacionados con la red.
Buscar las direcciones IP bloqueadas por el firewall de IP
Habilite los registros de diagnóstico para eventos de conexión de red virtual de Event Hubs siguiendo las
instrucciones indicadas en Habilitar registros de diagnóstico. Verá la dirección IP para la conexión que se deniega.
{
"SubscriptionId": "0000000-0000-0000-0000-000000000000",
"NamespaceName": "namespace-name",
"IPAddress": "1.2.3.4",
"Action": "Deny Connection",
"Reason": "IPAddress doesn't belong to a subnet with Service Endpoint enabled.",
"Count": "65",
"ResourceId": "/subscriptions/0000000-0000-0000-0000-
000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
"Category": "EventHubVNetConnectionEvent"
}
Comprobar si se puede acceder al espacio de nombres con solo un punto de conexión privado
Si el espacio de nombres de Event Hubs está configurado para ser accesible únicamente a través de un punto de
conexión privado, confirme que la aplicación cliente accede al espacio de nombres a través del punto de conexión
privado.
El servicio Azure Private Link permite el acceso a Azure Event Hubs a través de un punto de conexión privado
en la red virtual. Un punto de conexión privado es una interfaz de red que le conecta de forma privada y segura a
un servicio con la tecnología de Azure Private Link. El punto de conexión privado usa una dirección IP privada de la
red virtual para incorporar el servicio de manera eficaz a su red virtual. Todo el tráfico dirigido al servicio se puede
enrutar mediante el punto de conexión privado, por lo que no se necesita ninguna puerta de enlace, dispositivos
NAT, conexiones de ExpressRoute o VPN ni direcciones IP públicas. El tráfico entre la red virtual y el servicio
atraviesa la red troncal de Microsoft, eliminando la exposición a la red pública de Internet. Puede conectarse a una
instancia de un recurso de Azure, lo que le otorga el nivel más alto de granularidad en el control de acceso.
Para obtener más información, consulte Configuración de puntos de conexión privados. Vea la sección Validación
de que la conexión del punto de conexión privado funciona para confirmar que se usa un punto de
conexión privado.
Solución de problemas relacionados con la red
Para solucionar problemas relacionados con la red con Event Hubs, siga estos pasos:
Desplácese a https://<yournamespacename>.servicebus.windows.net/ o use wget ir allí. Le ayudará a comprobar si
tiene problemas de cadena de certificados (lo más común al usar el SDK de Java), filtrado IP o red virtual.
Un ejemplo de mensaje correcto :
<feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Publicly Listed Services</title><subtitle
type="text">This is the list of publicly-listed services currently available.</subtitle><id>uuid:27fcd1e2-
3a99-44b1-8f1e-3e92b52f0171;id=30</id><updated>2019-12-27T13:11:47Z</updated><generator>Service Bus
1.1</generator></feed>
<Error>
<Code>400</Code>
<Detail>
Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:b786d4d1-cbaf-
47a8-a3d1-be689cda2a98_G22, SystemTracker:NoSystemTracker, Timestamp:2019-12-27T13:12:40
</Detail>
</Error>
Puede usar comandos equivalentes si utiliza otras herramientas como tnc , ping , etc.
Realice un seguimiento de red si los pasos anteriores no ayudan y analícelo con herramientas como Wireshark. Si
lo necesita, póngase en contacto con el soporte técnico de Microsoft.
Actualizaciones o reinicios del servicio
Pueden producirse problemas de conectividad transitorios debido a actualizaciones y reinicios del servicio back-
end. Cuando se producen, es posible que vea los síntomas siguientes:
Puede haber una caída en la llegada de mensajes o solicitudes entrantes.
El archivo de registro puede contener mensajes de error.
Puede que las aplicaciones se desconecten del servicio durante unos segundos.
Puede que las solicitudes se limiten momentáneamente.
Si el código de aplicación usa SDK, la directiva de reintento ya está integrada y activa. La aplicación se volverá a
conectar sin un impacto significativo en la aplicación o el flujo de trabajo. La detección de estos errores transitorios,
la interrupción y el posterior reintento de la llamada garantizará que el código sea resistente a estos problemas
transitorios.
Pasos siguientes
Vea los artículos siguientes:
Solución de problemas de autenticación y autorización
Solución de problemas de autenticación y
autorización: Azure Event Hubs
18/08/2020 • 5 minutes to read • Edit Online
Pasos siguientes
Vea los artículos siguientes:
Solución de problemas de conectividad
Guía de solución de problemas de Apache Kafka
para Event Hubs
18/08/2020 • 9 minutes to read • Edit Online
En este artículo se proporcionan sugerencias para la solución de problemas que pueden aparecer al usar Event
Hubs para Apache Kafka.
No se recibieron registros
Puede que vea que los consumidores no están obteniendo ningún registro y se están reequilibrando
constantemente. En este escenario, los consumidores no obtienen ningún registro y se reequilibran
constantemente. Cuando se produce no hay ninguna excepción o error, pero los registros de Kafka mostrarán que
los consumidores están atascados intentando volver a unirse al grupo y asignar las particiones. Las causas
principales pueden ser varias:
Asegúrese de que request.timeout.ms y session.timeout.ms tengan al menos los valores recomendados de
60000 y 30000 respectivamente. Si estos valores son demasiado bajos podrían provocar tiempos de expiración
de consumidor, que, a su vez, provocarían reequilibrios (lo que provocaría más tiempos de expiración, que
provocarían más reequilibrios, y así sucesivamente)
Si la configuración coincide con los valores recomendados y aun así sigue viendo un reequilibrio constante, no
dude en abrir una incidencia (no olvide incluir toda la configuración en la incidencia para que podamos
ayudarle a depurar).
UnknownServerException
Puede recibir un excepción UnknownServerException de las bibliotecas de cliente de Kafka que sea similar al
ejemplo siguiente:
Registre una incidencia con el servicio de soporte técnico de Microsoft. El registro en el nivel de depuración y las
marcas de tiempo de excepción en UTC son útiles para depurar el problema.
Otros problemas
Si ve problemas al usar Kafka en Event Hubs, compruebe los siguientes elementos.
Firewall que bloquea el tráfico : asegúrese de que el firewall no está bloqueando el puerto 9093 .
TopicAuthorizationException : las causas más comunes de esta excepción son:
Un error de escritura en la cadena de conexión del archivo de configuración, o
Un intento de uso de Event Hubs para Kafka en un espacio de nombres de nivel básico. La característica
Event Hubs para Kafka solo es compatible con los espacios de nombres de niveles Estándar y Dedicado.
La versión de Kafka no coincide : Event Hubs para ecosistemas de Kafka admite las versiones 1.0 y
posteriores de Kafka. Algunas aplicaciones que usan la versión 0.10 de Kafka y versiones posteriores pueden
funcionar ocasionalmente gracias a la compatibilidad con versiones anteriores del protocolo de Kafka, pero se
recomienda seriamente no usar versiones antiguas de la API. Las versiones 0.9 y anteriores de Kafka no
admiten los protocolos SASL necesarios y no se pueden conectar a Event Hubs.
Codificaciones extrañas en encabezados de AMQP al consumir con Kafka : al enviar eventos a un
centro de eventos a través de AMQP, los encabezados de carga de AMQP se serializan en la codificación de
AMQP. Los consumidores de Kafka no deserializan los encabezados de AMQP. Para leer los valores de
encabezado, descodifique manualmente los encabezados AMQP. Como alternativa, puede evitar el uso de
encabezados AMQP si sabe que va a consumir a través del protocolo Kafka. Para más información, consulte
este problema de GitHub.
Autenticación SASL : la obtención de un marco para cooperar con el protocolo de autenticación SASL que
requiere Event Hubs puede resultar más difícil de lo que parece. Vea si puede solucionar problemas
relacionados con la configuración mediante los recursos del marco en la autenticación SASL.
límites
Apache Kafka frente a Event Hubs Kafka. En su mayor parte, Event Hubs Kafka tienen los mismos valores
predeterminados, propiedades, códigos de error y comportamiento general que Apache Kafka. Las instancias en
las que difieren explícitamente (o donde Event Hubs impone un límite que Kafka no tiene) se enumeran a
continuación:
La longitud máxima de la propiedad group.id es 256 caracteres
El tamaño máximo de offset.metadata.max.bytes es 1024 bytes
Las confirmaciones de desplazamiento se limitan a 4 llamadas por segundo por partición con un tamaño de
registro interno máximo de 1 MB
Pasos siguientes
Para obtener más información acerca de Event Hubs y Event Hubs para Kafka, consulte los artículos siguientes:
Guía del desarrollador de Apache Kafka para Event Hubs
Guía de migración de Kafka para Event Hubs
Preguntas más frecuentes: Event Hubs para Apache Kafka
Configuraciones recomendadas
Excepciones de mensajería de Event Hubs: .NET
18/08/2020 • 14 minutes to read • Edit Online
En esta sección se enumeran las excepciones de .NET generadas por API de .NET Framework.
Categorías de excepciones
Las API de .NET de Event Hubs generan excepciones que pueden dividirse en las siguientes categorías, junto con la
acción asociada que puede realizar para intentar corregirlas:
Error de codificación de usuario:
System.ArgumentException
System.InvalidOperationException
System.OperationCanceledException
System.Runtime.Serialization.SerializationException
Acción general: intente corregir el código antes de continuar.
Error de instalación/configuración:
Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException
Microsoft.Azure.EventHubs.MessagingEntityNotFoundException
System.UnauthorizedAccessException
Acción general: revise la configuración y cámbiela si es necesario.
Excepciones transitorias:
Microsoft.ServiceBus.Messaging.MessagingException
Microsoft.ServiceBus.Messaging.ServerBusyException
Microsoft.Azure.EventHubs.ServerBusyException
Microsoft.ServiceBus.Messaging.MessagingCommunicationException
Acción general: intente realizar de nuevo la operación o informe a los usuarios.
Otras excepciones:
System.Transactions.TransactionException
System.TimeoutException
Microsoft.ServiceBus.Messaging.MessageLockLostException
Microsoft.ServiceBus.Messaging.SessionLockLostException
Acción general: es específica del tipo de excepción; consulte la tabla de la siguiente sección.
Tipos de excepciones
En la tabla siguiente se describen los tipos de excepción de mensajería, sus causas y las acciones sugeridas que
puede realizar.
Microsoft.Azure.EventHubs
MessagingEntityNotFoundEx
ception
MessagingEntityAlreadyExist Se intenta crear una entidad Elimine la entidad existente o El reintento no le será de
sException con un nombre que ya se elija un nombre diferente ayuda.
usa en otra entidad de ese para la entidad que quiere
espacio de nombres de crear.
servicio.
MessagingEntityDisabledExc Solicitud para realizar una Active la entidad. El reintento podría ser útil si
eption operación en tiempo de la entidad se activa mientras
ejecución en una entidad este se lleva a cabo.
deshabilitada.
QuotaExceededException
QuotaExceededException indica que se ha superado una cuota de una entidad específica.
Esta excepción suceder si ya ha abierto el número máximo de destinatarios (cinco) en un nivel de grupo por
consumidor.
Event Hubs
Event Hubs tiene un límite de 20 grupos de consumidores por Centro de eventos. Cuando intenta crear más, recibe
QuotaExceededException.
TimeoutException
TimeoutException indica que la operación iniciada por el usuario está superando el tiempo de espera.
Para Event Hubs, el tiempo de espera se especifica como parte de la cadena de conexión o a través de
ServiceBusConnectionStringBuilder. El propio mensaje de error puede variar, pero siempre contiene el valor de
tiempo de espera especificado para la operación actual.
Causas comunes
Hay dos causas comunes de este error: configuración incorrecta o un error de servicio transitorio.
Configuración incorrecta : es posible que el tiempo de espera de la operación sea demasiado breve para la
condición operativa. El valor predeterminado para el tiempo de espera de la operación en el SDK de cliente es
60 segundos. Compruebe si su código tiene el valor establecido en algo demasiado pequeño. La condición de la
red y el uso de CPU pueden afectar al tiempo que tarda en completarse una operación particular, por lo que el
tiempo de espera de esta no debe establecerse en un valor pequeño.
Error de ser vicio transitorio : a veces, el servicio Event Hubs puede experimentar retrasos en el
procesamiento de solicitudes; por ejemplo, durante períodos de tráfico elevado. En tales casos, puede reintentar
su operación después de un retraso hasta que la operación se realice correctamente. Si la misma operación aún
experimenta errores después de varios intentos, visite el sitio de estado del servicio de Azure para ver si hay
interrupciones del servicio conocidas.
ServerBusyException
Una excepción Microsoft.ServiceBus.Messaging.ServerBusyException o
Microsoft.Azure.EventHubs.ServerBusyException indica que un servidor está sobrecargado. Hay dos códigos de
error relevantes para esta excepción.
Código de error 50002
Este error puede producirse por uno de estos dos motivos:
La carga no se distribuye uniformemente entre todas las particiones del centro de eventos y una partición
ha alcanzado la limitación de unidades de rendimiento local.
Solución: revisar la estrategia de distribución de particiones o probar
EventHubClient.Send(eventDataWithOutPartitionKey) puede que le sirva de ayuda.
El espacio de nombres de Event Hubs no tiene suficientes unidades de rendimiento (puede comprobar la
pantalla Métrica en la ventana de espacio de nombres de Event Hubs en Azure Portal para confirmar). El
portal muestra información agregada (un minuto), pero el rendimiento se mide en tiempo real, por lo que
esto es solo una estimación.
Solución: aumentar las unidades de rendimiento en el espacio de nombres puede resultar útil. Puede hacer
esta operación en este portal, en la ventana Escala de la pantalla de espacio de nombres de Event Hubs. O
bien, puede usar el inflado automático.
Código de error 50001
Este error se produce raras veces. Se produce cuando el contenedor que ejecuta el código para su espacio de
nombres hace un uso bajo de la CPU: no más de unos pocos segundos antes de que comience el equilibrador de
carga de Event Hubs.
Solución: Límite a las llamadas al método GetRuntimeInformation. Azure Event Hubs admite hasta 50 llamadas
por segundo al método GetRuntimeInfo. Una vez que se alcanza el límite, puede recibir una excepción similar a
esta:
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Creación de un Centro de eventos
Preguntas más frecuentes sobre Event Hubs
Azure Event Hubs: excepciones de Resource Manager
18/08/2020 • 8 minutes to read • Edit Online
En este artículo se enumeran las excepciones generadas al interactuar con Azure Event Hubs mediante Azure
Resource Manager por medio de plantillas o llamadas directas.
IMPORTANT
Este documento se actualiza con frecuencia. Compruebe si hay actualizaciones.
En las secciones siguientes se proporcionan varias excepciones o errores que se exhiben mediante Azure Resource
Manager.
Internal Server Error None Error interno del Error interno del Vuelva a intentar la
servidor. servicio Event Hubs. operación con error. Si
la operación sigue
produciendo errores,
póngase en contacto
con el servicio de
soporte técnico.
Azure Event Hubs: SDK cliente
18/08/2020 • 2 minutes to read • Edit Online
En este artículo se proporciona la siguiente información sobre los SDK compatibles con Azure Event Hubs:
Ubicación de paquete que se puede usar en las aplicaciones
Ubicación de GitHub donde se puede encontrar código fuente, ejemplos, archivo Léame, registro de cambios,
problemas detectados y además notificar nuevos problemas
Vínculos a tutoriales de inicio rápido
SDK de cliente
En la siguiente sección se describen todos los clientes del runtime de Azure Event Hubs disponibles en este
momento. Aunque algunas de estas bibliotecas también incluyen funcionalidad de administración limitada, hay
bibliotecas específicas dedicadas a las operaciones de administración. El principal objetivo de estas bibliotecas es
enviar y recibir mensajes en un centro de eventos.
SDK de administración
En la tabla siguiente se listan todas las bibliotecas específicas de administración disponibles actualmente. Ninguna
de estas bibliotecas contiene operaciones de runtime; además, su único propósito es administrar entidades de
Event Hubs .
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Creación de un Centro de eventos
Preguntas más frecuentes sobre Event Hubs
Cuotas y límites de Azure Event Hubs
18/08/2020 • 4 minutes to read • Edit Online
En esta sección se describen las cuotas y los límites básicos en Azure Event Hubs.
En las tablas siguientes se enumeran las cuotas y los límites específicos de Azure Event Hubs. Para más
información sobre los precios de Event Hubs, consulte los precios de Event Hubs.
Los límites siguientes son comunes en los niveles básico y estándar.
L ÍM IT E Á M B ITO N OTA S VA L UE
C A RA C T ERÍST IC A L ÍM IT ES
Ancho de banda 20 CU
Grupos de consumidores Sin límite por CU, 1000 por centro de eventos
Capturar Se incluye
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Inflado automático de Event Hubs
Preguntas más frecuentes sobre Event Hubs
Configuraciones recomendadas para clientes de
Apache Kafka
18/08/2020 • 6 minutes to read • Edit Online
Estas son las configuraciones recomendadas para usar Azure Event Hubs desde las aplicaciones cliente de Apache
Kafka.
Notas adicionales
Consulte la siguiente tabla de escenarios de errores comunes relacionados con la configuración.
SÍN TO M A S P RO B L EM A SO L UC IÓ N
Excepciones de red con un alto ¿Usa el cliente de Java y el valor Consulte las configuraciones de Java
rendimiento de producción predeterminado de max.request.size? Es anteriores.
posible que las solicitudes sean
demasiado grandes.
Pasos siguientes
Consulte Suscripción de Azure y límites de servicio, cuotas y restricciones para obtener las cuotas y los límites de
todos los servicios de Azure.
Preguntas frecuentes sobre Event Hubs
18/08/2020 • 32 minutes to read • Edit Online
General
¿Qué es un espacio de nombres de Event Hubs?
Un espacio de nombres es un contenedor de temas de Event Hubs y Kafka. Proporciona un FQDN único. Un
espacio de nombres actúa como un contenedor de aplicaciones que puede alojar varios temas de Event Hubs
y Kafka.
¿Cuando crear un nuevo espacio de nombres o cuándo usar un espacio de nombres existente?
Las asignaciones de capacidad (unidades de procesamiento (TU)) se facturan según el espacio de nombres.
Un espacio de nombres también se asocia a una región.
Es posible que desee crear un nuevo espacio de nombres en lugar de usar uno existente en alguno de los
siguientes escenarios:
Necesita un centro de eventos asociado a una nueva región.
Necesita un centro de eventos asociado a otra suscripción.
Necesita un centro de eventos con una asignación de capacidad diferente (es decir, la capacidad necesaria
para el espacio de nombres con el centro de eventos agregado superaría el umbral de 40 TU y no sería
conveniente el clúster dedicado)
¿Cuál es la diferencia entre los niveles Basic y Standard de Event Hubs?
El nivel Estándar de Azure Event Hubs proporciona más características de las disponibles en el nivel Básico.
Estas son las características disponibles en el nivel Estándar:
Retención de eventos más prolongada
Más conexiones asíncronas, con un cargo por uso por encima del límite de más del número incluido
Más de un único grupo de consumidores
Capture
Integración de Kafka
Para más información sobre los planes de tarifa, incluido Event Hubs dedicado, vea los detalles de los precios
de Event Hubs.
¿Dónde está disponible Azure Event Hubs?
Azure Event Hubs está disponible en todas las regiones de Azure admitidas. Para obtener una lista, visite la
página Regiones de Azure.
¿Se puede usar una sola conexión AMQP para enviar y recibir en varios centros de eventos?
Sí, siempre y cuando todos los centros de eventos se encuentren en el mismo espacio de nombres.
¿Cuál es el período de retención máximo para eventos?
El nivel Event Hubs estándar admite actualmente un período de retención máximo de siete días. Event Hubs
no está concebido como un almacén de datos permanente. Los períodos de retención superiores a 24 horas
están pensados para escenarios en los que es útil volver a reproducir un flujo de eventos en los mismos
sistemas; por ejemplo, para entrenar o comprobar un nuevo modelo de aprendizaje automático con datos
existentes. Si necesita conservar los mensajes más de siete días, habilite Event Hubs Capture en el centro de
eventos para extraer los datos de este a la cuenta de almacenamiento o la cuenta del servicio Azure Data Lake
que prefiera. Al habilita Capture se le cobrará un cargo en función de las unidades de procesamiento
compradas.
Puede configurar el período de retención de los datos capturados en su cuenta de almacenamiento. La
característica de administración del ciclo de vida de Azure Storage ofrece una útil directiva basada en
reglas para las cuentas de uso general v2 y de Blob Storage. Use la directiva para realizar la transición de los
datos a los niveles de acceso adecuados o hacer que expiren al final de su ciclo de vida. Para más información,
consulte Administración del ciclo de vida de Azure Blob Storage.
¿Cómo puedo supervisar mi instancia de Event Hubs?
Event Hubs emite métricas exhaustivas que proporcionan el estado de los recursos a Azure Monitor. También
permite evaluar el estado general del servicio Event Hubs, no solo en el nivel de espacio de nombres, sino
también en el nivel de entidad. Obtenga información sobre la supervisión que se ofrece para Azure Event
Hubs.
¿Qué puertos es necesario abrir en el firewall?
Puede usar los siguientes protocolos con Azure Service Bus para enviar y recibir mensajes:
Advanced Message Queuing Protocol (AMQP)
HTTP
Apache Kafka
Consulte en la siguiente tabla los puertos de salida que se deben abrir para usar estos protocolos para
comunicarse con Azure Event Hubs.
nslookup <YourNamespaceName>.servicebus.windows.net
nslookup <yournamespace>.servicebus.windows.net
2. Anote el nombre de la sección respuesta no autoritativa , que se encuentra en uno de los siguientes
formatos:
<name>-s1.cloudapp.net
<name>-s2.cloudapp.net
<name>-s3.cloudapp.net
3. Ejecute nslookup para cada uno con los sufijos s1, s2 y s3 para obtener las direcciones IP de las tres
instancias que se ejecutan en tres zonas de disponibilidad.
¿Dónde puedo encontrar la IP de cliente que envía o recibe mensajes en mi espacio de nombres?
En primer lugar, habilite el filtrado de IP en el espacio de nombres.
A continuación, habilite los registros de diagnóstico para eventos de conexión de red virtual de Event Hubs
siguiendo las instrucciones indicadas en Habilitar registros de diagnóstico. Verá la dirección IP para la que se
deniega la conexión.
{
"SubscriptionId": "0000000-0000-0000-0000-000000000000",
"NamespaceName": "namespace-name",
"IPAddress": "1.2.3.4",
"Action": "Deny Connection",
"Reason": "IPAddress doesn't belong to a subnet with Service Endpoint enabled.",
"Count": "65",
"ResourceId": "/subscriptions/0000000-0000-0000-0000-
000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
"Category": "EventHubVNetConnectionEvent"
}
Unidades de procesamiento
¿Qué son las unidades de procesamiento de Event Hubs?
El rendimiento de Event Hubs define la cantidad de datos en megabytes o el número (en miles) de eventos de
1 KB que entran y salen a través de Event Hubs. Este rendimiento se mide en unidades de procesamiento (TU).
Compre TU antes de empezar a usar el servicio Event Hubs. Las TU de Event Hubs se pueden seleccionar
explícitamente mediante el portal o las plantillas de Resource Manager para Event Hubs.
¿Se aplican las unidades de procesamiento a todos los centros de eventos de un espacio de nombres?
Sí, las unidades de procesamiento (TU) se aplican a todos los centros de eventos de un espacio de nombres
de Event Hubs. Significa que las TU se compran en el nivel de espacio de nombres y se comparten entre los
centros de eventos de ese espacio de nombres. Cada TU da al espacio de nombres derecho a las siguientes
funcionalidades:
Hasta 1 MB por segundo de eventos de entrada (eventos enviados a un centro de eventos), pero no más
de 1000 eventos de entrada, operaciones de administración o llamadas a la API de control por segundo.
Hasta 2 MB por segundo de eventos de salida (eventos consumidos de un centro de eventos), pero no más
de 4096 eventos de salida.
Hasta 84 GB de almacenamiento de eventos (suficiente para el período de retención predeterminado de
24 horas).
¿Cómo se facturan las unidades de procesamiento?
Las unidades de procesamiento (TU) se facturan por hora. La facturación se basa en el número máximo de
unidades que se seleccionaron durante la hora en cuestión.
¿Cómo puedo optimizar el uso de las unidades de procesamiento?
Puede empezar con solo una unidad de procesamiento (TU) y activar el inflado automático. La función de
inflado automático le permite aumentar las TU a medida que incrementa la carga y el tráfico. También puede
establecer un límite superior en el número de TU.
¿Cómo funciona la característica de inflado automático de Event Hubs?
La función de inflado automático le permite escalar verticalmente las unidades de procesamiento (TU).
Significa que, para empezar, puede comprar un número bajo de TU y el inflado automático escalará
verticalmente las TU a medida que aumente la entrada. Le ofrece una opción rentable y el control total del
número de TU que se van a administrar. Esta característica permite solo escalar ver ticalmente y puede
controlar por completo la reducción vertical del número de TU mediante su actualización.
Es recomendable empezar con un número bajo de unidades de procesamiento (TU); por ejemplo, 2 TU. Si
prevé que el tráfico puede crecer hasta 15 TU, active la función de inflado automático en el espacio de
nombres y establezca el límite máximo en 15 TU. Ahora podrá aumentar automáticamente las TU a medida
que crezca el tráfico.
¿Hay algún costo asociado a la activación de la característica de inflado automático?
No hay ningún costo asociado con esta característica.
¿Cómo se aplican los límites de procesamiento?
Si el rendimiento total de entrada o la tasa total de eventos de entrada en todos centros de eventos de un
espacio de nombres superan las asignaciones de unidades de procesamiento agregado, los emisores quedan
sujetos a limitaciones y reciben errores que indican que se superó la cuota de entrada.
Si el rendimiento total de salida o la tasa total de eventos de salida en todos centros de eventos de un
espacio de nombres superan las asignaciones de unidades de procesamiento agregado, los receptores
quedan sujetos a limitaciones pero no se generan errores de limitación.
Las cuotas de entrada y de salida se aplican por separado, por lo que ningún remitente puede provocar que
se ralentice el consumo de eventos ni ningún receptor puede impedir que los eventos se envíen a un centro
de eventos.
¿Hay algún límite en el número de unidades de procesamiento (TU ) que se pueden reservar o seleccionar?
En una oferta multiempresa, las unidades de procesamiento pueden aumentar hasta 40 TU (se pueden
seleccionar hasta 20 TU en el portal y generar una incidencia de soporte técnico para elevarlas a 40 TU en el
mismo espacio de nombres). Más allá de 40 TU, Event Hubs ofrece el modelo basado en recursos o capacidad
denominado clústeres de Event Hubs dedicado . Los clústeres dedicados se venden en unidades de
capacidad (CU).
Clústeres dedicados
¿Qué son los clústeres de Event Hubs dedicado?
Los clústeres de Event Hubs dedicado ofrecen implementaciones de un único inquilino para los clientes con
los requisitos más exigentes. Esta oferta construye un clúster basado en la capacidad que no está limitado por
las unidades de procesamiento. Esto significa que podría utilizar el clúster para la ingesta y transmisión de los
datos tal y como indica el uso de CPU y memoria del clúster. Para obtener más información, consulte Event
Hubs Dedicated clusters (Clústeres de Event Hubs dedicado).
¿Qué me permite realizar una única unidad de capacidad?
Para un clúster dedicado, la cantidad que se puede ingerir y transmitir depende de varios factores, como los
productores, los consumidores, la velocidad a la que se ingiere y procesa, etc.
En la tabla siguiente se muestran los resultados del banco de pruebas que hemos obtenido durante nuestras
pruebas:
A N C H O DE M EN SA JES A N C H O DE
F O RM A DE REC EP TO R B A N DA DE DE B A N DA DE M EN SA JES TU
L A C A RGA ES EN T RA DA EN T RA DA SA L IDA DE SA L IDA TOTA L ES T U POR C U
Lotes de 2 400 MB/s 400 000 m 800 MB/s 800 000 m 400 TU 100 TU
100 x 1 KB ensajes/s ensajes/s
Lotes de 2 666 MB/s 66 600 me 1,33 GB/s 133 000 m 666 TU 166 TU
10 x 10 KB nsajes/s ensajes/s
Procedimientos recomendados
¿Cuántas particiones necesito?
El número de particiones se especifica en el momento de la creación y debe estar comprendido entre 2 y 32.
El número de particiones no es modificable, por lo que debería tener en cuenta el escalado a largo plazo a la
hora de configurar este número. Las particiones son un mecanismo de organización de datos relacionado con
el paralelismo de bajada necesario para consumir las aplicaciones. El número de particiones de un centro de
eventos está directamente relacionado con el número de lectores simultáneos que espera tener. Para más
información sobre las particiones, consulte Particiones.
Es posible que quiera establecer el valor lo más alto posible, que es 32, en el momento de la creación.
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. En el primer caso, tendrá que leer eventos en las 32 particiones.
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.
Event Hubs está diseñado para permitir un lector de partición única por grupo de consumidores. En la
mayoría de los casos de uso, el valor predeterminado de cuatro particiones es suficiente. Si desea escalar el
procesamiento de eventos, tal vez desee agregar particiones adicionales. No hay ningún límite de
procesamiento específico en una partición, pero el número total de unidades de procesamiento limita el
procesamiento agregado en el espacio de nombres. A medida que aumenta el número de unidades de
procesamiento en el espacio de nombres, puede que necesite particiones adicionales para permitir que los
lectores simultáneos logren su propio procesamiento máximo.
Pero si tiene un modelo en el que su aplicación tiene afinidad con una partición determinada, aumentar el
número de particiones puede que no suponga ventaja alguna. Para más información, vea Disponibilidad y
coherencia.
Precios
¿Dónde puedo encontrar más información sobre precios?
Para obtener una completa información sobre los precios de Event Hubs, consulte los detalles de precios de
Event Hubs.
¿Hay un cargo por retener eventos de Event Hubs durante más de 24 horas?
El nivel Event Hubs estándar permite períodos de retención de mensajes superiores a 24 horas, hasta un
máximo de siete días. Si el tamaño del número total de eventos almacenados supera la asignación de
almacenamiento para el número de unidades de procesamiento seleccionadas (84 GB por unidad de
procesamiento), el tamaño que supere la asignación se cargará con la tarifa publicada de almacenamiento de
blobs de Azure. La asignación de almacenamiento en cada unidad de procesamiento cubre todos los costos
de almacenamiento de los períodos de retención de 24 horas (valor predeterminado), incluso aunque la
unidad de procesamiento se consuma hasta la asignación de entrada máxima.
¿Cómo se calcula y se cobra el tamaño de almacenamiento de Event Hubs?
El tamaño total de todos los eventos almacenados, incluida la sobrecarga interna de encabezados de eventos
o las estructuras de almacenamiento en disco de todos los centros de eventos, se mide a lo largo del día. Al
final del día, se calcula el tamaño máximo de almacenamiento. La asignación de almacenamiento diario se
calcula basándose en el número mínimo de unidades de procesamiento seleccionadas durante el día (cada
unidad de procesamiento ofrece una asignación de 84 GB). Si el tamaño total supera la asignación de
almacenamiento diaria calculada, el exceso de almacenamiento se factura con las tarifas de Azure Blob
Storage (con la tarifa de almacenamiento con redundancia local ).
¿Cómo se calculan los eventos de entrada de Event Hubs?
Cada evento enviado a un centro de eventos cuenta como mensaje facturable. Un evento de entrada se define
como una unidad de datos que es menor o igual que 64 KB. Cualquier evento que tenga un tamaño menor o
igual que 64 KB se considera un evento facturable. Si el evento es mayor de 64 KB, el número de eventos
facturables se calcula según el tamaño del evento, en múltiplos de 64 KB. Por ejemplo, un evento de 8 KB
enviado al centro de eventos se factura como un evento, pero un mensaje de 96 KB enviado al centro de
eventos se factura como dos eventos.
Los eventos consumidos en un centro de eventos, así como las operaciones de administración y las llamadas
de control (como los puntos de comprobación), no se cuentan como eventos de entrada facturables, pero se
acumulan hasta llegar a la asignación de unidades de procesamiento.
¿Los cargos por conexión desacoplada se aplican a Event Hubs?
Los cargos de conexión se aplican solo cuando se usa el protocolo AMQP. No hay ningún cargo de conexión
por el envío de eventos mediante HTTP, independientemente del número de sistemas o dispositivos emisores.
Si tiene previsto usar AMQP (por ejemplo, para conseguir un flujo de eventos más eficiente o para habilitar la
comunicación bidireccional en escenarios de comando y control de IoT), vea la página de información de
precios de Event Hubs para obtener información sobre el número de conexiones incluidas en cada nivel de
servicio.
¿Cómo se factura Event Hubs Capture?
Capture se habilita cuando algún centro de eventos del espacio de nombres tiene la opción Capture
habilitada. Event Hubs Capture se factura por horas y por unidad de rendimiento comprada. A medida que el
número de unidades de rendimiento aumenta o disminuye, la facturación de Event Hubs Capture refleja estos
cambios en incrementos de horas completas. Para más información sobre Event Hubs Capture, vea los
detalles de los precios de Event Hubs.
¿Se me cobrará la cuenta de almacenamiento que seleccione para Event Hubs Capture?
Capture usa la cuenta de almacenamiento que se especifique al habilitarlo en un servicio centro de eventos.
Dado que esta es su cuenta de almacenamiento, los cambios efectuados en esta configuración se facturan en
su suscripción a Azure.
Cuotas
¿Hay alguna cuota asociada a los centros Event Hubs?
Para obtener una lista de todas las cuotas de los centros Event Hubs, consulte Cuotas.
Solución de problemas
¿Por qué no puedo crear un espacio de nombres después de eliminarlo de otra suscripción?
Cuando elimine un espacio de nombres de una suscripción, espere 4 horas antes de volver a crearlo con el
mismo nombre en otra suscripción. En caso contrario, es posible que reciba el mensaje de error siguiente:
Namespace already exists .
¿Cuáles son algunas de las excepciones generadas por los centros Event Hubs y sus acciones sugeridas?
Para obtener una lista de posibles excepciones de Event Hubs, consulte Información general sobre
excepciones.
Registros de diagnóstico
Event Hubs admite dos tipos de registros de diagnóstico: los registros de errores de Capture y los registros
operativos. Ambos, se representan en JSON y se pueden activar a través de Azure Portal.
SLA y soporte técnico
El soporte técnico para Event Hubs está disponible a través de la página de preguntas y respuestas de
Microsoft sobre Azure Service Bus. Se ofrece de forma gratuita soporte técnico para la administración de
suscripciones y la facturación.
Para más información sobre nuestro SLA, consulte la página Acuerdos de nivel de servicio .
Pasos siguientes
Para más información acerca de Event Hubs, visite los vínculos siguientes:
Información general de Event Hubs
Creación de un Centro de eventos
Inflado automático de Event Hubs