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