Problembehandlung des Kafka-Konnektors

In diesem Abschnitt wird beschrieben, wie Probleme behoben werden, die beim Erfassen von Daten mithilfe des Kafka-Konnektors auftreten.

Unter diesem Thema:

Tipps zur Problembehandlung

In diesem Abschnitt wird ein methodischer Ansatz zur Behebung von Problemen mit dem Laden von Daten mithilfe des Kafka-Konnektors beschrieben.

Schritt 1: COPY-Verlauf für die Tabelle anzeigen

Fragen Sie den Ladeaktivitätsverlauf für die Zieltabelle ab. Weitere Informationen dazu finden Sie unter COPY_HISTORY-Ansicht. Wenn die COPY_HISTORY-Ausgabe keine erwarteten Dateien enthält, fragen Sie einen früheren Zeitraum ab. Wenn die Dateien Duplikate früherer Dateien waren, wurde die Aktivität möglicherweise im Ladeverlauf aufgezeichnet, als versucht wurde, die ursprünglichen Dateien zu laden.

In der Spalte STATUS wird gezeigt, ob ein bestimmter Satz von Dateien geladen, teilweise geladen oder nicht geladen wurde. Die Spalte FIRST_ERROR_MESSAGE bietet einen Hinweis auf die Ursache, warum ein Ladeversuch nur teilweise erfolgreich war oder fehlgeschlagen ist.

Validieren von Datendateien und Beheben von Fehlern

Wenn Snowpipe keine Daten aus Dateien in den internen Stagingbereich laden konnte, der für das Kafka-Thema erstellt wurde, verschiebt der Kafka-Konnektor die Dateien in den der Zieltabelle zugeordneten speziellen Stagingbereich. Die Syntax zum Verweisen auf einen Tabellen-Stagingbereich lautet @[Namespace.]%Tabellenname.

Wenn ein Satz von Dateien mehrere Probleme aufweist, zeigt die Spalte FIRST_ERROR_MESSAGE der COPY_HISTORY-Ausgabe nur den ersten aufgetretenen Fehler an. Um alle Fehler in den Dateien anzuzeigen, führen Sie eine COPY INTO <Tabelle>-Anweisung aus, wobei die Kopieroption VALIDATION_MODE auf RETURN_ALL_ERRORS gesetzt ist. Die Kopieroption VALIDATION_MODE weist eine COPY-Anweisung an, die zu ladenden Daten zu validieren und Ergebnisse auf Basis der angegebenen Validierungsoption zurückzugeben. Bei Angabe dieser Kopieroption werden keine Daten geladen. Verweisen Sie in der Anweisung auf die Dateien, die Sie mit dem Kafka-Konnektor zu laden versucht haben.

Wenn Probleme mit den Datendateien behoben sind, können Sie die Daten manuell mit einer oder mehreren COPY-Anweisungen laden.

Das folgende Beispiel verweist auf Datendateien im Tabellen-Stagingbereich für die Tabelle mytable in der Datenbank mydb.public und im Schema.

So validieren Sie Datendateien im Tabellen-Stagingbereich und beheben Fehler:

  1. Listen Sie alle Dateien auf, die sich im Tabellen-Stagingbereich befinden (mit LIST):

    LIST @mydb.public.%mytable;
    
    +-----------------+------+----------------------------------+-------------------------------+
    | name            | size | md5                              | last_modified                 |
    |-----------------+------+----------------------------------+-------------------------------|
    | myfile.csv.gz   |  512 | a123cdef1234567890abcdefghijk123 | Tue, 22 Oct 2019 14:20:31 GMT |
    +-----------------+------+----------------------------------+-------------------------------+
    
  2. Rufen Sie alle in der Datei aufgetretenen Fehler ab (mithilfe von COPY INTO Tabelle … VALIDATION_MODE = ‚RETURN_ALL_ERRORS‘)

    COPY INTO mydb.public.mytable FROM @mydb.public.%mytable VALIDATION_MODE = 'RETURN_ALL_ERRORS';
    
  3. Laden Sie die Datendateien vom Tabellen-Stagingbereich in ein lokales Verzeichnis herunter (mit GET):

    Linux/Mac
    GET @mydb.public.%mytable file:///tmp/;
    
    Windows
    GET @mydb.public.%mytable file://C:\temp\;
    
  4. Beheben Sie alle Fehler in den Datendateien.

  5. Stellen Sie die Dateien entweder im Tabellen-Stagingbereich oder im benannten interne Stagingbereich für das Kafka-Thema bereit (mit PUT). In diesem Beispiel stellen wir die Dateien im Tabellen-Stagingbereich bereit und überschreiben die vorhandenen Dateien:

    Linux/Mac
    PUT file:///tmp/myfile.csv @mydb.public.%mytable;
    
    Windows
    PUT file://C:\temp\myfile.csv @mydb.public.%mytable;
    
  6. Laden Sie die Daten in die Zieltabelle (mit COPY INTO Tabelle ohne die Option VALIDATION_MODE). Sie können optional die Kopieroption PURGE = TRUE verwenden, um die Datendateien aus dem Stagingbereich zu löschen, sobald die Daten erfolgreich geladen wurden, oder Sie können die Dateien manuell aus dem Tabellen-Stagingbereich löschen (mithilfe von REMOVE):

    COPY INTO mydb.public.mytable FROM @mydb.public.%mytable PURGE = TRUE;
    

Schritt 2: Protokolldatei des Kafka-Konnektors analysieren

Wenn die COPY_HISTORY-Ansicht keinen Datensatz zum Datenladevorgang enthält, analysieren Sie die Protokolldatei für den Kafka-Konnektor. Der Konnektor schreibt Ereignisse in die Protokolldatei. Beachten Sie, dass der Snowflake-Kafka-Konnektor dieselbe Protokolldatei mit allen Kafka-Konnektor-Plugins teilt. Name und Speicherort dieser Protokolldatei sollten sich in Ihrer Kafka Connect-Konfigurationsdatei befinden. Weitere Informationen dazu finden Sie in der Dokumentation zu Ihrer Apache Kafka-Software.

Durchsuchen Sie die Kafka-Konnektor-Protokolldatei nach Snowflake-spezifischen Fehlermeldungen. Die meisten Nachrichten weisen die Zeichenfolge ERROR auf und enthalten den Dateinamen com.snowflake.kafka.connector..., was das Auffinden der Nachrichten erleichtert.

Folgende Fehler können möglicherweise auftreten:

Konfigurationsfehler

Mögliche Fehlerursachen:

  • Der Konnektor verfügt nicht über die richtigen Informationen, um das Thema zu abonnieren.

  • Der Konnektor verfügt nicht über die richtigen Informationen zum Schreiben in die Snowflake-Tabelle (z. B. ist das Schlüsselpaar für die Authentifizierung möglicherweise falsch).

Beachten Sie, dass der Kafka-Konnektor seine Parameter überprüft. Der Konnektor gibt für jeden inkompatiblen Konfigurationsparameter einen Fehler aus. Die Fehlermeldung wird in die Protokolldatei des Kafka Connect-Clusters geschrieben. Wenn Sie von einem Konfigurationsproblem ausgehen, überprüfen Sie die Fehler in dieser Protokolldatei.

Lesefehler

Der Konnektor konnte aus folgenden Gründen möglicherweise nicht von Kafka lesen:

  • Kafka oder Kafka Connect werden möglicherweise nicht ausgeführt.

  • Die Nachricht wurde möglicherweise noch nicht gesendet.

  • Die Nachricht wurde möglicherweise gelöscht (abgelaufen).

Schreibfehler (Stagingbereich)

Mögliche Fehlerursachen:

  • Unzureichende Berechtigungen auf der Stagingbereich.

  • Der Stagingbereich hat nicht genügend Platz.

  • Der Stagingbereich wurde gelöscht.

  • Ein anderer Benutzer oder Prozess hat unerwartete Dateien in den Stagingbereich geschrieben.

Schreibfehler (Tabelle)

Mögliche Fehlerursachen:

  • Unzureichende Berechtigungen für die Tabelle.

Schritt 3: Kafka Connect überprüfen

Wenn in der Kafka-Verbindungsprotokolldatei kein Fehler gemeldet wird, überprüfen Sie Kafka Connect. Anweisungen zur Problembehandlung finden Sie in der Dokumentation Ihres Apache Kafka-Softwareanbieters.

Beheben spezifischer Probleme

Doppelte Zeilen mit derselben Themenpartition und demselben Offset

Beim Laden von Daten mit Version 1.4 des Kafka-Konnektors (oder höher) können doppelte Zeilen in der Zieltabelle mit derselben Themenpartition und demselben Offset darauf hinweisen, dass der Ladevorgang das Standardausführungstimeout von 300.000 Millisekunden (300 Sekunden) überschritten hat. Überprüfen Sie die Kafka Connect-Protokolldatei auf folgenden Fehler, um die Ursache zu überprüfen:

org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member.

This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing max.poll.interval.ms or by reducing the maximum size of batches returned in poll() with max.poll.records.

at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.sendOffsetCommitRequest(ConsumerCoordinator.java:1061)

Um den Fehler zu beheben, ändern Sie in der Kafka-Konfigurationsdatei (z. B. <Kafka-Verzeichnis>/config/connect-distributed.properties) eine der folgenden Eigenschaften:

consumer.max.poll.interval.ms

Erhöhen Sie das Ausführungstimeout auf 900000 (900 Sekunden).

consumer.max.poll.records

Verringern Sie die Anzahl der mit jeder Operation geladenen Datensätze auf 50.

Melden von Problemen

Wenn Sie sich an den Snowflake-Support wenden, halten Sie bitte die folgenden Dateien bereit:

  • Konfigurationsdatei für Ihren Kafka-Konnektor.

    Wichtig

    Entfernen Sie den privaten Schlüssel, bevor Sie die Datei Snowflake bereitstellen.

  • Kopie des Kafka Konnektor-Protokolls. Stellen Sie sicher, dass die Datei keine vertraulichen oder sensiblen Informationen enthält.