Partilhar via


Guia de solução de problemas do Apache Kafka para Hubs de Eventos

Este artigo fornece dicas de solução de problemas para problemas que você pode encontrar ao usar Hubs de Eventos para Apache Kafka.

Exceção Servidor Ocupado

Você pode receber a exceção Server Busy devido à limitação de Kafka. Com clientes AMQP, os Hubs de Eventos retornam imediatamente uma exceção de servidor ocupado após a limitação do serviço. É equivalente a uma mensagem "tente novamente mais tarde". Em Kafka, as mensagens são atrasadas antes de serem concluídas. O comprimento do atraso é retornado em milissegundos como throttle_time_ms na resposta produzir/buscar. Na maioria dos casos, essas solicitações atrasadas não são registradas como exceções de servidor ocupado nos painéis dos Hubs de Eventos. Em vez disso, o valor da throttle_time_ms resposta deve ser usado como um indicador de que a taxa de transferência excedeu a cota provisionada.

Se o tráfego for excessivo, o serviço terá o seguinte comportamento:

  • Se o atraso da solicitação de produção exceder o tempo limite da solicitação (request.timeout.ms), os Hubs de Eventos retornarão o código de erro de Violação de Política .
  • Se o atraso da solicitação de busca exceder o tempo limite da solicitação, os Hubs de Eventos registrarão a solicitação como limitada e responderão com um conjunto vazio de registros e sem código de erro.

Os clusters dedicados não têm mecanismos de limitação. Você é livre para consumir todos os recursos do cluster.

Nenhum registro recebido

Você pode ver os consumidores não recebendo nenhum registro e reequilibrando constantemente. Nesse cenário, os consumidores não obtêm nenhum registro e se reequilibram constantemente. Não há exceção ou erro quando isso acontece, mas os logs de Kafka mostrarão que os consumidores estão presos tentando voltar ao grupo e atribuir partições. Existem algumas causas possíveis:

  • Certifique-se de que o seu request.timeout.ms é pelo menos o valor recomendado de 60000 e o seu session.timeout.ms é pelo menos o valor recomendado de 30000. Ter essas configurações muito baixas pode causar tempos limite do consumidor, o que causa reequilíbrios (que causam mais tempos limites, que causam mais reequilíbrio, e assim por diante)
  • Se a sua configuração corresponder aos valores recomendados e você ainda estiver vendo um reequilíbrio constante, sinta-se à vontade para abrir um problema (certifique-se de incluir toda a sua configuração no problema para que possamos ajudar a depurar)!

Problema de versão do formato de compressão/mensagem

Atualmente, os Hubs de Eventos para Kafka suportam apenas gzip o algoritmo de compressão. Se qualquer outro algoritmo for usado, os aplicativos cliente verão um erro de versão de formato de mensagem (por exemplo, The message format version on the broker does not support the request.).

Se um algoritmo de compactação sem suporte precisar ser usado, compactar seus dados com esse algoritmo específico antes de enviá-los para os corretores e descompactar após o recebimento é uma solução válida. O corpo da mensagem é apenas uma matriz de bytes para o serviço, portanto, a compactação/descompactação do lado do cliente não causará problemas.

UnknownServerException

Você pode receber um UnknownServerException de bibliotecas de cliente Kafka semelhante ao exemplo a seguir:

org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request

Abra um ticket com o suporte da Microsoft. O registro em log no nível de depuração e os carimbos de data/hora de exceção no UTC são úteis para depurar o problema.

Outros problemas

Verifique os seguintes itens se vir problemas ao usar o Kafka em Hubs de Eventos.

  • Firewall bloqueando o tráfego - Certifique-se de que a porta 9093 não está bloqueada pelo firewall.
  • TopicAuthorizationException - As causas mais comuns dessa exceção são:
    • Um erro de digitação na cadeia de conexão no arquivo de configuração ou
    • Tentando usar Hubs de Eventos para Kafka em um namespace de camada Basic. O recurso Hubs de Eventos para Kafka não é suportado na camada básica.
  • Incompatibilidade de versão do Kafka - Os Hubs de Eventos para Ecossistemas Kafka suportam as versões 1.0 e posteriores do Kafka. Alguns aplicativos que usam Kafka versão 0.10 e posterior podem ocasionalmente funcionar devido à compatibilidade com versões anteriores do protocolo Kafka, mas é altamente recomendável não usar versões antigas da API. As versões 0.9 e anteriores do Kafka não suportam os protocolos SASL necessários e não podem se conectar a Hubs de Eventos.
  • Codificações estranhas em cabeçalhos AMQP ao consumir com Kafka - ao enviar eventos para um hub de eventos sobre AMQP, todos os cabeçalhos de carga útil AMQP são serializados na codificação AMQP. Os consumidores de Kafka não desserializam os cabeçalhos do AMQP. Para ler valores de cabeçalho, decodifice manualmente os cabeçalhos AMQP. Como alternativa, você pode evitar o uso de cabeçalhos AMQP se souber que estará consumindo via protocolo Kafka. Para obter mais informações, consulte este problema do GitHub.
  • Autenticação SASL - Fazer com que sua estrutura coopere com o protocolo de autenticação SASL exigido pelos Hubs de Eventos pode ser mais difícil do que parece. Veja se você pode solucionar problemas de configuração usando os recursos da sua estrutura na autenticação SASL.

Limites

Apache Kafka vs. Kafka dos Hubs de Eventos. Na maior parte das vezes, a interface do Kafka dos Hubs de Eventos do Azure tem as mesmas predefinições, propriedades, códigos de erro e comportamento geral do Apache Kafka. As instâncias em que esses dois diferem explicitamente (ou onde os Hubs de Eventos impõem um limite que Kafka não impõe) estão listadas abaixo:

  • O comprimento máximo da propriedade é de group.id 256 caracteres
  • O tamanho máximo de offset.metadata.max.bytes é de 1024 bytes
  • As confirmações de deslocamento são limitadas a 4 chamadas/segundo por partição com um tamanho máximo de log interno de 1 MB

Próximos passos

Para saber mais sobre Hubs de Eventos e Hubs de Eventos para Kafka, consulte os seguintes artigos: