常见问题解答

概览

在本主题中,您将找到有关使用 Datastream 的常见问题解答 (FAQ)。此常见问题解答与以下内容相关联:

  • 关于 Datastream 和变更数据捕获 (CDC) 的常见问题
  • MySQL 变更数据捕获 (CDC)
  • Oracle 变更数据捕获 (CDC)
  • 使用 DataStream 的常见用例
  • Datastream 如何与 Google Cloud 数据服务集成
  • Datastream 支持的来源和目标
  • Datastream 的行为和限制
  • 安全性和连接性
  • 处理 Datastream 文件
  • 监控 Datastream
  • 价格
  • 有关 DataStream 的其他信息

关于 Datastream 和变更数据捕获 (CDC) 的常见问题

问题 答案
什么是 Datastream?

Datastream 是一种无服务器且易于使用的变更数据捕获 (CDC) 和复制服务,可让您跨异构数据库和应用可靠地同步数据流,同时将延迟时间缩至最短。Datastream 支持将 Oracle 和 MySQL 数据库中的数据变更流式传输到 Cloud Storage。

该服务可与 Dataflow 模板简单集成,以便在 BigQuery 中呈现最新的具体化视图以用于分析,将数据库复制到 Cloud SQL 或 Cloud Spanner 以便进行数据库同步,或是直接利用 Cloud Storage 中的流来实现事件驱动型架构。如果您要构建可以转换到 BigQuery 的数据流水线,则 Datastream 还可与 Cloud Data Fusion 集成。

什么是 CDC?

CDC 是一种数据集成方法,可让您使用较少的系统资源更快地集成和分析数据。该方法通常读取来源为其自身内部事务完整性而保留的更改日志,从数据源仅拉取最新更改(更新、插入或删除)。

CDC 是一种非常高效的机制,可在将新数据加载到运营数据存储区和数据仓库时限制对来源的影响,并且它可以实现将数据变更增量加载或实时流式传输到数据目的位置,而无需批量加载更新和不方便的批处理窗口。

CDC 可用于许多从不断访问发生的数据变更中获得价值的用例,如分析、跨地理分布系统的数据同步和事件驱动架构。

回填是什么? 除了持续更改之外,Datastream 还使用回填从来源拉取所有现有数据,然后将数据流式传输到目标位置。因此,系统会使用来源的所有历史数据“回填”目标位置。
Datastream 通过哪些方法流式传输数据? Datastream 通过以下两种方法之一将数据从来源流式传输到目标位置:
  • CDC:从来源实时捕获持续更改。
  • 回填:提供表中存在的数据的历史快照。
什么是变更流? 变更流是 Datastream 发送到目标位置(如 Cloud Storage)以供下游使用的事件序列。写入到目标位置的变更流的结果是一组文件,其中包含在一段时间内来自特定数据库表的变更日志事件。这些事件代表从源到该表的插入、更新和删除操作,并且这些事件可以通过事件驱动架构的 Dataflow 等服务在目标位置下游使用和处理。
什么是具体化视图?

具体化视图是目标位置中来源表的一对一最新表示形式。此类视图的一个示例是 Oracle 数据库表,该表中的更改会持续复制到 BigQuery 表。因此,BigQuery 表使用从 Oracle 表流式传输的变更保持最新。

具体化视图通过使用每个变更事件并使用它来更新具体化视图来利用变更流。Datastream 与 Dataflow 集成,利用模板从目标位置拉取变更流事件并相应地更新目标表,从而将具体化视图传送至 BigQuery、Cloud SQL 和 Cloud Spanner 等目标位置。

Datastream 是否需要在来源上安装代理? 您不必在来源上安装代理。Datastream 使用现有接口(如 Oracle LogMiner)从来源中获取数据。
Datastream 的使用对生产数据库的性能影响如何?

在将新数据加载到目标数据存储区和数据仓库时,CDC 是一种高效的机制,用于限制对来源的影响。借助 CDC,您可以实现将数据变更增量加载或实时流式传输到目标位置,从而无需批量加载更新和不方便的批处理窗口。

此外,Datastream 通过限制同时回填任务的数量并让您控制要回填哪些对象以及何时回填,来最大限度地减少初始回填的影响。

您能否将日志文件从来源复制到 Google Cloud? 不能。Datastream 直接查询数据库服务器上的日志,只有指定表的变更才会写入目标位置。
Datastream 能否转移历史数据? 可以。默认情况下,Datastream 会并行 CDC 流,从您指定的来源数据库表中获取所有历史数据。Datastream 可让您灵活地从来源中的部分或所有数据库表获取历史数据。此外,在配置数据流时,您可以选择停用历史回填。
Datastream 支持的最大行大小是多少? Datastream 目前限制为不大于 3 MB 的行。
Datastream 能否保证排序? Datastream 无法保证排序。它为每个事件提供额外的元数据,可用于确保目标存储分区中的最终一致性。通常,可以在 1 小时内实现最终一致性,具体取决于来源、变更的比率和频率以及其他参数。
Datastream 能否保证正好一次传送? 不可以。DataStream 至少传送一次。Datastream 写入每个事件的其他元数据可用于移除重复数据。
Datastream 如何处理来源的架构变更? Datastream 会定期从来源提取架构。但是,在架构提取之间,某些架构变更可能无法检测到,从而可能导致数据差异。我们计划实时捕获数据定义语言事件,这会解决当前的限制。
您是否处理加密的数据库? 是的。
DataStream 是否可以从数据源流式传输特定表和列? 可以。借助 Datastream,您可以指定包含和排除表和架构的列表,以便仅将所需的数据从来源流式传输到目标位置。对于包含的表,您可以排除表的特定列,从而进一步微调要流式传输到目标位置中的数据。但是,无法复制具体化视图。
如何将数据流移至其他项目或区域?
  1. 在配置与现有数据流相同的新区域或项目中创建数据流,但不选中回填历史数据复选框。
  2. 启动创建的数据流
  3. 在您创建的数据流处于 RUNNING 状态后,暂停现有数据流
  4. (可选)选中回填历史数据复选框,修改新数据流。未来添加到数据流中的表中现有数据将从来源流式传输到目的位置。
Datastream 如何处理数据库日志文件中未提交的事务? 当数据库日志文件包含未提交的事务时,如果回滚了任何事务,则数据库会在日志文件中将其反映为“反向”数据操纵语言 (DML) 操作。例如,回滚 INSERT 操作具有相应的 DELETE 操作。Datastream 从日志文件中读取这些操作。
Datastream 的区域可用性如何?

如需查看可使用 Datastream 的区域列表,请参阅 IP 许可名单和区域

MySQL 变更数据捕获 (CDC)

问题 答案
Datastream 如何从 MySQL 获取数据? Datastream 使用 MySQL 的二进制日志从 MySQL 中提取变更事件
Datastream 是否支持 Cloud SQL for MySQL 读取副本实例?

是的,Datastream 支持 5.7 和 8.0 版 Cloud SQL for MySQL 的读取副本实例。

您可以针对这些实例启用二进制日志记录功能。为此,请执行以下 gcloud 命令:


gcloud sql instances patch INSTANCE_NAME -- enable-bin-log

如需了解详情,请参阅读取副本的二进制日志记录功能

Datastream 是否会锁定 MySQL 数据库表?DataStream 为什么需要 LOCK TABLE 权限?

在大多数情况下,Datastream 不需要锁定表。但是,在某些情况下(例如,具有 InnoDB 存储引擎且隔离级别设置为 REPEATABLE READ 的 MySQL 8),Datastream 会在回填期间获取表上的锁定。

Oracle 变更数据捕获 (CDC)

问题 答案
Datastream 如何从 Oracle 获取数据? Datastream 使用 Oracle LogMiner 从 Oracle 的重做日志中提取数据。
Datastream 是否需要 Oracle 的 GoldenGate 许可? 不会。Datastream 使用 Oracle LogMiner 从数据库的重做日志中读取数据。
如果 Oracle LogMiner 不再受支持,会发生什么情况? Oracle 将在未来版本中受支持。目前,Oracle LogMiner 仍可在所有正式版 Oracle 中使用。
Datastream 是否支持对来自 Oracle 数据库的传输中的数据进行加密?

Datastream 支持基于 Oracle 网络服务对传输中的数据加密。Datastream 以 REQUESTED 模式运行。

Datastream 是否支持 Oracle 多租户架构,尤其是容器数据库 (CDB) 和可插入数据库 (PDB)? Datastream 目前不支持 CDB 和 PDB,但已在我们的路线图中。

使用场景

问题 答案
使用 DataStream 的常见使用场景有哪些?

Datastream 是 CDC 和复制服务,这意味着它适用于各种使用场景,这些使用场景可以受益于对持续流式传输变更数据的访问。按照常见程度排序,Datastream 最常见的使用场景如下:

  1. 分析:通过将 Datastream 与 Dataflow 模板集成以将数据加载到 BigQuery 中,您可以获取 BigQuery 中源数据的最新具体化视图。您可以使用这些持续更新的数据为数据构建最新信息中心。例如,这可用于监控系统,并获取有关业务状态的最新数据洞见。
  2. 数据库复制和同步场景:通过将 Datastream 与 Dataflow 模板集成以将数据加载到 Cloud SQL 或 Cloud Spanner 中,您可以获取这些数据库中源数据的最新具体化视图。您可以将目标数据库中持续更新的数据用于进行从数据源到目标位置进行低停机时间数据库迁移,或用于混合云配置,其中数据源和目标位置位于不同的托管环境中。
  3. 事件驱动型架构:基于微服务的现代架构依赖于中央数据中心,这些中心利用来自整个组织的事件不断更新,从而实现事件驱动型。通过持续将事件数据写入 Cloud Storage 等目标位置,您可以构建基于这些目标位置的事件数据的使用的事件驱动型架构。

集成

问题 答案
Datastream 如何与 Google Cloud 数据服务集成?

Datastream 通过提供从来源到各种 Google Cloud 服务的 CDC 数据复制,补充和增强 Google Cloud 数据套件。Datastream 通过与这些服务无缝集成,可以融入更大的 Google Cloud 生态系统中。

Datastream 与以下数据服务集成:

  • Dataflow:Datastream 通过 Dataflow 模板与 Dataflow 集成。这些模板从 Cloud Storage 读取数据并将这些数据加载到 BigQuery、Cloud SQL for PostgreSQL 或 Cloud Spanner 中。这些模板的作用是维护目标位置中复制源表的最新具体化视图。模板在 Dataflow 界面中提供,专用于轻松方便地处理 Datastream 生成的文件。
  • Cloud Data Fusion:Datastream 通过 Cloud Data Fusion 的复制功能为 Oracle 连接器提供支持,从而与 Cloud Data Fusion 集成。您可以创建 Oracle 复制源,由 DataStream 在后台以透明的方式“提供支持”,从而轻松构建数据流水线。此流水线包括丰富的转换,可用于 Datastream 流式传输到 Cloud Data Fusion 的 Oracle 数据。
  • Cloud Storage:Datastream 通过将 Cloud Storage 作为变更流式传输目标位置在其中写入数据,从而与 Cloud Storage 集成。
  • Cloud SQL、Cloud Spanner 和 BigQuery:Datastream 与这些目标数据库集成。使用 Dataflow 模板,您可以维护数据库中的最新具体化视图。

来源和目标位置

问题 答案
Datastream 支持哪些来源和目标位置?
  • 来源:DataStream 支持来自 Oracle 和 MySQL 来源的流式数据,包括云托管数据和自行管理的数据。如需详细了解来源支持,请参阅行为和限制
  • 目标位置:DataStream 支持将数据变更写入文件中,然后这些文件流式传输到 Cloud Storage。然后,您可以使用 Dataflow 模板将这些数据从 Cloud Storage 转移到 BigQuery、Cloud Spanner 和 Cloud SQL for PostgreSQL。
Datastream 是否可以处理加密的数据库? 是的。

行为和限制

问题 答案
Datastream 支持哪些来源版本?

对于 MySQL,Datastream 支持 5.6、5.7 和 8.0 版。支持任何与 MySQL 兼容数据库,包括但不限于:

  • 本地或任何云服务商处的自托管数据库
  • Cloud SQL for MySQL
  • AWS RDS MySQL 和 Aurora MySQL
  • MariaDB
  • Alibaba Cloud PolarDB
  • Percona Server for MySQL

对于 Oracle,Datastream 支持 11g 版本 2 及更高版本(不支持 SCAN 配置、CDB/PDB 或自治数据库中的 RAC)。支持任何与 Oracle 兼容的数据库,包括但不限于:

  • 本地或任何云服务商处的自托管数据库
  • AWS RDS
  • Oracle Cloud
Datastream 如何从来源中提取数据?

对于 MySQL,Datastream 会处理 MySQL 二进制日志以提取变更事件。

对于 Oracle,Datastream 会使用 LogMiner 和补充日志记录设置从 Oracle 的重做日志中提取数据。

您能否将日志文件直接从来源复制到 Google Cloud? Datastream 不会复制整个日志文件,而是直接从数据库服务器查询日志文件,只会将指定表中的变更复制到目标位置。
对于 Oracle 来源,Datastream 是否需要 GoldenGate 许可? Datastream 不需要 GoldenGate 许可,因为它使用 Oracle LogMiner 从数据库的重做日志中读取数据。
新版本不支持 Oracle LogMiner 时,会发生什么情况? Oracle 已停止支持 LogMiner CONTINUOUS_MINE 选项,但 Datastream 不使用此选项,因此该弃用对 Datastream 没有影响。
Datastream 可以处理的数据有哪些限制?

有一般限制、对 MySQL 来源的限制和对 Oracle 来源的限制。

一般限制包括:

  • 吞吐量:约 5 MBPS,行大小上限为 3 MB。
  • 某些数据定义语言 (DDL) 操作在复制期间不受支持,包括:
    • 从表中间删除列。这可能会导致数据差异,因为值与错误的列关联。
    • 更改列的数据类型。这可能会导致数据差异,因为数据未正确映射到正确的 Datastream 统一类型,并且数据可能会损坏。
    • 级联删除会被忽略。
    • 表截断会被忽略。

MySQL 限制包括没有主键且行超过 1 亿行的表不支持的回填。

Oracle 限制包括:

  • 列支持:
    • 某些数据类型不受支持,它们使用 NULL 值进行复制。这些数据类型包括抽象数据类型 (ADT)、ANYDATA、集合 (VARRAY)、BLOB/CLOB/LOB/NCLOBLONGUDTUROWIDXMLType
  • 不支持的 Oracle 功能:
    • 外部表
    • 数据库链接 (dblink)
    • 仅索引表 (IOT)
    • 不复制 Oracle 标签安全 (OLS)。
  • 超过 1 亿行的表不支持回填。

Datastream 生成的每个事件中都包含哪些数据? 每个生成的事件(插入、更新和删除事件)都包含来自来源的整行数据,以及每列的数据类型和值。每个事件还包括可用于建立排序并确保正好一次传送的事件元数据
Datastream 能否保证排序? 虽然 Datastream 不保证排序,但它为每个事件提供了其他元数据。此元数据可用于确保目标位置中的最终一致性。通常,可以在 1 小时内实现最终一致性,具体取决于来源、变更的比率和频率以及其他参数。
Datastream 能否保证正好一次传送? Datastream 为至少一次传送。您可以使用 Datastream 写入每个事件的其他元数据来消除重复数据。
Datastream 如何表示来自来源的数据类型以供下游处理?

Datastream 通过对所有数据源的数据类型进行标准化,使跨数据源的数据下游处理变得简单直接。Datastream 接受原始来源数据类型(例如 MySQL NUMERIC 类型或 Oracle NUMBER 类型),并将其标准化为 Datastream 统一类型

统一类型表示所有可能的来源类型的无损超集,标准化意味着不同来源的数据可以轻松地处理,并以与来源无关的方式在下游进行查询。

如果下游系统需要知道来源数据类型,它可以通过对 Datastream 的架构注册表进行 API 调用来实现此目的。此注册表会存储每个数据源最新的版本控制架构。由于来源数据库架构发生了变化,Schema Registry API 还允许快速进行下游架构偏移解析。

Datastream 如何处理来源中的结构(架构)更改? Datastream 会持续跟踪源数据结构的更改。架构存储在 Datastream 的架构注册表中,每个事件都会在生成架构时引用该架构。这样,Datastream 或其他下游进程就可以实时跟踪架构更改并根据这些更改进行调整,从而确保所有数据均已流式传输并正确加载到目标位置。

安全性和连接性

问题 答案
Datastream 是否是敏感数据的安全服务? Datastream 支持多个安全的专用连接配置,以便在从来源流式传输到目标位置时保护传输中的数据。复制数据后,默认情况下系统会对该数据进行加密,并利用 Cloud Storage 的安全控制措施。Datastream 缓冲的任何数据都会进行静态加密。
哪些连接选项可用于将来源连接到 Datastream?

您可以配置以下三种类型的连接方法

  • IP 许可名单:此方法通过将数据源的 Datastream 区域 IP 地址列入许可名单来为您提供公共连接。创建数据流时,Datastream 会在界面中显示这些 IP 地址。
  • 转发 SSH 隧道:除了将区域 IP 地址列入许可名单之外,此方法还利用客户配置的 SSH 堡垒提供通过公共网络的安全连接。
  • 通过 VPC 对等互连进行专用连接:使用这种方法可通过 Google Cloud 的内部网络连接到你的 Google Cloud 托管的数据库,或者通过在 Datastream 的专用网络和您组织的 Google Cloud VPC 之间建立 VPC 对等互连来利用现有的 VPN 或互连。
如何限制 Datastream 对敏感数据的处理?

通过 Datastream,您可以指定要流式传输到目标位置的特定数据元素(架构、表和列),以及要排除进行流式传输的元素。

数据库日志可能包含数据流定义中已排除的元素中的变更数据。由于您无法在来源处过滤这些元素,因此 Datastream 将读取(但忽略)与元素关联的任何数据。

Datastream 如何确保数据库凭据的安全? 所有用户元数据(包括用于访问数据源的用户名和密码)无论是在传输中还是在静态,都将进行加密。系统会跟踪和审核对此元数据的访问。

处理 Datastream 文件

问题 答案
如何在 Cloud Storage 中创建文件? Datastream 会为每个表创建一个文件夹。在每个文件夹中,Datastream 会在达到用户定义的大小或时间阈值时轮替文件(或创建新文件)。每当检测到架构更改时,Datastream 也会轮替文件。文件名将由唯一的架构键(基于架构的哈希)组成,后跟文件中第一个事件的时间戳。出于安全考虑,这些文件名不应被人们阅读或理解。
如果 Cloud Storage 中的数据未排序,那么事件在加载到目标位置之前如何重新排序? 每个事件都包含多个元数据字段,这些字段唯一标识 Oracle 重做日志中的行。具体而言:
  • rs_id,实际上由三个值组成(例如 0x0073c9.000a4e4c.01d0)。rs_id 唯一标识重做日志中的记录。
  • ssn,当重做日志中的记录过长时使用。因此,Oracle LogMiner 会将记录拆分为多行。
如需对事件进行排序,您需要按 rs_id 的每个部分进行排序,然后按 ssn 排序。
如果为同一时间戳创建多个文件,应该按什么顺序处理它们? 由于无法保证文件内部和文件之间的排序,因此确定文件处理顺序的最佳方法是获取特定时间戳的所有文件中的所有事件,然后使用上述方法应用排序。
如何处理主键更新?活动中是否存在事前和事后信息? row_id 元数据字段唯一标识正在更改的行。为确保数据完整性,请根据与 row_id 字段关联的值整合数据,而不是依赖于主键。

监控 Datastream

问题 答案
如何知道我的所有历史数据何时已复制到目标 Cloud Storage 存储分区? Datastream 提供日志文件中关于其当前状态的信息。系统会创建一个日志条目,用于指示表完成回填的时间。

价格

问题 答案
Datastream 的价格如何?

Datastream 的价格取决于从来源流式传输到目标位置的数据量 (GB)。

如需详细了解 Datastream 的价格信息,请参阅价格

如何计算数据的大小? 费用取决于从来源流式传输到目标位置的原始(未压缩)数据大小。Datastream 仅对流式传输到目标位置的数据收费。
如果您将 Datastream 与 Dataflow 或 Cloud Data Fusion 搭配使用,则需要支付什么费用? 每项服务均单独定价和计费。

其他信息

问题 答案
如果我使用 Datastream 还有其他疑问或问题,该怎么办? 如果您在使用 Datastream 时遇到问题,Google 的支持团队可以为您提供支持。此外,问题排查指南还将处理您在使用 DataStream 时可能会遇到的常见问题。