Solución de problemas de conexiones de entrada de Azure Stream Analytics

En este artículo se describen problemas comunes con Azure Stream Analytics conexiones de entrada, cómo solucionar esos problemas y cómo corregirlos. Entre los problemas abordados se incluyen errores de deserialización debido a eventos con formato incorrecto, límites de receptores de Event Hubs, cambios en el número de particiones y límites de lectores de IoT Hub.

Muchos pasos de solución de problemas requieren habilitar los registros de recursos para el trabajo de Stream Analytics. Si no tiene habilitados los registros de recursos, consulte Solución de problemas de Azure Stream Analytics mediante registros de recursos.

El trabajo no recibe eventos de entrada

  1. Compruebe la conectividad con las entradas y salidas. Use el botón Probar conexión para cada entrada y salida.

  2. Examine los datos de entrada:

    1. Utilice el botón Datos de ejemplo para cada campo de entrada. Descargue los datos de ejemplo de entrada.

    2. Inspeccione los datos de ejemplo para comprender el esquema y los tipos de datos.

    3. Compruebe las métricas de Azure Event Hubs para asegurarse de que se están enviando eventos. Las métricas de mensajes deben ser mayores que cero si Event Hubs recibe mensajes.

  3. Asegúrese de seleccionar un intervalo de tiempo en la vista previa de entrada. Elija Seleccionar intervalo de tiempo y escriba una duración de ejemplo antes de probar la consulta.

Importante

Para los trabajos de Azure Stream Analytics que no están inyectados en la red, no confíe en ningún caso en la dirección IP de origen de las conexiones procedentes de Stream Analytics. Pueden ser direcciones IP públicas o privadas, en función de las operaciones de infraestructura de servicio que se produzcan de vez en cuando.

Los eventos de entrada con formato incorrecto provocan errores de deserialización

Los problemas de deserialización se producen cuando el flujo de entrada del trabajo de Stream Analytics contiene mensajes con formato incorrecto. Por ejemplo, la ausencia de un paréntesis o una llave en un objeto JSON, o un formato de marca de tiempo incorrecto en el campo de hora, puede provocar que un mensaje esté mal formado.

Cuando un trabajo de Stream Analytics recibe un mensaje con formato incorrecto de una entrada, quita el mensaje y le notifica una advertencia. Aparece un símbolo de advertencia en el icono Entradas del trabajo de Stream Analytics. El símbolo de advertencia aparece mientras el trabajo está en ejecución.

Captura de pantalla que muestra el icono Entradas para Azure Stream Analytics.

Habilite los registros de recursos para ver los detalles del error y el mensaje (carga) que provocó el error. Hay varias razones por las que pueden producirse errores de deserialización. Para obtener más información sobre errores de deserialización específicos, consulte Errores de datos de entrada. Si los registros de recursos no están habilitados, aparece una breve notificación en el portal de Azure.

Captura de pantalla que muestra una notificación de advertencia sobre los detalles de entrada.

Si la carga del mensaje es superior a 32 KB o está en formato binario, ejecute el código de CheckMalformedEvents.cs disponible en el repositorio de ejemplos de GitHub. Este código lee el desplazamiento del identificador de partición y muestra los datos ubicados en esa posición.

Otras razones comunes para los errores de deserialización de entrada son:

  • Columna entera que tiene un valor mayor que 9223372036854775807.
  • Cadenas en lugar de una matriz de objetos o objetos separados por líneas. Ejemplo válido: [{'a':1}]. Ejemplo no válido: "'a' :1".
  • Se usa el blob de captura de Event Hubs en formato Avro como entrada en el trabajo.
  • Dos columnas en un único evento de entrada que solo difieren en el caso, como column1 y COLUMN1.

Cambios en el número de particiones de un centro de eventos

Cuando cambia el recuento de particiones de un centro de eventos mientras se ejecuta un trabajo de Stream Analytics, el trabajo produce el siguiente error:

Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException

Para resolver este problema, detenga y reinicie el trabajo de Stream Analytics para que pueda detectar el nuevo recuento de particiones.

El trabajo supera el número máximo de receptores de Event Hubs

Un procedimiento recomendado para usar Event Hubs es usar varios grupos de consumidores para la escalabilidad del trabajo. El número de lectores del trabajo de Stream Analytics para una entrada específica afecta al número de lectores de un único grupo de consumidores.

El número exacto de destinatarios se basa en los detalles de implementación interna para la lógica de la topología de escalado horizontal. El número no se expone externamente. El número de lectores puede cambiar cuando se inicia un trabajo o se actualiza.

Aparece el siguiente mensaje de error cuando el número de receptores supera el máximo. El mensaje incluye una lista de conexiones existentes a Event Hubs en un grupo de consumidores. La etiqueta AzureStreamAnalytics indica que las conexiones proceden de un servicio de streaming de Azure.

The streaming job failed: Stream Analytics job has validation errors: Job will exceed the maximum amount of Event Hubs Receivers.

The following information may be helpful in identifying the connected receivers: Exceeded the maximum number of allowed receivers per partition in a consumer group which is 5. List of connected receivers – 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1.

Note

Cuando cambia el número de lectores durante la actualización de una tarea, se registran advertencias temporales en los registros de auditoría. Los trabajos de Stream Analytics se recuperan automáticamente de estos problemas transitorios.

Para agregar un nuevo grupo de consumidores en la instancia de Event Hubs, siga estos pasos:

  1. Inicie sesión en el portal de Azure.

  2. Localice su hub de eventos.

  3. En el encabezado Entidades , seleccione Event Hubs.

  4. Seleccione el centro de eventos por nombre.

  5. En la página Instancia de Event Hubs , en el encabezado Entidades , seleccione Grupos de consumidores. Se muestra un grupo de consumidores con el nombre $Default .

  6. Seleccione + Grupo de consumidores para agregar un nuevo grupo de consumidores.

    Captura de pantalla que muestra el botón para agregar un grupo de consumidores en Event Hubs.

  7. Al crear la entrada en el trabajo de Stream Analytics para que apunte al centro de eventos, ha especificado ahí el grupo de consumidores. Event Hubs usa $Default si no se especifica ningún grupo de consumidores. Después de crear un grupo de consumidores, edite la entrada del centro de eventos en el trabajo de Stream Analytics y especifique el nombre del nuevo grupo de consumidores.

Los lectores por partición superan el límite de Event Hubs

Si la sintaxis de la consulta de streaming hace referencia varias veces al mismo recurso de entrada del centro de eventos, el motor de trabajos puede utilizar varios lectores por cada consulta de ese mismo grupo de consumidores. Cuando hay demasiadas referencias al mismo grupo de consumidores, el trabajo puede superar el límite establecido de cinco y se produce un error. En esas circunstancias, puede dividir aún más si usa múltiples entradas en varios grupos de consumidores.

Los escenarios en los que el número de lectores por partición supera el límite de Cinco de Event Hubs son:

  • Varias SELECT instrucciones: si usa varias SELECT instrucciones que hacen referencia a la misma entrada del centro de eventos, cada SELECT instrucción hace que se cree un nuevo receptor.

  • UNION: cuando se usa UNION, es posible tener varias entradas que hacen referencia al mismo centro de eventos y al mismo grupo de consumidores.

  • SELF JOIN: cuando se usa una SELF JOIN operación, es posible hacer referencia al mismo centro de eventos varias veces.

Los procedimientos recomendados siguientes pueden ayudar a mitigar los escenarios en los que el número de lectores por partición supera el límite de cinco de Event Hubs.

Dividir la consulta en varios pasos mediante una cláusula WITH

La WITH cláusula especifica un conjunto de resultados con nombre temporal al que puede hacer referencia una FROM cláusula de la consulta. La cláusula WITH se define en el ámbito de ejecución de una única instrucción SELECT.

Por ejemplo, en lugar de esta consulta:

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

Use esta consulta:

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

Asegúrese de que las entradas se enlazan a grupos de consumidores diferentes

Para las consultas en las que se conectan tres o más entradas al mismo grupo de consumidores de Event Hubs, cree grupos de consumidores independientes. Esta tarea requiere la creación de entradas adicionales de Stream Analytics.

Cree entradas separadas con diferentes grupos de consumidores

Puede crear entradas independientes con otros grupos de consumidores para el mismo centro de eventos. En el ejemplo siguiente de una UNION consulta, InputOne y InputTwo hacen referencia al mismo origen de Event Hubs. Cualquier consulta puede tener entradas separadas con diferentes grupos de consumidores. La UNION consulta es solo un ejemplo.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Los lectores por partición superan el límite de IoT Hub

Los trabajos de Stream Analytics usan el punto de conexión integrado compatible con Event Hubs en Azure IoT Hub para conectarse y leer eventos desde IoT Hub. Si los lectores por partición superan los límites de IoT Hub, puede usar las soluciones para Event Hubs para resolver el problema. Puede crear un grupo de consumidores para el punto de conexión integrado desde la sección del punto de conexión en el portal de IoT Hub o mediante el SDK de IoT Hub.

Obtención de ayuda

Para obtener más ayuda, consulte la página de preguntas y respuestas de Microsoft sobre Azure Stream Analytics.

Pasos siguientes