Diagnosticando e Solucionando Problemas do Serviço Streaming
Saiba como solucionar problemas comuns com o Streaming.
Este tópico abrange vários problemas relacionados ao Oracle Cloud Infrastructure Streaming e como você pode resolvê-los. Detalhes sobre erros comuns de API que todos os serviços retornam são detalhados em Erros de API.
Diagnosticando e Solucionando Problemas de Acesso e Permissões
A solicitação retorna uma mensagem "Exceção de processamento durante a comunicação" e um erro -1
Quando você usar o cliente do serviço Streaming para enviar uma solicitação, poderá ver a seguinte mensagem de erro:
Caused by: com.oracle.bmc.model.BmcException: (-1, null, false) Processing exception while communicating to:
https://streams.<region>.streaming.oci.oraclecloud.com (outbound opc-request-id: <opc_request_id>)
at com.oracle.bmc.http.internal.RestClient.convertToBmcException(RestClient.java:540)
at com.oracle.bmc.http.internal.RestClient.get(RestClient.java:96)
at com.oracle.pic.oss.api.StreamAdminClient.getStream(StreamAdminClient.java:292)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMeth
Este erro está relacionado ao cliente ou ao ambiente do cliente. O serviço Streaming não a envia, o que significa que a solicitação nunca chegou ao serviço.
Certifique-se de que você possa acessar seu ponto final do Streaming. Você pode usar o telnet para testar a conectividade com nossos pontos finais públicos. No momento, o Streaming usa as portas 443 e 9092. A porta 443 é usada pela API de Streaming e pelos SDKs do Oracle Cloud Infrastructure. A porta 9092 é usada pelo protocolo Kafka. Seu teste telnet deve especificar a porta apropriada para seu caso de uso.
Por exemplo:
telnet streams.<region>.streaming.oci.oraclecloud.com 443
telnet streams.<region>.streaming.oci.oraclecloud.com 9092
Uma conexão bem-sucedida com o serviço Streaming retorna uma mensagem Connected to cell-1.streaming.region.oci.oraclecloud.com.
.
Se o telnet retornar uma mensagem Unable to connect to remote host
, investigue sua rede para possíveis problemas de bloqueio, como uma política de firewall ou regras de grupo de segurança de rede.
A solicitação retorna uma mensagem NotAuthorizedOrNotFound e um erro 404
Ao enviar uma solicitação ao serviço Streaming, você poderá ver uma mensagem de erro semelhante à seguinte:
com.oracle.bmc.model.BmcException: (404, NotAuthorizedOrNotFound,false)
Unknown stream ocid1.stream.oc1.phx.exampleuniqueID.
(opc-request-id: <opc_request_id>)
Um erro 404 geralmente significa que o recurso necessário não foi encontrado ou que você não tem acesso a ele. Um exemplo é quando a política de stream-push está ausente, o stream foi excluído ou não está acessível. Verifique se todas as permissões estão definidas corretamente.
A solicitação retorna uma mensagem "Não Encontrado" e um erro 404
Ao enviar uma solicitação ao serviço Streaming, você poderá ver uma mensagem de erro semelhante à seguinte:
Response { type: "cors", url: "https://streams.<region>.streaming.oci.oraclecloud.com/20180418/streams?
compartmentId=ocid1.tenancy.oc1..exampleuniqueID&limit=10&page=&sortBy=TIMECREATED&sortOrder=desc&lifecycleState=",
redirected: false, status: 404, ok: false, statusText: "Not Found", headers: Headers, bodyUsed: false }
console.js:35
Este erro indica um problema relacionado à permissão. Verifique se todas as permissões estão definidas corretamente.
A solicitação retorna uma mensagem "Os seguintes namespaces/chaves de tag não estão autorizados ou não foram encontrados"
Este erro sugere que há uma tag no stream que seu usuário não está autorizado a usar. Remova a tag ou autorize o usuário. Consulte Tags de Recursos para obter mais informações.
A solicitação retorna uma mensagem "handshake inválido" e um erro 104
Ao enviar uma solicitação ao serviço Streaming, você poderá ver uma mensagem de erro semelhante à seguinte:
SSLError(SSLError(\"bad handshake: SysCallError(104, 'ECONNRESET'.))
Esse erro normalmente significa que o sistema não tem a CA pela qual os certificados foram assinados. Talvez seja necessário instalar o pacote ca-certificates no host ou extrair o certificado CA do ponto final de destino e importá-lo para o armazenamento confiável do sistema usando o comando update-ca-trust
.
Diagnosticando e Solucionando Problemas de Limites e Throttling
Limites de Recursos do Streaming descreve os limites de serviços e recursos que podem resultar nos cenários a seguir.
Falhas parciais
O serviço Streaming suporta falhas parciais causadas por limitação, por partição. Quando ocorre uma falha parcial, o serviço retorna um código de status 200
e indica a falha no payload de resposta.
Se toda uma solicitação for limitada, o serviço Streaming retornará um código de status 429
.
A solicitação retorna uma "Mensagem de muitas solicitações" e um erro 429
Ao enviar uma solicitação ao serviço Streaming, você poderá ver uma mensagem de erro que inclua o seguinte:
(429, Too many requests)
Este erro é causado pelo mecanismo de limitação no serviço. Indica que muitas solicitações por segundo por partição estão sendo recebidas.
Se esse erro ocorrer no produtor, certifique-se de que a taxa total de gravação de dados de 1 MB por segundo por partição não seja excedida, fazendo o seguinte:
- Reduzindo a quantidade de solicitações por segundo.
- Diminuindo o tamanho da mensagem por divisão em batches.
Se esse erro ocorrer no consumidor, certifique-se de que:
- O cursor use
commitOnGet(true)
. - Você reduza o número de solicitações, tendo em mente que a taxa máxima de leitura de dados é 5 solicitações GET por segundo, por partição, por grupo de consumidores.
- O
limit
seja definido para cada solicitação GET.
A solicitação retorna uma mensagem "O tamanho da solicitação é limitado a 1 MiB" e um erro 400
Ao enviar uma solicitação ao serviço Streaming, você poderá ver uma mensagem de erro semelhante à seguinte:
Exception in thread "main" com.oracle.bmc.model.BmcException: (400, InvalidParameter, false) Request size is limited to 1 MiB. (opc-request-id: <opc_request_id>>)
at com.oracle.bmc.http.internal.ResponseHelper.throwIfNotSuccessful(ResponseHelper.java:120)
at com.oracle.bmc.http.internal.ResponseConversionFunctionFactory$ValidatingParseResponseFunction.apply(ResponseConversionFunctionFactory.java:86)
at com.oracle.bmc.http.internal.ResponseConversionFunctionFactory$ValidatingParseResponseFunction.apply(ResponseConversionFunctionFactory.java:82)
at com.oracle.bmc.streaming.internal.http.PutMessagesConverter$1.apply(PutMessagesConverter.java:68)
at com.oracle.bmc.streaming.internal.http.PutMessagesConverter$1.apply(PutMessagesConverter.java:54)
at com.oracle.bmc.streaming.StreamClient.putMessages(StreamClient.java:466)
Este erro ocorre porque a chamada PutMessages
enviada ao serviço é muito grande. O tamanho deve ser menor ou igual a 1 MB.
A criação do stream falha com uma mensagem "Você excedeu o número de partições permitidas"
Este erro ocorre quando você tenta criar mais partições do que o limite permitido para sua tenancy. Você pode solicitar um aumento.
Diagnosticando e Solucionando Problemas de Produção e Consumo
As mensagens não aparecem na Console após publicá-las em um stream
Você deve selecionar Atualizar para mostrar as 100 primeiras mensagens. Para obter mais informações, consulte Mostrando Mensagens Recentes em um Fluxo.
Como os streams que usam pontos finais privados não são acessíveis pela internet, suas mensagens não são mostradas na Console.
Os consumidores recebem uma mensagem "O cursor está fora do período de retenção e agora é inválido" e um erro 400
Ao solicitar mensagens de um stream, um consumidor poderá ver uma mensagem de erro como a seguinte:
(400, InvalidParameter, false) The cursor is outside the retention period and is now invalid
Este erro significa que as referências armazenadas para uma ou mais de suas partições ficaram atrás do horizonte de corte. Ocorreu alguma perda de dados e os dados produzidos no stream não estão mais disponíveis para consumo. Os dados que estão fora do período de retenção não podem ser recuperados. Neste ponto, o administrador deve decidir o melhor curso de ação para o caso de uso.
Esse erro pode ocorrer se você não estiver fazendo commit de referências regularmente ou se o seu consumidor ficar constantemente para trás. Para obter mais Informações, consulte Obtendo Mensagens.
É necessária uma chamada manual para o método UpdateGroup
para redefinir o cursor das instâncias dentro de um grupo de consumidores.
Os consumidores recebem uma mensagem "Tentando fazer commit de uma partição não reservada" e um erro 400
Ao solicitar mensagens de um stream, um consumidor que faça parte de um grupo de consumidores poderá ver uma mensagem de erro como a seguinte:
(400, InvalidParameter, false) Trying to commit unreserved partition
Esse erro significa que o consumidor tentou fazer commit de uma referência para uma partição que não foi reservada para esse consumidor específico. Esse erro pode ocorrer quando o timeout do consumidor parece ter acontecido, as partições são rebalanceadas para outro consumidor e, em seguida, o consumidor tenta fazer commit das referências. O timeout padrão é de 30 segundos para um consumidor. Os timeouts para um consumidor podem ser estendidos, enviando uma pulsação. Consulte Consumindo como um Grupo para obter mais informações.
Esse erro também pode ocorrer ao fazer o pipeline de (commitOnGet=false
) e nenhum commit ocorreu por um tempo significativo (mais de 30 segundos).
A solicitação falha com uma mensagem "Não é possível fazer parsing do corpo JSON" e um erro 400
Ao enviar uma solicitação ao serviço Streaming, você poderá ver uma mensagem de erro semelhante à seguinte:
(400, Unable to parse JSON body)
Esse erro geralmente significa que o corpo JSON contém uma entrada em um formato inválido.
As solicitações do SDK do Ruby falharam com uma mensagem "Não é possível fazer parsing do corpo JSON" e um erro 400
Ao enviar uma solicitação ao serviço Streaming usando o SDK do Ruby, você poderá ver uma mensagem de erro semelhante à seguinte:
Unable to parse JSON body, 'status': 400, 'code': 'InvalidParameter'
O SDK do Ruby não executa nenhuma codificação. Você deve usar Base64
para codificar as strings que são enviadas nos campos de chave e valor. Por exemplo:
msgs << OCI::Streaming::Models::PutMessagesDetailsEntry.new(key: Base64.strict_encode64(k), value: Base64.strict_encode64(record.to_json))
if msgs.length > 0
res = @oss_client.put_messages(@stream_ocid, OCI::Streaming::Models::PutMessagesDetails.new(messages: msgs))
end
Diagnosticando e Solucionando Problemas do Streaming e do Kafka
Falha na criação da configuração do Kafka Connect
Ao tentar criar uma configuração do Kafka Connect, você poderá ver uma mensagem de erro, como a seguinte:
You are not authorized to create Kafka Connect Configurations
Para criar uma configuração do Kafka Connect, você precisa criar a política correta do serviço IAM em sua tenancy. Por exemplo:
Allow group xyz to manage connect-harnesses in tenancy
Para obter mais informações, consulte Política do Serviço IAM Obrigatória.