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:
- Pipeline erstellen
- Werte aus Ihrer Datenquelle in Bigtable-Mutations-Einträge serialisieren
- Schreiben Sie diese Einträge in Ihre Bigtable-Tabelle.
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 auf GitHub verfügbar. Informationen zur Installation des Connectors finden Sie im Repository Flink Bigtable Connector. Codebeispiele für die 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
-ObjekteRowDataToRowMutationSerializer
: Für Flink-RowData
-ObjekteFunctionRowMutationSerializer
: 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 serialisiert werden, um Ihre Bigtable-Spaltenfamilien darzustellen, und dann in Ihre 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.
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 Sie den Zeitstempel bei Wiederholungsversuchen nicht ändern und der Rest Ihrer Pipeline ebenfalls die Exactly-Once-Anforderungen erfüllt.
Weitere Informationen zur „Exactly-Once“-Semantik finden Sie unter An overview of end-to-end exactly-once processing in Apache Flink.
Nächste Schritte
- Bigtable-Beam-Connector
- Bigtable Kafka Connect-Senkenconnector
- Integrationen in Bigtable
- Datastream API-Referenz