Flink Bigtable 连接器

Apache Flink 是一个流处理框架,可让您实时处理数据。如果您有 Bigtable 表,则可以使用 Flink Bigtable 连接器将数据从指定的数据源流式传输、序列化和写入 Bigtable。借助该连接器,您可以使用 Apache Flink Table API 或 Datastream API 执行以下操作:

  1. 创建流水线
  2. 将数据源中的值序列化为 Bigtable 更改条目
  3. 将这些条目写入 Bigtable 表

本文档介绍了 Flink Bigtable 连接器,以及在使用前需要了解的内容。在阅读本文档之前,您应先熟悉 Apache FlinkBigtable 存储模型Bigtable 写入

如需使用该连接器,您必须有一个现有的 Bigtable 表用作数据接收器。您必须先创建表的列族,然后才能启动流水线;无法在写入时创建列族。如需了解详情,请参阅创建和管理表

该连接器可在 GitHub 上找到。如需了解如何安装连接器,请参阅 Flink Bigtable 连接器代码库。如需查看演示如何使用该连接器的代码示例,请参阅 flink-examples-gcp-bigtable 目录。

序列化器

Flink 连接器有三个内置序列化器,可用于将数据转换为 Bigtable 更改条目:

  • GenericRecordToRowMutationSerializer:适用于 AVRO GenericRecord 对象
  • RowDataToRowMutationSerializer:对于 Flink RowData 对象
  • FunctionRowMutationSerializer:对于使用提供的函数的自定义序列化逻辑

您还可以选择创建自己的自定义序列化程序,继承 BaseRowMutationSerializer

序列化模式

使用 Flink 连接器时,您可以选择以下两种序列化模式之一。该模式指定如何序列化源数据以表示 Bigtable 列族,然后写入 Bigtable 表。您必须使用其中一种模式。

列族模式

在列族模式下,所有数据都会写入单个指定的列族。不支持嵌套字段。

嵌套行模式

在嵌套行模式下,每个顶级字段都代表一个列族。顶级字段 (RowKeyField) 的值是另一个字段。该字段的值包含 Bigtable 列族中每个列的行对象。在嵌套行模式下,除顶级字段之外的所有字段都必须是行对象。不支持双重嵌套行。

一次性处理

在 Apache Flink 中,正好一次是指流中每条数据记录都只处理一次,从而防止任何重复处理或数据丢失,即使在系统发生故障时也是如此。

Bigtable mutateRow 更改默认是幂等的,因此具有相同行键、列族、列、时间戳和值的写入请求不会创建新单元格,即使重试也是如此。这意味着,当您将 Bigtable 用作 Apache Flink 框架的数据接收器时,只要您不更改重试中的时间戳,并且流水线的其余部分也满足“恰好一次”要求,便会自动获得“恰好一次”行为。

如需详细了解“正好一次”语义,请参阅 Apache Flink 中端到端“正好一次”处理概览

后续步骤