Flink Bigtable 连接器

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

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

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

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

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

序列化程序

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

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

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

序列化模式

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

列族模式

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

嵌套行模式

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

一次性处理

在 Apache Flink 中,“正好一次”是指流中的每条数据记录都只会被处理一次,即使发生系统故障,也不会出现重复处理或数据丢失的情况。

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

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

后续步骤