Solución de problemas de Streaming
Descubra cómo solucionar problemas comunes con Streaming.
En este tema se tratan varias incidencias relacionadas con Oracle Cloud Infrastructure Streaming y cómo puede solucionarlas. En Errores de API se detallan los errores de API comunes que devuelven todos los servicios.
Solución de problemas de acceso y permisos
La solicitud devuelve un mensaje que indica una excepción de procesamiento durante la comunicación y el error -1
Al utilizar el cliente de Streaming para enviar una solicitud, es posible que se muestre el siguiente mensaje de error:
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 error está relacionado con el cliente o el entorno del cliente. El servicio Streaming no lo envía, lo que significa que la solicitud no ha llegado al servicio.
Asegúrese de que puede acceder al punto final de Streaming. Puede utilizar telnet para probar la conectividad a nuestros puntos finales públicos. Streaming utiliza actualmente los puertos 443 y 9092. El puerto 443 lo utilizan la API de Streaming y los SDK de Oracle Cloud Infrastructure. El puerto 9092 lo utiliza el protocolo de Kafka. La prueba de telnet debe especificar el puerto adecuado para su caso de uso.
Por ejemplo:
telnet streams.<region>.streaming.oci.oraclecloud.com 443
telnet streams.<region>.streaming.oci.oraclecloud.com 9092
Una conexión correcta al servicio Streaming devuelve un mensaje Connected to cell-1.streaming.region.oci.oraclecloud.com.
.
Si telnet devuelve un mensaje Unable to connect to remote host
, investigue la red para detectar posibles problemas de bloqueo, como una política de firewall o reglas de grupo de seguridad de red.
La solicitud devuelve el mensaje NotAuthorizedOrNotFound y el error 404
Al enviar una solicitud a Streaming, es posible que se muestre un mensaje de error similar al siguiente:
com.oracle.bmc.model.BmcException: (404, NotAuthorizedOrNotFound,false)
Unknown stream ocid1.stream.oc1.phx.exampleuniqueID.
(opc-request-id: <opc_request_id>)
El error 404 suele significar que no se encuentra el recurso necesario o que no tiene acceso a este. Un ejemplo es cuando falta la política stream-push, o el flujo se ha suprimido o no se puede acceder a él. Asegúrese de que todos los permisos estén configurados correctamente.
La solicitud devuelve un mensaje que indica que no se ha encontrado y el error 404
Al enviar una solicitud a Streaming, es posible que se muestre un mensaje de error similar al siguiente:
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 error indica una incidencia relacionada con el permiso. Asegúrese de que todos los permisos estén configurados correctamente.
La solicitud devuelve un mensaje que indica que no se han encontrado los siguientes espacios de nombres o claves de etiquetas o no están autorizados
Este error sugiere que hay una etiqueta en el flujo que el usuario no está autorizado a utilizar. Elimine la etiqueta o autorice al usuario. Consulte Etiquetas de recursos para obtener más información.
La solicitud devuelve un mensaje de establecimiento de comunicación incorrecto y el error 104
Al enviar una solicitud a Streaming, es posible que se muestre un mensaje de error similar al siguiente:
SSLError(SSLError(\"bad handshake: SysCallError(104, 'ECONNRESET'.))
Este error generalmente significa que el sistema no tiene la autoridad de certificación (CA) que firmó los certificados. Puede que deba instalar el paquete ca-certificates en el host o extraer el certificado de CA del punto final de destino e importarlo en el almacén de confianza del sistema mediante el comando update-ca-trust
.
Solución de problemas de límites y limitación
En Límites sobre los recursos de Streaming se describen los límites de servicio y recursos que pueden dar lugar a los siguientes escenarios.
Fallos parciales
Streaming soporta fallos parciales causados por la limitación por partición. Cuando se produce un fallo parcial, el servicio devuelve el código de estado 200
e indica el fallo en la carga útil de respuesta.
Si se limita toda una solicitud, Streaming devuelve el código de estado 429
.
La solicitud devuelve un mensaje que indica que hay demasiadas solicitudes y el error 429
Al enviar una solicitud a Streaming, es posible que se muestre un mensaje de error que incluya lo siguiente:
(429, Too many requests)
Este error se debe al mecanismo de limitación del servicio. Indica que se están recibiendo demasiadas solicitudes por segundo por partición.
Si este error se produce en el lado del productor, asegúrese de que no se supere el ratio total de escritura de datos de 1 MB por segundo por partición mediante:
- La reducción de la cantidad de solicitudes por segundo.
- La reducción del tamaño de los mensajes por lotes.
Si este error se produce en el lado del consumidor, asegúrese de que:
- El cursor utilice
commitOnGet(true)
. - Reduce el número de solicitudes, teniendo en cuenta que el ratio máximo de lectura de datos es de 5 solicitudes GET por segundo por partición por grupo de consumidores.
limit
esté definido para cada solicitud GET.
La solicitud devuelve un mensaje que indica que el tamaño de la solicitud está limitado a 1 MiB y el error 400
Al enviar una solicitud a Streaming, es posible que se muestre un mensaje de error similar al siguiente:
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 error se produce porque la llamada PutMessages
enviada al servicio es demasiado grande. El tamaño debe ser menor o igual que 1 MB.
La creación del flujo falla con un mensaje que indica que ha excedido el número de particiones permitidas.
Este error se produce cuando intenta crear más particiones de las permitidas para su arrendamiento. Puede solicitar un aumento.
Solución de problemas de producción y consumo
Los mensajes no aparecen en la consola después de publicarse en un flujo
Debe seleccionar Refrescar para mostrar los primeros 100 mensajes. Para obtener más información, consulte Visualización de mensajes recientes en un flujo.
Debido a que no se puede acceder a los flujos que utilizan puntos finales privados desde Internet, sus mensajes no se muestran en la consola.
Los consumidores reciben un mensaje que indica que el cursor está fuera del período de retención y ya no es válido, y el error 400
Al solicitar mensajes de un flujo, el consumidor puede ver un mensaje de error como el siguiente:
(400, InvalidParameter, false) The cursor is outside the retention period and is now invalid
Este error significa que los desplazamientos almacenados para una o más particiones se han quedado atrás con respecto al horizonte de recorte. Se ha producido alguna pérdida de datos y los datos producidos en el flujo ya no están disponibles para su consumo. Los datos que están fuera del período de retención no se pueden recuperar. En este punto, el administrador debe decidir la mejor medida para el caso de uso.
Este error puede producirse si no confirma los desplazamientos de forma regular o si su consumidor se queda atrás constantemente. Para obtener más información, consulte Obtención de mensajes.
Se necesita una llamada manual al método UpdateGroup
para restablecer el cursor para las instancias dentro de un grupo de consumidores.
Los consumidores reciben un mensaje que indica que está intentando confirmar una partición no reservada, y el error 400
Al solicitar mensajes de un flujo, un consumidor que forma parte de un grupo de consumidores puede ver un mensaje de error como el siguiente:
(400, InvalidParameter, false) Trying to commit unreserved partition
Este error significa que el consumidor ha intentado confirmar un desplazamiento para una partición que no estaba reservada para ese consumidor en particular. Este error puede producirse si el consumidor parece que ha sufrido un timeout, las particiones se han vuelto a equilibrar en otro consumidor y, a continuación, el consumidor intenta confirmar desplazamientos. El timeout por defecto es de 30 segundos para un consumidor. Los tiempos de espera de un consumidor se pueden ampliar mediante el envío de un latido. Consulte Consumo como grupo para obtener más información.
Este error también se puede producir si se canaliza (commitOnGet=false
) y no se han producido confirmaciones durante una cantidad significativa de tiempo (más de 30 segundos).
La solicitud falla con un mensaje que indica que no se ha podido analizar el cuerpo JSON, y el error 400
Al enviar una solicitud a Streaming, es posible que se muestre un mensaje de error similar al siguiente:
(400, Unable to parse JSON body)
Este error generalmente significa que el cuerpo JSON contiene una entrada con un formato no válido.
Las solicitudes de SDK de Ruby fallan con un mensaje que indica que no se ha podido analizar el cuerpo JSON, y el error 400
Al enviar una solicitud a Streaming mediante el SDK de Ruby, puede que aparezca un mensaje de error similar al siguiente:
Unable to parse JSON body, 'status': 400, 'code': 'InvalidParameter'
El SDK de Ruby no realiza ninguna codificación. Debe utilizar Base64
para codificar las cadenas que se envían en los campos de clave y valor. Por ejemplo:
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
Solución de problemas de Streaming y Kafka
Fallo al crear la configuración de Kafka Connect
Al intentar crear una configuración de Kafka Connect, puede que aparezca un mensaje de error como el siguiente:
You are not authorized to create Kafka Connect Configurations
Para crear una configuración de Kafka Connect, debe crear la política de IAM correcta en su arrendamiento. Por ejemplo:
Allow group xyz to manage connect-harnesses in tenancy
Para obtener más información, consulte Política de IAM necesaria.