Flink Bigtable 连接器
Apache Flink 是一种流处理框架,可让您实时处理数据。如果您有 Bigtable 表,可以使用 Flink Bigtable 连接器将指定数据源中的数据流式传输、序列化并写入 Bigtable。借助该连接器,您可以使用 Apache Flink Table API 或 Datastream API 执行以下操作:
- 创建流水线
- 将数据源中的值序列化为 Bigtable mutation 条目
- 将这些条目写入 Bigtable 表
本文档介绍了 Flink Bigtable 连接器以及在使用该连接器之前需要了解的相关信息。在阅读本文档之前,您应该先熟悉 Apache Flink、Bigtable 存储模型和 Bigtable 写入。
如需使用该连接器,您必须拥有一个预先存在的 Bigtable 表,用作数据接收器。您必须先创建表的列族,然后才能启动流水线;列族无法在写入时创建。如需了解详情,请参阅创建和管理表。
您可以在 GitHub 上找到该连接器。如需了解如何安装连接器,请参阅 Flink Bigtable 连接器代码库。如需查看演示如何使用连接器的代码示例,请参阅 flink-examples-gcp-bigtable 目录。
序列化程序
Flink 连接器具有三个内置的序列化程序,可用于将数据转换为 Bigtable mutation 条目:
GenericRecordToRowMutationSerializer
:适用于 AVROGenericRecord
对象RowDataToRowMutationSerializer
:适用于 FlinkRowData
对象FunctionRowMutationSerializer
:用于使用提供的函数实现自定义序列化逻辑
您也可以选择创建自己的自定义序列化程序,该序列化程序继承自 BaseRowMutationSerializer
。
序列化模式
使用 Flink 连接器时,您可以选择以下两种序列化模式之一。模式用于指定如何序列化源数据以表示 Bigtable 列族,然后将数据写入 Bigtable 表。您必须使用其中一种模式。
列族模式
在列族模式下,所有数据都会写入单个指定的列族。不支持嵌套字段。
嵌套行模式
在嵌套行模式下,每个顶级字段都表示一个列族。顶级字段 (RowKeyField) 的值是另一个字段。相应字段的值包含 Bigtable 列族中每个列的行对象。在嵌套行模式下,除顶级字段之外的所有字段都必须是行对象。不支持双重嵌套的行。
一次性处理
在 Apache Flink 中,“正好一次”是指流中的每条数据记录都只会被处理一次,即使发生系统故障,也不会出现重复处理或数据丢失的情况。
Bigtable mutateRow
变更默认情况下是幂等的,因此即使重试,具有相同行键、列族、列、时间戳和值的写入请求也不会创建新单元格。这意味着,当您将 Bigtable 用作 Apache Flink 框架的数据接收器时,只要您不更改重试中的时间戳,并且流水线的其余部分也满足“恰好一次”的要求,您就可以自动获得“恰好一次”的行为。
如需详细了解“正好一次”语义,请参阅 Apache Flink 中的端到端“正好一次”处理概览。