Solucionar problemas de conexões de entrada do Azure Stream Analytics

Este artigo descreve problemas comuns com conexões de entrada Azure Stream Analytics, como solucionar esses problemas e como corrigi-los. Os problemas abordados incluem erros de desserialização causados por eventos malformados, limites de receptores dos Hubs de Eventos, alterações na contagem de partições e limites de leitores do Hub IoT.

Muitas etapas de solução de problemas exigem que você habilite logs de recursos para seu trabalho do Stream Analytics. Se você não tiver logs de recursos habilitados, consulte Solucionar problemas Azure Stream Analytics usando logs de recursos.

O trabalho não recebe eventos de entrada

  1. Verifique sua conectividade com entradas e saídas. Use o botão Testar Conexão para cada entrada e saída.

  2. Examine seus dados de entrada:

    1. Use o botão Dados de Exemplo para cada entrada. Baixe os dados de exemplo de entrada.

    2. Inspecione os dados de exemplo para entender o esquema e os tipos de dados.

    3. Verifique as métricas do Hubs de Eventos do Azure para garantir que os eventos estejam sendo enviados. As métricas de mensagem devem ser maiores que zero se os Hubs de Eventos estiverem recebendo mensagens.

  3. Verifique se você selecionou um intervalo de tempo na visualização de entrada. Escolha Selecionar intervalo de tempo e, em seguida, insira uma duração de exemplo antes de testar sua consulta.

Importante

Para trabalhos Azure Stream Analytics que não são injetados na rede, não confie no endereço IP de origem das conexões provenientes do Stream Analytics de forma alguma. Eles podem ser IPs públicos ou privados, dependendo das operações de infraestrutura de serviço que ocorrem de tempos em tempos.

Eventos de entrada malformados causam erros de desserialização

Problemas de desserialização ocorrem quando o fluxo de entrada do trabalho do Stream Analytics contém mensagens malformadas. Por exemplo, um parêntese ou chave ausente em um objeto JSON ou um formato de carimbo de data/hora incorreto no campo de tempo pode causar uma mensagem malformada.

Quando um trabalho do Stream Analytics recebe uma mensagem malformada de uma entrada, ele descarta a mensagem e notifica você com um aviso. Um símbolo de aviso aparece no bloco Entradas do trabalho do Stream Analytics. O símbolo de aviso existe enquanto a tarefa estiver em execução.

Captura de tela que mostra o bloco Entradas para Azure Stream Analytics.

Habilite os logs de recursos para exibir os detalhes do erro e a mensagem (conteúdo) que causou o erro. Há vários motivos pelos quais erros de desserialização podem ocorrer. Para obter mais informações sobre erros específicos de desserialização, consulte Erros de dados de entrada. Se os logs de recursos não estiverem habilitados, uma breve notificação será exibida no portal do Azure.

Captura de tela que mostra uma notificação de aviso sobre detalhes de entrada.

Se o conteúdo da mensagem for maior que 32 KB ou estiver em formato binário, execute o código CheckMalformedEvents.cs disponível no repositório de exemplos GitHub. Esse código lê o deslocamento de ID de partição e imprime os dados localizados nesse deslocamento.

Outros motivos comuns para erros de desserialização de entrada incluem:

  • Uma coluna de inteiro que tem um valor maior que 9223372036854775807.
  • Cadeias de caracteres em vez de uma matriz de objetos ou objetos separados por linha. Exemplo válido: [{'a':1}]. Exemplo inválido: "'a' :1".
  • Os Hubs de Eventos capturam o blob no formato Avro usado como entrada no trabalho.
  • Duas colunas em um único evento de entrada que diferem apenas no caso, como column1 e COLUMN1.

Alterações na contagem de partições do hub de eventos

Quando a contagem de partição de um hub de eventos é alterada enquanto um trabalho do Stream Analytics está em execução, o trabalho falha com o seguinte erro:

Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException

Para resolver esse problema, interrompa e reinicie o trabalho do Stream Analytics para que ele possa detectar a nova contagem de partições.

A tarefa excede o número máximo de receptores dos Hubs de Eventos

Uma prática recomendada para usar os Hubs de Eventos é usar vários grupos de consumidores para escalabilidade de trabalho. O número de leitores no trabalho do Stream Analytics para uma entrada específica afeta o número de leitores em um único grupo de consumidores.

O número exato de receptores baseia-se nos detalhes da implementação interna para a lógica de topologia de expansão. O número não é exposto externamente. O número de leitores pode mudar quando um trabalho é iniciado ou atualizado.

A mensagem de erro a seguir é exibida quando o número de receptores excede o máximo. A mensagem inclui uma lista de conexões existentes com o Event Hubs em um grupo de consumidores. A marca AzureStreamAnalytics indica que as conexões são de um serviço de streaming 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

Quando o número de leitores muda durante o upgrade de um trabalho, avisos temporários são gravados nos logs de auditoria. Os trabalhos do Stream Analytics se recuperam automaticamente desses problemas transitórios.

Para adicionar um novo grupo de consumidores à instância dos Hubs de Eventos, siga estas etapas:

  1. Entre no Portal do Azure.

  2. Localize o hub de eventos.

  3. No título Entidades , selecione Hubs de Eventos.

  4. Selecione o hub de eventos pelo nome.

  5. Na página Instância dos Hubs de Eventos , no título Entidades , selecione Grupos de consumidores. Um grupo de consumidores com o nome $Default está listado.

  6. Selecione + Grupo de consumidores para adicionar um novo grupo de consumidores.

    Captura de tela que mostra o botão para adicionar um grupo de consumidores nos Hubs de Eventos.

  7. Ao criar a entrada no trabalho do Stream Analytics para apontar para o hub de eventos, você especificou o grupo de consumidores lá. O Event Hubs usa $Default se nenhum grupo de consumidores for especificado. Depois de criar um grupo de consumidores, edite a entrada do hub de eventos no trabalho do Stream Analytics e especifique o nome do novo grupo de consumidores.

Leitores por partição excedem o limite do Event Hubs

Se a sintaxe de consulta de streaming fizer referência ao mesmo recurso de entrada do hub de eventos várias vezes, o mecanismo de trabalho poderá usar vários leitores por consulta desse mesmo grupo de consumidores. Quando há um número excessivo de referências para o mesmo grupo de consumidores, o trabalho pode exceder o limite de cinco e gerar um erro. Nessas circunstâncias, você pode dividir ainda mais usando várias entradas em vários grupos de consumidores.

Os cenários em que o número de leitores por partição excede o limite de cinco Hubs de Eventos incluem:

  • Várias SELECT instruções: se você usar várias SELECT instruções que se referem à mesma entrada do hub de eventos, cada SELECT instrução fará com que um novo receptor seja criado.

  • UNION: quando você usa UNION, é possível ter várias entradas que se referem ao mesmo hub de eventos e grupo de consumidores.

  • SELF JOIN: quando você usa uma SELF JOIN operação, é possível se referir ao mesmo hub de eventos várias vezes.

As práticas recomendadas a seguir podem ajudar a atenuar cenários em que o número de leitores por partição excede o limite de cinco Hubs de Eventos.

Dividir sua consulta em várias etapas usando uma cláusula WITH

A WITH cláusula especifica um conjunto de resultados nomeado temporário que uma FROM cláusula na consulta pode referenciar. Você define a WITH cláusula no escopo de execução de uma única SELECT instrução.

Por exemplo, em vez dessa 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
…

Verifique se as entradas estão vinculadas a diferentes grupos de consumidores

Para consultas nas quais três ou mais entradas estão conectadas ao mesmo grupo de consumidores dos Hubs de Eventos, crie grupos de consumidores separados. Essa tarefa requer a criação de entradas adicionais do Stream Analytics.

Criar campos de entrada separados com diferentes grupos de consumidores

Você pode criar entradas separadas com diferentes grupos de consumidores para o mesmo hub de eventos. No exemplo de consulta a seguir UNION, InputOne e InputTwo referem-se à mesma origem do Event Hubs. Qualquer consulta pode ter entradas separadas com grupos de consumidores diferentes. A UNION consulta é apenas um exemplo.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Leitores por partição excedem o limite do Hub IoT

Os trabalhos do Stream Analytics usam o ponto de extremidade compatível com Hubs de Eventos interno no Hub IoT do Azure para conectar e ler eventos do Hub IoT. Se seus leitores por partição excederem os limites de Hub IoT, você poderá usar as soluções para Hubs de Eventos para resolver o problema. Você pode criar um grupo de consumidores para o ponto de extremidade interno por meio da sessão de ponto de extremidade do portal do Hub IoT ou por meio do SDK do Hub IoT.

Obter ajuda

Para obter mais assistência, experimente a página do Microsoft Q&A sobre o Azure Stream Analytics.

Próximas Etapas