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 einen Flink-Bigtable-Connector verwenden, um Daten aus der angegebenen Datenquelle in Bigtable zu streamen, zu serialisieren und zu schreiben. Mit dem Connector können Sie entweder die Apache Flink Table API oder die Datastream API verwenden, um Folgendes zu tun:

  1. Pipeline erstellen
  2. Werte aus Ihrer Datenquelle in Bigtable-Mutations-Einträge serialisieren
  3. Einträge in Ihre Bigtable-Tabelle schreiben

In diesem Dokument wird der Flink Bigtable-Connector beschrieben und es wird erläutert, was Sie wissen müssen, bevor Sie ihn verwenden. Bevor Sie dieses Dokument lesen, sollten Sie sich mit Apache Flink, dem Bigtable-Speichermodell und Bigtable-Schreibvorgängen vertraut machen.

Wenn Sie den Connector verwenden möchten, benötigen Sie eine vorhandene Bigtable-Tabelle, 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 mit Apache Flink Version 2.1.0 kompatibel und 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.

Serialisierer

Der Flink-Connector hat drei integrierte Serializer, mit denen Sie Daten in Bigtable-Mutations-Einträ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 eigenen benutzerdefinierten Serializer erstellen, der von BaseRowMutationSerializer abgeleitet wird.

Serialisierungsmodi

Wenn Sie den Flink-Connector verwenden, können Sie einen von zwei Serialisierungsmodi auswählen. Der Modus gibt an, wie Ihre Quelldaten in Mutations-Einträge serialisiert werden, die in Spaltenfamilien in Ihrer Bigtable-Tabelle geschrieben werden. Sie müssen entweder den einen oder den anderen Modus verwenden.

Modus der Spaltenfamilie

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

Modus mit verschachtelten Zeilen

Im Modus „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 „Verschachtelte Zeilen“ müssen alle Felder mit Ausnahme des Felds der obersten Ebene Zeilenobjekte sein. Doppelt verschachtelte Zeilen werden nicht unterstützt.

Konfigurationsoptionen

Sie können die Leistung und das Verhalten des Connectors mit verschiedenen Optionen konfigurieren. Weitere Informationen zu diesen Optionen finden Sie in der Connector-Dokumentation auf GitHub.

Genau einmalige Verarbeitung

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

Eine Bigtable-mutateRow-Mutation ist standardmäßig idempotent. Eine Schreibanfrage mit demselben Zeilenschlüssel, derselben Spaltenfamilie, derselben Spalte, demselben Zeitstempel und demselben Wert erstellt also keine neue Zelle, auch wenn sie wiederholt wird. Wenn Sie Bigtable als Datensenke für ein Apache Flink-Framework verwenden, erhalten Sie automatisch das Exactly-Once-Verhalten, sofern die folgenden Bedingungen erfüllt sind:

  • Sie legen den Zeitstempel nicht so fest, dass bei Wiederholungsversuchen der serverseitige Zeitstempel (-1) verwendet wird.
  • Der Rest Ihrer Pipeline erfüllt die Anforderungen für die genau einmalige Verarbeitung.

Weitere Informationen zur „Exactly-Once“-Semantik finden Sie unter An overview of end-to-end exactly-once processing in Apache Flink.

Nächste Schritte