Risoluzione dei problemi relativi allo streaming
Scopri come risolvere i problemi comuni con lo streaming.
Questo argomento descrive vari problemi relativi a Oracle Cloud Infrastructure Streaming e come è possibile risolverli. I dettagli sugli errori API comuni restituiti da tutti i servizi sono riportati in Errori API.
Risoluzione dei problemi relativi all'accesso e alle autorizzazioni
La richiesta restituisce un messaggio di "eccezione di elaborazione durante la comunicazione" e un errore -1
Quando si utilizza il client di streaming per inviare una richiesta, è possibile che venga visualizzato il seguente messaggio di errore:
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
Questo errore è correlato al client o all'ambiente del client. Il servizio di streaming non lo invia, il che significa che la richiesta non è mai arrivata al servizio.
Assicurarsi di poter raggiungere l'endpoint di streaming. Puoi utilizzare telnet per testare la connettività ai nostri endpoint pubblici. Lo streaming attualmente utilizza le porte 443 e 9092. La porta 443 viene utilizzata dall'API di streaming e dagli SDK di Oracle Cloud Infrastructure. La porta 9092 viene utilizzata dal protocollo Kafka. Il test telnet deve specificare la porta appropriata per il caso d'uso.
ad esempio:
telnet streams.<region>.streaming.oci.oraclecloud.com 443
telnet streams.<region>.streaming.oci.oraclecloud.com 9092
Una connessione riuscita al servizio di streaming restituisce un messaggio Connected to cell-1.streaming.region.oci.oraclecloud.com.
.
Se telnet restituisce un messaggio Unable to connect to remote host
, analizzare la rete per individuare eventuali problemi di blocco, ad esempio criteri firewall o regole di gruppo di sicurezza di rete.
La richiesta restituisce un messaggio NotAuthorizedOrNotFound e un errore 404
Quando si invia una richiesta a Streaming, è possibile che venga visualizzato un messaggio di errore simile al seguente:
com.oracle.bmc.model.BmcException: (404, NotAuthorizedOrNotFound,false)
Unknown stream ocid1.stream.oc1.phx.exampleuniqueID.
(opc-request-id: <opc_request_id>)
Un errore 404 di solito significa che la risorsa necessaria non viene trovata o che non si dispone dell'accesso ad essa. Un esempio è quando manca il criterio stream-push, il flusso è stato eliminato o non è accessibile. Assicurarsi che tutte le autorizzazioni siano impostate correttamente.
La richiesta restituisce un messaggio "Not Found" e un errore 404
Quando si invia una richiesta a Streaming, è possibile che venga visualizzato un messaggio di errore simile al seguente:
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
Questo errore indica un problema relativo all'autorizzazione. Assicurarsi che tutte le autorizzazioni siano impostate correttamente.
La richiesta restituisce un messaggio "Gli spazi di nome tag o le chiavi tag non sono autorizzati o non sono stati trovati"
Questo errore indica che nel flusso è presente un tag che l'utente non è autorizzato a utilizzare. Rimuovere la tag o autorizzare l'utente. Per ulteriori informazioni, vedere Tag risorsa.
La richiesta restituisce un messaggio "bad handshake" e un errore 104
Quando si invia una richiesta a Streaming, è possibile che venga visualizzato un messaggio di errore simile al seguente:
SSLError(SSLError(\"bad handshake: SysCallError(104, 'ECONNRESET'.))
Questo errore in genere indica che il sistema non dispone della CA con cui sono stati firmati i certificati. Potrebbe essere necessario installare il package ca-certificates sull'host o estrarre il certificato CA dall'endpoint di destinazione e importarlo nel truststore di sistema utilizzando il comando update-ca-trust
.
Limiti e limitazione della risoluzione dei problemi
Limiti sulle risorse di streaming descrive i limiti del servizio e delle risorse che potrebbero determinare gli scenari riportati di seguito.
Errore parziale
Lo streaming supporta errori parziali causati dalla limitazione, per partizione. Quando si verifica un errore parziale, il servizio restituisce un codice di stato 200
e indica l'errore nel payload della risposta.
Se un'intera richiesta è limitata, Streaming restituisce un codice di stato 429
.
La richiesta restituisce un "messaggio di troppe richieste" e un errore 429
Quando si invia una richiesta a Streaming, è possibile che venga visualizzato un messaggio di errore che include quanto riportato di seguito.
(429, Too many requests)
Questo errore è causato dal meccanismo di limitazione nel servizio. Indica che vengono ricevute troppe richieste al secondo per partizione.
Se questo errore si verifica sul lato produttore, assicurarsi che la velocità di scrittura dei dati totale di 1 MB al secondo per partizione non venga superata da:
- Riduzione della quantità di richieste al secondo.
- Riduzione della dimensione dei messaggi mediante l'esecuzione di batch.
Se questo errore si verifica sul lato consumer, assicurarsi che:
- Il cursore utilizza
commitOnGet(true)
. - Riduci il numero di richieste, tenendo presente che la frequenza massima di lettura dei dati è di 5 richieste GET al secondo per partizione per gruppo di consumer.
limit
viene impostato per ogni richiesta GET.
La richiesta restituisce un messaggio "La dimensione della richiesta è limitata a 1 messaggio MiB" e un errore 400
Quando si invia una richiesta a Streaming, è possibile che venga visualizzato un messaggio di errore simile al seguente:
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)
Questo errore si verifica perché la chiamata PutMessages
inviata al servizio è troppo grande. La dimensione deve essere minore o uguale a 1 MB.
Creazione del flusso non riuscita con un messaggio "Si supera il numero di partizioni consentite"
Questo errore si verifica quando si tenta di creare un numero di partizioni superiore a quello consentito dalla tenancy. È possibile richiedere un aumento.
Risoluzione dei problemi relativi a produzione e consumo
I messaggi non vengono visualizzati nella console dopo la pubblicazione in un flusso
Selezionare Aggiorna per visualizzare i primi 100 messaggi. Per ulteriori informazioni, vedere Visualizzazione di messaggi recenti in un flusso.
Poiché i flussi che utilizzano endpoint privati non sono accessibili da Internet, i messaggi non vengono visualizzati nella console.
I consumer ricevono un messaggio "Il cursore non è compreso nel periodo di conservazione ed è ora non valido" e un errore 400
Quando si richiedono messaggi da un flusso, un consumer potrebbe visualizzare un messaggio di errore come il seguente:
(400, InvalidParameter, false) The cursor is outside the retention period and is now invalid
Questo errore indica che gli offset memorizzati per una o più partizioni sono caduti dietro l'orizzonte di trim. Si è verificata una certa perdita di dati e i dati prodotti nel flusso non sono più disponibili per l'utilizzo. I dati che non rientrano nel periodo di conservazione non possono essere recuperati. A questo punto, l'amministratore deve decidere la migliore linea d'azione per il caso d'uso.
Questo errore può verificarsi se non si commettono compensazioni regolarmente o se il consumatore è costantemente indietro. Per maggiori informazioni, vedere Getting Messages.
Per reimpostare il cursore per le istanze all'interno di un gruppo di consumer è necessaria una chiamata manuale al metodo UpdateGroup
.
I consumer ricevono un messaggio "Prova a eseguire il commit della partizione non riservata" e un errore 400
Quando si richiedono messaggi da un flusso, un consumer che fa parte di un gruppo di consumer potrebbe visualizzare un messaggio di errore come il seguente:
(400, InvalidParameter, false) Trying to commit unreserved partition
Questo errore indica che il consumer ha tentato di eseguire il commit di un offset per una partizione non riservata per quel particolare consumer. Questo errore può verificarsi quando il consumer sembra essere scaduto, le partizioni vengono ribilanciate a un altro consumer e quindi il consumer tenta di eseguire il commit degli offset. Il timeout predefinito è di 30 secondi per un consumer. I timeout per un consumatore possono essere estesi inviando un heartbeat. Per ulteriori informazioni, vedere Consumo come gruppo.
Questo errore può verificarsi anche durante il pipelining (commitOnGet=false
) e non si sono verificati commit per un periodo di tempo significativo (oltre 30 secondi).
Richiesta non riuscita con un messaggio "Impossibile analizzare il corpo JSON" e un errore 400
Quando si invia una richiesta a Streaming, è possibile che venga visualizzato un messaggio di errore simile al seguente:
(400, Unable to parse JSON body)
Questo errore in genere indica che il corpo JSON contiene una voce in un formato non valido.
Richieste SDK Ruby non riuscite con un messaggio "Impossibile analizzare il corpo JSON" e un errore 400
Quando si invia una richiesta a Streaming utilizzando l'SDK Ruby, potrebbe essere visualizzato un messaggio di errore simile al seguente:
Unable to parse JSON body, 'status': 400, 'code': 'InvalidParameter'
L'SDK Ruby non esegue alcuna codifica. È necessario utilizzare Base64
per codificare le stringhe inviate nei campi chiave e valore. Ad esempio:
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
Risoluzione dei problemi relativi allo streaming e a Kafka
Creazione della configurazione di Kafka Connect non riuscita
Quando si tenta di creare una configurazione di Kafka Connect, potrebbe essere visualizzato un messaggio di errore simile al seguente:
You are not authorized to create Kafka Connect Configurations
Per creare una configurazione Kafka Connect, devi creare il criterio IAM corretto nella tua tenancy. Ad esempio:
Allow group xyz to manage connect-harnesses in tenancy
Per ulteriori informazioni, vedere Criterio IAM obbligatorio.