Flink Bigtable-Connector

Apache Flink ist ein Framework für die Streamverarbeitung, mit dem Sie Daten in Echtzeit bearbeiten können. Wenn Sie eine Bigtable-Tabelle haben, können Sie mit einem Flink Bigtable-Connector Daten aus der angegebenen Datenquelle streamen, serialisieren und in Bigtable schreiben. Mit dem Connector können Sie entweder über die Apache Flink Table API oder die Datastream API Folgendes tun:

  1. Pipeline erstellen
  2. Werte aus Ihrer Datenquelle in Bigtable-Mutationseinträge serialisieren
  3. Schreiben Sie diese Einträge in Ihre Bigtable-Tabelle.

In diesem Dokument wird der Flink Bigtable-Connector beschrieben und Sie erfahren, was Sie vor der Verwendung wissen müssen. Bevor Sie dieses Dokument lesen, sollten Sie mit Apache Flink, dem Bigtable-Speichermodell und Bigtable-Schreibvorgängen vertraut sein.

Wenn Sie den Connector verwenden möchten, muss bereits eine Bigtable-Tabelle vorhanden sein, die als Datensenke dient. Sie müssen die Spaltenfamilien der Tabelle erstellen, bevor Sie die Pipeline starten. Spaltenfamilien können nicht beim Schreiben erstellt werden. Weitere Informationen finden Sie unter Tabellen erstellen und verwalten.

Der Connector ist auf GitHub verfügbar. Informationen zur Installation des Connectors finden Sie im Repository Flink Bigtable Connector. Codebeispiele zur Verwendung des Connectors finden Sie im Verzeichnis flink-examples-gcp-bigtable.

Serializer

Der Flink-Connector bietet drei integrierte Serializer, mit denen Sie Daten in Bigtable-Mutationseinträge konvertieren können:

  • GenericRecordToRowMutationSerializer: Für AVRO-GenericRecord-Objekte
  • RowDataToRowMutationSerializer: Für Flink-RowData-Objekte
  • FunctionRowMutationSerializer: Für benutzerdefinierte Serialisierungslogik mit einer bereitgestellten Funktion

Sie können auch einen benutzerdefinierten Serializer erstellen, der von BaseRowMutationSerializer erbt.

Serialisierungsmodi

Wenn Sie den Flink-Connector verwenden, können Sie einen von zwei Serialization-Modi auswählen. Mit dem Modus wird angegeben, wie Ihre Quelldaten serialisiert werden, um Ihre Bigtable-Spaltenfamilien darzustellen und dann Ihre Bigtable-Tabelle zu schreiben. Sie müssen einen der beiden Modi verwenden.

Modus „Spaltenfamilie“

Im Spaltenfamilienmodus werden alle Daten in eine einzige angegebene Spaltenfamilie geschrieben. Verschachtelte Felder werden nicht unterstützt.

Modus für verschachtelte Zeilen

Im Modus für verschachtelte Zeilen steht jedes Feld der obersten Ebene für eine Spaltenfamilie. Der Wert des Felds der obersten Ebene (RowKeyField) ist ein anderes Feld. Der Wert dieses Felds enthält ein Zeilenobjekt für jede Spalte in der Bigtable-Spaltenfamilie. Im Modus für verschachtelte Zeilen müssen alle Felder mit Ausnahme des Felds der obersten Ebene Zeilenobjekte sein. Doppelt verschachtelte Zeilen werden nicht unterstützt.

Genau einmalige Verarbeitung

In Apache Flink bedeutet genau einmal, dass jeder Datensatz in einem Stream genau einmal verarbeitet wird. So werden doppelte Verarbeitungen oder Datenverluste verhindert, auch bei Systemausfällen.

Eine Bigtable-mutateRow-Mutation ist standardmäßig idempotent. Daher wird durch eine Schreibanfrage mit demselben Zeilenschlüssel, derselben Spaltenfamilie, derselben Spalte, demselben Zeitstempel und demselben Wert keine neue Zelle erstellt, auch wenn der Vorgang wiederholt wird. Wenn Sie Bigtable als Datensenke für ein Apache Flink-Framework verwenden, wird das Verhalten „Einmal genau einmal“ automatisch aktiviert, sofern Sie den Zeitstempel bei Wiederholungen nicht ändern und der Rest Ihrer Pipeline ebenfalls die Anforderungen für „Einmal genau einmal“ erfüllt.

Weitere Informationen zur „Exactly-Once“-Semantik finden Sie unter End-to-End-Verarbeitung mit genau einmal in Apache Flink.

Nächste Schritte