Solucionar problemas de conexões de entrada

Esse artigo descreve problemas comuns com conexões de entrada do Azure Stream Analytics, como solucionar esses problemas e como corrigi-los.

Muitas etapas de solução de problemas exigem que você ative logs de recursos para seu trabalho do Stream Analytics. Se você não tiver os logs de recursos ativados, confira Solucionar problemas do Azure Stream Analytics usando os 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. Examinar os 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 dos 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 da entrada. Escolha Selecionar intervalo de tempo e, em seguida, insira uma duração de amostra antes de testar sua consulta.

Importante

Em trabalhos do 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

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

Quando um trabalho do Stream Analytics recebe uma mensagem malformada de uma entrada, ela solta a mensagem e notifica você com um aviso. Um símbolo de aviso aparece no bloco Entradas do seu trabalho do Stream Analytics. O símbolo de aviso existe desde que o trabalho esteja em um estado de execução.

Screenshot that shows the Inputs tile for Azure Stream Analytics.

Ative os logs de recursos para visualizar os detalhes do erro e a mensagem (conteúdo) que causou o erro. Há várias razões pelas quais podem ocorrer erros de desserialização. Para obter mais informações sobre erros de desserialização específicos, confira Erros de dados de entrada. Se os logs de recursos não estiverem ativados, uma breve notificação aparecerá no portal do Azure.

Screenshot that shows a warning notification about input details.

Se o conteúdo da mensagem for maior que 32 KB ou estiver no formato binário, execute o código CheckMalformedEvents.cs disponível no repositório de amostras do 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 são:

  • Uma coluna de inteiros com 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"*.
  • Usando um blob de captura dos Hubs de Eventos no formato Avro como entrada em seu trabalho.
  • Ter duas colunas em um único evento de entrada que diferem apenas no caso. Exemplo: *column1* e *COLUMN1*.

Alterações na contagem de partições

A contagem de partições de hubs de eventos pode ser alterada. Se a contagem de partições de um hub de eventos for alterada, você precisará parar e reiniciar o trabalho do Stream Analytics.

O seguinte erro aparece quando a contagem de partições de um hub de eventos é alterada enquanto o trabalho está em execução: Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException.

O trabalho excede o 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 a escalabilidade de tarefas. 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 aparece quando o número de receptores excede o máximo. A mensagem inclui uma lista de conexões existentes feitas aos Hubs de Eventos em um grupo de consumidores. A tag AzureStreamAnalytics indica que as conexões são de um serviço de streaming do 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_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1.

Observação

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 são recuperados automaticamente desses problemas transitórios.

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

  1. Entre no portal do Azure.

  2. Localize seu hub de eventos.

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

  4. Selecione o Hub de Eventos por nome.

  5. Na página Instância de Hubs de Eventos no cabeçalho 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.

    Screenshot that shows the button for adding a consumer group in Event Hubs.

  7. Quando criou a entrada no trabalho do Stream Analytics para apontar para o hub de eventos, você especificou o grupo de consumidores nele. Os Hubs de Eventos usarão $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.

Os leitores por partição excedem o limite de Hubs de Eventos

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 dos Hubs de Eventos incluem:

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

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

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

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

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

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

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

Garantir que as entradas se associem a diferentes grupos de consumidores

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

Criar entradas separadas com diferentes grupos de consumidores

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

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Os 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 os leitores por partição excederem os limites do Hub IoT, você poderá usar as soluções para os Hubs de Eventos para resolver esse 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