Share via


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

Este artigo fornece sugestões de resolução de problemas que pode encontrar ao utilizar os Hubs de Eventos para o Apache Kafka.

Exceção Server Busy

Poderá receber a exceção Server Busy devido à limitação do Kafka. Com os clientes AMQP, os Hubs de Eventos devolvem imediatamente uma exceção de servidor ocupado após a limitação do serviço. É equivalente a uma mensagem "tente novamente mais tarde". No Kafka, as mensagens são atrasadas antes de serem concluídas. O comprimento do atraso é devolvido em milissegundos, tal como throttle_time_ms na resposta de produção/obtenção. Na maioria dos casos, estes pedidos atrasados não são registados como exceções de servidor ocupado nos dashboards dos Hubs de Eventos. Em vez disso, o valor da throttle_time_ms resposta deve ser utilizado como um indicador de que o débito excedeu a quota aprovisionada.

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

  • Se o atraso do pedido de produção exceder o tempo limite do pedido (request.timeout.ms), os Hubs de Eventos devolvem o código de erro Violação da Política .
  • Se a obtenção do atraso do pedido exceder o tempo limite do pedido, os Hubs de Eventos registam o pedido como limitado e respondem com um conjunto vazio de registos e sem código de erro.

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

Não foram recebidos registos

Poderá ver que os consumidores não recebem registos e estão constantemente a reequilibrar-se. Neste cenário, os consumidores não obtêm registos e são constantemente reequilibrados. Não existe nenhuma exceção ou erro quando acontece, mas os registos do Kafka mostrarão que os consumidores estão bloqueados ao tentar voltar a aderir ao grupo e atribuir partições. Existem algumas causas possíveis:

  • Certifique-se de que request.timeout.ms é, pelo menos, o valor recomendado de 60000 e que session.timeout.ms é, pelo menos, o valor recomendado de 30000. Ter estas definições demasiado baixas pode causar tempos limite do consumidor, o que, em seguida, causa reequilíbrios (o que causa mais tempos limite, o que causa mais reequilíbrio, etc.)
  • Se a configuração corresponder a esses valores recomendados e continuar a ver um reequilíbrio constante, não hesite em abrir um problema (certifique-se de que inclui toda a configuração no problema para que possamos ajudar a depurar)!

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

O Kafka suporta compressão e os Hubs de Eventos para Kafka atualmente não. Os erros que mencionam uma versão de formato de mensagem (por exemplo, The message format version on the broker does not support the request.) são causados quando um cliente tenta enviar mensagens do Kafka comprimidas para os nossos mediadores.

Se forem necessários dados comprimidos, comprimir os dados antes de os enviar para os mediadores e descomprimir após receber é uma solução válida. O corpo da mensagem é apenas uma matriz de bytes para o serviço, pelo que a compressão/descompressão do lado do cliente não causará problemas.

UnknownServerException

Pode receber um UnknownServerException a partir de bibliotecas de cliente kafka semelhantes ao exemplo seguinte:

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

Abra um pedido de suporte da Microsoft. Os carimbos de data/hora de registo ao nível da depuração e exceção em UTC são úteis para depurar o problema.

Outros problemas

Verifique os seguintes itens se vir problemas ao utilizar o Kafka nos Hubs de Eventos.

  • Firewall a bloquear o tráfego – certifique-se de que a porta 9093 não está bloqueada pela firewall.
  • TopicAuthorizationException - As causas mais comuns desta exceção são:
    • Um erro de digitação na cadeia de ligação no ficheiro de configuração ou
    • A tentar utilizar os Hubs de Eventos para o Kafka num espaço de nomes de escalão Básico. A funcionalidade Hubs de Eventos para Kafka não é suportada no escalão básico.
  • Erro de correspondência da versão do Kafka – os Hubs de Eventos para Ecossistemas kafka suportam as versões 1.0 e posteriores do Kafka. Algumas aplicações que utilizam a versão 0.10 e posterior do Kafka podem ocasionalmente funcionar devido à retrocompatibilidade do protocolo Kafka, mas recomendamos vivamente que não utilizem 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 conseguem ligar-se aos Hubs de Eventos.
  • Codificações estranhas em cabeçalhos AMQP ao consumir com o Kafka – ao enviar eventos para um hub de eventos através de AMQP, todos os cabeçalhos de payload amQP são serializados na codificação AMQP. Os consumidores do Kafka não desselizam os cabeçalhos do AMQP. Para ler valores de cabeçalho, descodifique manualmente os cabeçalhos AMQP. Em alternativa, pode evitar utilizar cabeçalhos AMQP se souber que vai consumir através do protocolo Kafka. Para obter mais informações, veja este problema do GitHub.
  • Autenticação SASL – fazer com que a sua arquitetura coopere com o protocolo de autenticação SASL exigido pelos Hubs de Eventos pode ser mais difícil do que se vê. Veja se consegue resolver problemas de configuração com os recursos da arquitetura 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 que estes dois diferem explicitamente (ou em que os Hubs de Eventos impõem um limite que o Kafka não tem) estão listadas abaixo:

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

Passos seguintes

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