Fehler mit Streaming beheben
Erfahren Sie, wie Sie häufige Probleme mit Streaming beheben.
In diesem Thema werden verschiedene Probleme im Zusammenhang mit Oracle Cloud Infrastructure Streaming behandelt. Details zu häufigen API-Fehlern, die von allen Services zurückgegeben werden, finden Sie unter API-Fehler.
Fehler mit Zugriff und Berechtigungen beheben
Anforderung gibt eine Meldung zu einer Verarbeitungsausnahme bei der Kommunikation und einen -1-Fehler zurück
Wenn Sie den Streaming-Client zum Senden einer Anforderung verwenden, wird möglicherweise die folgende Fehlermeldung angezeigt:
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
Dieser Fehler bezieht sich auf den Client oder die Umgebung des Clients. Er wird nicht vom Streaming-Service gesendet Das bedeutet, dass die Anforderung den Service nie erreicht hat.
Stellen Sie sicher, dass Sie Ihren Streamingendpunkt erreichen können. Mit telnet können Sie die Konnektivität zu unseren öffentlichen Endpunkten testen. Streaming verwendet derzeit die Ports 443 und 9092. Port 443 wird von der Streaming-API und den Oracle Cloud Infrastructure-SDKs verwendet. Port 9092 wird vom Kafka-Protokoll verwendet. Ihr telnet-Test muss den entsprechenden Port für Ihren Anwendungsfall angeben.
Beispiel:
telnet streams.<region>.streaming.oci.oraclecloud.com 443
telnet streams.<region>.streaming.oci.oraclecloud.com 9092
Eine erfolgreiche Verbindung zum Streaming-Service gibt eine Connected to cell-1.streaming.region.oci.oraclecloud.com.
-Nachricht zurück.
Wenn telnet eine Unable to connect to remote host
-Nachricht zurückgibt, untersuchen Sie Ihr Netzwerk auf mögliche Blockierungsprobleme, wie eine Firewall-Policy oder Netzwerksicherheitsgruppenregeln.
Anforderung gibt eine NotAuthorizedOrNotFound-Meldung und einen 404-Fehler zurück
Wenn Sie eine Anforderung an Streaming senden, wird möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
com.oracle.bmc.model.BmcException: (404, NotAuthorizedOrNotFound,false)
Unknown stream ocid1.stream.oc1.phx.exampleuniqueID.
(opc-request-id: <opc_request_id>)
Ein 404-Fehler bedeutet in der Regel, dass die benötigte Ressource nicht gefunden wurde oder dass Sie keinen Zugriff darauf haben. Beispiel: Die stream-push-Policy fehlt, der Stream wurde gelöscht, oder er ist nicht zugänglich. Stellen Sie sicher, dass alle Berechtigungen korrekt festgelegt sind.
Anforderung gibt die Meldung "Nicht gefunden" und einen 404-Fehler zurück
Wenn Sie eine Anforderung an Streaming senden, wird möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
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
Dieser Fehler weist auf ein Berechtigungsproblem hin. Stellen Sie sicher, dass alle Berechtigungen korrekt festgelegt sind.
Anforderung gibt die Meldung "Die folgenden Tag-Namespaces/Tagschlüssel sind nicht autorisiert oder wurden nicht gefunden" zurück
Dieser Fehler deutet darauf hin, dass ein Tag im Stream vorhanden ist, für das der Benutzer nicht autorisiert ist. Entfernen Sie das Tag, oder autorisieren Sie den Benutzer. Weitere Informationen finden Sie unter Ressourcentags.
Anforderung gibt eine Meldung zu einem fehlerhaften Handshake und einen 104-Fehler zurück
Wenn Sie eine Anforderung an Streaming senden, wird möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
SSLError(SSLError(\"bad handshake: SysCallError(104, 'ECONNRESET'.))
Dieser Fehler bedeutet in der Regel, dass Ihr System nicht über die CA verfügt, von der die Zertifikate signiert wurden. Möglicherweise müssen Sie das Package "ca-certificates" auf Ihrem Host installieren oder das CA-Zertifikat vom Zielendpunkt abrufen und mit dem Befehl update-ca-trust
in Ihren System-Truststore importieren.
Fehler mit Limits und Throttling beheben
Unter Limits für Streaming-Ressourcen werden die Service- und Ressourcenlimits beschrieben, die zu den folgenden Szenarios führen können.
Teilfehler
Streaming unterstützt Teilfehler, die durch Throttling pro Partition verursacht werden. Wenn ein Teilfehler auftritt, gibt der Service einen 200
-Statuscode zurück und gibt den Fehler in der Antwort-Payload an.
Wenn eine gesamte Anforderung gedrosselt wird, gibt Streaming einen 429
-Statuscode zurück.
Anforderung gibt die Meldung "Zu viele Anforderungen" und einen 429-Fehler zurück
Wenn Sie eine Anforderung an Streaming senden, wird möglicherweise eine Fehlermeldung angezeigt, die Folgendes enthält:
(429, Too many requests)
Dieser Fehler wird durch den Throttling-Mechanismus im Service verursacht. Er gibt an, dass zu viele Anforderungen pro Sekunde und Partition empfangen werden.
Wenn dieser Fehler auf der Producerseite auftritt, stellen Sie sicher, dass die gesamte Datenschreibrate von 1 MB pro Sekunde pro Partition nicht überschritten wird. Führen Sie dazu folgende Schritte aus:
- Senken Sie die Anzahl der Anforderungen pro Sekunde.
- Verringern Sie die Nachrichtengröße durch Batching.
Wenn dieser Fehler auf der Consumer-Seite auftritt, stellen Sie Folgendes sicher:
- Der Cursor verwendet
commitOnGet(true)
. - Reduzieren Sie die Anzahl der Anforderungen. Beachten Sie dabei, dass die maximale Datenleserate 5 GET-Anforderungen pro Sekunde pro Partition pro Consumer-Gruppe beträgt.
- Der
limit
-Wert ist für jede GET-Anforderung festgelegt.
Anforderung gibt die Meldung "Anforderungsgröße ist auf 1 MiB begrenzt" und einen 400-Fehler zurück
Wenn Sie eine Anforderung an Streaming senden, wird möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
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)
Dieser Fehler tritt auf, weil der an den Service gesendete PutMessages
-Aufruf zu groß ist. Die Größe muss kleiner oder gleich 1 MB sein.
Streamerstellung nicht erfolgreich mit der Meldung, dass Sie die Anzahl an zulässigen Partitionen überschritten haben
Dieser Fehler tritt auf, wenn Sie versuchen, mehr Partitionen zu erstellen als für Ihren Mandanten zulässig sind. Sie können eine Erhöhung beantragen.
Fehler mit Produktion und Konsum beheben
Nachrichten werden nicht in der Konsole angezeigt, nachdem sie in einem Stream veröffentlicht wurden
Sie müssen Aktualisieren auswählen, um die ersten 100 Nachrichten anzuzeigen. Weitere Informationen finden Sie unter Anzeigen der zuletzt verwendeten Nachrichten in einem Stream.
Da Streams, die private Endpunkte verwenden, nicht über das Internet zugänglich sind, werden ihre Nachrichten nicht in der Konsole angezeigt.
Consumers erhalten die Meldung, dass der Cursor außerhalb des Aufbewahrungszeitraums liegt und jetzt ungültig ist, sowie einen 400-Fehler
Beim Anfordern von Nachrichten aus einem Stream wird einem Consumer möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
(400, InvalidParameter, false) The cursor is outside the retention period and is now invalid
Dieser Fehler bedeutet, dass die für eine oder mehrere Partitionen gespeicherten Offsets hinter den TRIM_HORIZON-Wert gefallen sind. Datenverlust ist aufgetreten, und die im Stream erzeugten Daten sind nicht mehr für den Konsum verfügbar. Daten, die außerhalb des Aufbewahrungszeitraums liegen, können nicht wiederhergestellt werden. An dieser Stelle muss der Administrator die beste Vorgehensweise für den Anwendungsfall bestimmen.
Dieser Fehler kann auftreten, wenn Sie Offsets nicht regelmäßig festschreiben oder Ihr Consumer ständig zurückfällt. Weitere Informationen finden Sie unter Nachrichten abrufen.
Ein manueller Aufruf der UpdateGroup
-Methode ist erforderlich, um den Cursor für die Instanzen innerhalb einer Consumer-Gruppe zurückzusetzen.
Consumers erhalten eine Meldung zu einem versuchten Commit für eine nicht reservierte Partition sowie einen 400-Fehler
Beim Anfordern von Nachrichten aus einem Stream wird einem Consumer in einer Consumer-Gruppe möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
(400, InvalidParameter, false) Trying to commit unreserved partition
Dieser Fehler bedeutet, dass der Consumer versucht hat, einen Offset für eine Partition festzuschreiben, die für diesen Consumer nicht reserviert war. Dieser Fehler kann auftreten, wenn für den Consumer ein Timeout ermittelt wird, Partitionen auf einen anderen Consumer umgerichtet werden und der Consumer dann versucht, Offsets festzuschreiben. Der Standardtimeout beträgt 30 Sekunden für einen Consumer. Timeouts für einen Consumer können durch Senden eines Heartbeats verlängert werden. Weitere Informationen finden Sie unter Als Gruppe konsumieren.
Dieser Fehler kann auch beim Pipelining (commitOnGet=false
) auftreten, wenn keine Commits über einen längeren Zeitraum (mehr als 30 Sekunden) stattgefunden haben.
Anforderung nicht erfolgreich mit einer Meldung, dass der JSON-Body nicht geparst werden kann, und einem 400-Fehler
Wenn Sie eine Anforderung an Streaming senden, wird möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
(400, Unable to parse JSON body)
Dieser Fehler bedeutet im Allgemeinen, dass der JSON-Body einen Eintrag in einem ungültigen Format enthält.
Ruby-SDK-Anforderungen sind mit der Meldung, dass der JSON-Body nicht geparst werden kann, und einem 400-Fehler nicht erfolgreich
Wenn Sie eine Anforderung mit dem Ruby-SDK an Streaming senden, wird möglicherweise eine Fehlermeldung wie die Folgende angezeigt:
Unable to parse JSON body, 'status': 400, 'code': 'InvalidParameter'
Das Ruby-SDK führt keine Codierung durch. Sie müssen Base64
verwenden, um die Zeichenfolgen zu codieren, die in den Schlüssel- und Wertfeldern gesendet werden. Beispiel:
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
Fehler mit Streaming und Kafka beheben
Kafka Connect-Konfiguration kann nicht erstellt werden
Wenn Sie versuchen, eine Kafka Connect-Konfiguration zu erstellen, wird möglicherweise folgende Fehlermeldung angezeigt:
You are not authorized to create Kafka Connect Configurations
Um eine Kafka Connect-Konfiguration anzulegen, müssen Sie die richtige IAM-Policy in Ihrem Mandanten erstellen. Beispiel:
Allow group xyz to manage connect-harnesses in tenancy
Weitere Informationen finden Sie unter Erforderliche IAM-Policy.