常见问题解答

概览

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

  • 关于 Datastream 和变更数据捕获 (CDC) 的常见问题
  • 常规源代码行为和限制
  • MySQL 来源的行为和限制
  • Oracle 来源的行为和限制
  • PostgreSQL 源行为和限制(包括 AlloyDB for PostgreSQL)
  • SQL Server 源行为和限制
  • BigQuery 目标位置行为
  • Cloud Storage 目标位置行为
  • 使用 DataStream 的常见用例
  • Datastream 如何与 Google Cloud 数据服务集成
  • 安全性和连接性
  • 监控 Datastream
  • 价格
  • 有关 DataStream 的其他信息

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

问题 答案
什么是 Datastream?

Datastream 是一种易于使用的无服务器变更数据捕获 (CDC) 和复制服务。借助 Datastream,您可以将 AlloyDB for PostgreSQL、PostgreSQL、MySQL、SQL Server 和 Oracle 等关系型数据库源中的数据无缝复制到 BigQuery 中。Datastream 可提供现代企业所需的规模、速度、安全性和简便性。Datastream 采用无服务器自动扩缩架构,可让您轻松设置 ELT(提取、加载和转换)流水线,以实现低延迟数据复制,从而实现近乎实时的数据分析。

Datastream 还能够跨异构数据库和应用可靠地同步数据流,同时将延迟时间缩至最短。该服务可让您与 Dataflow 模板进行简化集成,将数据库复制到 Cloud SQL 或 Cloud Spanner 以实现数据库同步,或者直接利用 Cloud Storage 中的事件流来实现事件驱动型架构。

Datastream 通过哪些方法流式传输数据? Datastream 通过以下两种方法之一将数据从来源流式传输到目标位置:
  • CDC:从来源实时捕获持续更改。
  • 回填:提供表中存在的数据的历史快照。
什么是 CDC?

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

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

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

回填是什么?

除了持续更改之外,Datastream 还使用回填从来源拉取所有现有数据,然后将数据流式传输到目标位置。因此,系统会使用来源的所有历史数据“回填”目标位置。回填有两种类型:

  • 增量:表的默认回填类型。在增量回填期间,Datastream 会以多个批量的形式从行范围提取数据,并将数据逐批流式传输到目标位置。
  • 完整转储:在完整转储回填期间,Datastream 会一次性拉取所有数据,并将其流式传输到目标位置。
执行回填时是否需要考虑任何限制?

如需了解回填限制,请参阅相应来源类型的已知限制页面:

CDC 和回填操作的推荐顺序是什么? 在大多数情况下,无需考虑任何特殊事项。在数据流上启用回填后,Datastream 会同时执行回填和 CDC。在某些极端情况下(例如,当复制无法使用 Datastream 回填的非常大的表时),您可能需要先将数据加载到 BigQuery 中,然后再启动流。
我可以监控 CDC 和回填操作的状态吗?

您可以监控每个对象的回填状态:

  1. 在 Google Cloud 控制台中,前往数据流页面。
  2. 点击要监控的数据流。
  3. 点击对象标签页。

CDC 状态实际上就是数据流状态。如果 CDC 操作失败,则整个数据流也会失败。

Cloud Monitoring 中提供了其他对象级指标。如需了解详情,请参阅 Cloud Monitoring 文档

变更数据流与复制是什么?

变更数据流是 Datastream 出于下游使用而向目的地发出的一系列事件。将变更数据流写入 Cloud Storage 的结果是一组文件,其中包含特定表中一段时间内的变更日志事件。这些事件表示对该表的插入、更新和删除操作。对于事件驱动型架构等使用场景,这些事件可以由 Dataflow 等服务在 Cloud Storage 下游使用和处理。

在 Datastream 上下文中,复制是指目标位置中来源表的一对一最新表示形式。例如,Oracle 中的某个表,其更改会持续复制到 BigQuery 表,BigQuery 表会使用从 Oracle 表流式传输的更改保持最新。复制通过使用每个更改事件并使用它来更新目标位置来利用变更流。Datastream 支持直接复制到 BigQuery 中,并通过与 Dataflow 集成来支持 Cloud SQL 和 Spanner 等其他目标位置,方法是利用从 Cloud Storage 拉取变更数据流事件的模板并相应地更新目标表。

Datastream 是否需要在来源上安装代理? 您不必在来源上安装代理。Datastream 使用现有接口(例如 Oracle LogMiner)从源中获取数据。
单个数据流中可以包含多少个表? Datastream 在单个数据流中最多可以处理 1 万个表。没有技术原因需要将数据库拆分为多个数据流,但可能需要考虑一些业务注意事项,才能为不同的逻辑流使用不同的数据流,例如,在复制从 PostgreSQL 源复制大型事务时。但是,每个数据流都会增加源数据库的负载。这种负载对 CDC 来说可以忽略不计,但对回填来说可能非常重要。
Datastream 的使用对生产数据库的性能影响如何?

在将新数据加载到目标数据存储区和数据仓库时,CDC 是一种高效的机制,用于限制对来源的影响。CDC 还通过增量加载或近乎实时的数据流向目标,消除了批量加载更新和不便的批处理窗口的需要。

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

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

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

一般来源行为和限制

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

Datastream 支持从 Oracle、MySQL、PostgreSQL、AlloyDB for PostgreSQL 和 SQL Server 来源流式传输数据,包括云托管和自行管理。如需了解特定于来源的版本,请参阅以下页面:

Datastream 是否可以处理加密的数据库? 可以。
Datastream 如何从来源中提取数据?

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

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

对于 PostgreSQL 和 AlloyDB for PostgreSQL,Datastream 依赖于 PostgreSQL 的逻辑解码功能。逻辑解码会显示提交到数据库的所有更改,并允许使用和处理这些更改。

对于 SQL Server,Datastream 使用事务日志跟踪数据操纵语言 (DML) 更改。

您能否将日志文件直接从来源复制到 Google Cloud? Datastream 不会复制整个日志文件,而是直接从数据库服务器查询日志文件,只会将指定表中的变更复制到目标位置。
Datastream 可以处理的数据有哪些限制?

有一般限制,也有适用于特定数据库来源的限制。

一般限制包括:

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

如需了解特定于来源的限制,请参阅以下页面:

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

在向无架构目的地(如 Cloud Storage)写入数据时,Datastream 会对所有来源的数据类型进行标准化,从而简化跨来源的数据下游处理。Datastream 接受原始源数据类型(例如 MySQL 或 PostgreSQL NUMERIC 类型或 Oracle NUMBER 类型),并将其标准化为 Datastream 统一类型

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

Datastream 如何处理来源中的结构(架构)更改? Datastream 会定期从来源提取架构。架构存储在 Datastream 的内部架构注册表中,每个事件在生成时都会引用架构。这样,Datastream 就可以跟踪架构更改并根据这些更改进行调整,从而确保所有数据均已流式传输并正确加载到目标位置。但在两次架构提取之间,系统可能不会检测到某些架构更改,这可能会导致数据差异。
我删除(舍弃)了源数据库中的某个列,但该列仍显示在目标数据库中。为什么? Datastream 不会删除目标位置中的列。您必须手动删除列。此行为是刻意为之,因为在某些情况下,您可能希望在目标位置保留已删除的列。例如,Datastream 会将在来源中重命名列的操作解读为删除一个列并添加另一个列。在这种情况下,您不希望在目标位置丢失原始列。
由于验证失败,数据流无法启动,但我认为这是错误,或者无论如何都想尝试运行数据流。如何才能通过此验证? 您可以添加 force=true 标志并跳过验证检查,以使用 API 启动数据流。请注意,跳过验证并不能保证数据流可以运行,并且如果数据库缺少必要的配置或权限,则可能仍会失败。
我可以重启失败的直播吗?

您可以通过解决 Datastream 报告的错误来修复状态为 Failed 的数据流。如需了解详情,请参阅排查数据流问题

您也可以恢复状态为 Failed permanently 的数据流。如需了解详情,请参阅恢复数据流

Datastream 会锁定数据库表吗?

不需要。Datastream 不需要锁定表。

每个来源的限制页面规定,数据流最多可包含 1 万个表。这是否意味着 Datastream 无法同时对超过 1 万个表并行运行 CDC 操作? 不会。上述限制是针对每个直播的。您可以拥有多个数据流,表总数超过 1 万个。

MySQL 来源的行为和限制

问题 答案
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 用户授予以下权限,才能从 MySQL 数据库复制数据:

  • SELECT
  • REPLICATION SLAVE
  • REPLICATION CLIENT
Datastream 是否支持二进制日志压缩?

不支持,Datastream 不支持使用二进制日志事务压缩来压缩事务事件。停用二进制日志事务压缩,以便在 Datastream 中使用 MySQL 的变更数据捕获功能。

您的组织不允许向其所有表和数据库授予 SELECT 权限。您还可以使用 Datastream 吗?

您可以向要复制的数据库中的特定表或整个架构授予 SELECT 权限。为此,请运行以下命令之一:

GRANT SELECT ON DATABASE_NAME.TABLE_NAME TO USER_NAME@'%';
GRANT SELECT ON DATABASE_NAME.* TO USER_NAME@'%';

替换以下内容:

  • DATABASE_NAME:您的 MySQL 数据库的名称。
  • TABLE_NAME:您要向其授予 SELECT 权限的表的名称。
  • USER_NAME:您要向其授予 SELECT 权限的用户的名称。

如果您想将权限限制为特定主机名,请将 % 字符替换为特定 IP 地址或地址范围。

Oracle 来源行为和限制

问题 答案
Datastream 如何从 Oracle 获取数据? Datastream 使用 Oracle LogMiner 从 Oracle 的重做日志中提取数据。
Datastream 是否需要 Oracle 的 GoldenGate 许可? 不需要。Datastream 不需要 GoldenGate 许可,因为它使用 Oracle LogMiner 从数据库的重做日志中读取数据。
如果 Oracle LogMiner 不再受支持,会发生什么情况? 所有已正式发布的 Oracle 版本仍然支持 Oracle LogMiner,并且 Datastream 将在以后的所有版本中继续支持 LogMiner。Oracle 已停止支持 LogMiner CONTINUOUS_MINE 选项,但 Datastream 不使用此选项,因此该弃用对 Datastream 没有影响。
Datastream 是否支持对来自 Oracle 数据库的传输中的数据进行加密?

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

Datastream 是否支持安全套接字层 (SSL) 和传输层安全 (TLS) 加密?

可以,Datastream 支持使用 TCPS 协议建立与 Oracle 来源的 SSL/TLS 加密连接。

Datastream 是否支持 Oracle 多租户架构,尤其是容器数据库 (CDB) 和可插入数据库 (PDB)? 可以,Datastream 支持 Oracle 多租户架构 (CDB/PDB),但是,您只能在流中复制单个可插入数据库。
您的组织不允许授予 GRANT SELECT ANY TABLE 权限。我还能使用 Datastream 吗?

如果您无法授予 GRANT SELECT ANY TABLE 权限,则可以向以下表格列表授予 SELECT 权限:

  • ALL_COL_COMMENTS
  • ALL_CONS_COLUMNS
  • ALL_CONSTRAINTS
  • ALL_DB_LINKS
  • ALL_EXTERNAL_TABLES
  • ALL_IND_COLUMNS
  • ALL_INDEXES
  • ALL_LOG_GROUPS
  • ALL_MVIEWS
  • ALL_OBJECTS
  • ALL_PART_TABLES
  • ALL_SEQUENCES
  • ALL_SOURCE
  • ALL_SYNONYMS
  • ALL_TAB_COLS
  • ALL_TAB_COLUMNS
  • ALL_TAB_COMMENTS
  • ALL_TABLES
  • ALL_TRIGGERS
  • ALL_TRIGGER_COLS
  • ALL_TYPES
  • ALL_USERS
  • ALL_VIEWS
  • DATABASE_PROPERTIES
  • DBA_ROLE_PRIVS
  • DUAL
  • PRODUCT_COMPONENT_VERSION
  • ROLE_SYS_PRIVS
  • USER_ROLE_PRIVS
  • USER_TAB_PRIVS

如需使用 Datastream 流式传输更改,您还需要对数据流中包含的所有表拥有读取权限。

如需启动数据流,请使用 API 绕过验证。如需了解详情,请参阅开始直播

Datastream 是否支持从 Oracle 读取副本实例进行复制? Datastream 支持从 Oracle 只读副本实例进行复制,前提是该实例根据配置指南进行配置。
Datastream 是否支持 Oracle SCAN RAC 数据库? 是的,可以。不过,您无法使用 Datastream 在 Oracle Real Application Clusters (RAC) 环境中使用单个客户端访问名称 (SCAN) 功能与数据库建立直接连接。要克服此限制,请直接连接到其中一个节点,或使用 Oracle Connection Manager。您还可以使用 HAProxy 等反向代理解决方案创建专用连接配置。

PostgreSQL 源行为和限制

问题 答案
Datastream 如何从 PostgreSQL 获取数据? Datastream 使用 PostgreSQL 的逻辑解码功能从 PostgreSQL 中提取更改事件
Datastream 是否支持从 AlloyDB for PostgreSQL 或 AlloyDB Omni 源进行复制? 是。Datastream 支持这两种来源。如需了解如何配置来源 AlloyDB for PostgreSQL 数据库,请参阅配置 AlloyDB for PostgreSQL 数据库。如需了解如何配置 AlloyDB Omni 源数据库,请参阅配置自行管理的 PostgreSQL 数据库
Datastream 是否支持从 PostgreSQL 读取副本实例进行复制? 读取副本实例无法充当逻辑复制的发布者,因为 PostgreSQL 不支持读取副本中的逻辑解码。
Datastream 是否支持行级安全性 (RLS) Datastream 不支持复制已启用 RLS 的表。不过,您可以使用 BYPASSRLS 子句绕过此限制:
ALTER USER USER_NAME BYPASSRLS;

USER_NAME 替换为 Datastream 用于连接到数据库的用户的名称,以及您要为哪些用户绕过 RLS 政策。

从 PostgreSQL 来源进行复制时,Datastream 是否支持并发 CDC 操作?

不可以。PostgreSQL 复制依赖于复制槽的概念,而复制槽不支持并发连接。一次只能有一个 CDC 任务从复制槽读取数据。例如,如果您从源数据库中删除大量记录,则复制槽可能会因删除事件而过载。对来源的任何后续更改都会延迟,直到复制槽队列中已有的删除事件处理完毕。

如需了解复制大型事务数据时建议采用的方法,请参阅诊断问题

Datastream 是否支持安全套接字层 (SSL) 和传输层安全 (TLS) 加密?

Datastream 支持不需要客户端证书的 SSL/TLS 加密连接。

SQL Server 源代码行为和限制

问题 答案
Datastream 支持哪些 SQL Server 版本? Datastream 支持支持变更数据捕获的 SQL Server 数据库版本。如需查看支持的 SQL Server 版本和版本的完整列表,请参阅版本
Datastream CDC 复制功能对 SQL Server 源的运作方式如何? Datastream 数据注入过程会使用事务日志或变更表,具体取决于来源配置。如需了解详情,请参阅源 SQL Server 数据库
Datastream 要从源 SQL Server 数据库复制数据,至少需要具备哪些权限?

您必须向 Datastream 用户授予以下角色和权限,才能从 SQL Server 数据库复制数据:

对于更改表 CDC 方法:

  • db_owner
  • db_denydatawriter

此外,对于事务日志 CDC 方法:

  • 针对数据库和 sys.fn_dblog 函数的 SELECT 权限
  • dbo.sysjobs 表的 SELECT 权限
  • VIEW SERVER STATE
  • 如需详细了解如何配置来源,请参阅您数据库类型的相应配置页面

为什么在使用事务日志时,您需要进行配置(例如更改轮询间隔和设置截断保护措施)? 使用事务日志从 SQL Server 源复制数据时,如果日志在 Datastream 读取之前被截断,则会发生数据丢失。更改轮询间隔并设置截断保护是一项可选操作,但它会提供一层额外的保护,可确保 Datastream 即使在发生停机或连接问题的情况下也能读取数据。如需了解详情,请参阅配置 SQL Server 源数据库
从 SQL Server 源复制时,应选择哪种 CDC 方法?

您可以根据源 SQL Server 数据库配置,从两种可用的 CDC 方法中选择一个:

  • 事务日志:选择此方法可直接从数据库日志处理更改。这种方法可提供最佳的性能且效率更高,但需要额外的配置步骤,您的数据库可能不支持这些步骤。
  • 更改表:选择此选项可处理专用更改表中的更改。此方法更易于配置且限制较少,但支持的吞吐量较低,且会增加数据库的负载。

如需了解详情,请参阅 SQL Server 作为来源的概览

BigQuery 目标位置行为

问题 答案
Datastream 和 BigQuery 如何协同工作来复制源数据库中的更改? Datastream 会持续从源数据库读取变更数据流,并使用 Storage Write API 将 upsert 和 delete 事件流式传输到 BigQuery 目标表。然后,BigQuery 会根据表过时配置将更改应用于表。
如何在 BigQuery 中应用数据操纵语言 (DML) 操作?
  • 在“仅附加”模式下,数据以更改流的形式附加到 BigQuery 中,每个 INSERTUPDATE-INSERTUPDATE-DELETEDELETE 事件都有单独的一行。
  • 合并模式(默认)下,当 Datastream 在 BigQuery 中创建表时,它会根据源中定义的主键设置表的主键。BigQuery 会处理事件,并根据源表主键将更改应用于底层 BigQuery 表。如果来源表没有主键,则系统会将其视为使用了仅附加模式。
Datastream 和 BigQuery 如何处理事件排序? BigQuery 会使用事件元数据和内部更改序列号 (CSN) 将事件按正确的顺序应用于表。如需详细了解事件元数据,请参阅事件和数据流
将 BigQuery 与 Datastream 搭配使用时,BigQuery 费用是如何计算的? BigQuery 费用与 Datastream 费用是分开计算和收取的。如需了解如何控制 BigQuery 费用,请参阅 BigQuery CDC 价格
Datastream 将数据流式传输到 BigQuery 时支持的最大行大小是多少? Datastream 支持的最大行大小为 20 MB。
将数据流式传输到 BigQuery 时,表的前缀为 _。您能否更改此行为,使 BigQuery 中的表采用与源数据库中相同的结构? 为 BigQuery 目标位置配置数据集时,您需要为每个架构创建一个数据集,或为所有架构创建一个数据集。为每个架构创建数据集后,源中每个架构都会映射到 BigQuery 中的一个数据集,并且源架构中的所有表都会映射到该数据集中的表。选择“适用于所有架构的单个数据集”选项后,按照 BigQuery 中的表命名惯例,表名称的前缀为 _
CDC 能否捕获源架构更改,例如在源中插入或删除列时?此类更改是否会自动反映在目标 BigQuery 数据集中已填充的表中? Datastream 会自动检测新列,并将这些列添加到新行的目标架构中,但不会将已复制到目标中的列添加到目标架构中。系统会忽略已删除的列,并且 Datastream 会使用目标位置中的 NULL 值填充这些列。然后,您可以在 BigQuery 中手动删除这些列。

Cloud Storage 目标位置行为

问题 答案
如何在 Cloud Storage 中创建文件? Datastream 会为每个表创建一个文件夹。在每个文件夹中,Datastream 会在达到用户定义的大小或时间阈值时轮替文件(或创建新文件)。每当检测到架构更改时,Datastream 也会轮替文件。文件名将由一个唯一的架构键(基于架构的哈希值)和文件中第一个事件的时间戳组成。出于安全考虑,这些文件名不应被人们阅读或理解。
如果 Cloud Storage 中的数据未排序,那么事件在加载到目标位置之前如何重新排序?

每个事件均包含多个元数据字段,这些字段用于唯一标识日志文件中的行,并允许您对事件进行排序。这些字段包括:

对于 Oracle 来源:

  • rs_id(记录集 ID),实际上由三个值组成(例如 0x0073c9.000a4e4c.01d0)。rs_id 唯一标识重做日志中的记录。
  • ssn(SQL 序列号),当重做日志中的记录过长时使用。因此,Oracle LogMiner 会将记录拆分为多行。

对于 MySQL 来源:

  • log_file:Datastream 将从中拉取 CDC 复制中的事件。
  • log_position,用于标识 MySQL 二进制日志中记录的偏移量。

对于 PostgreSQL 来源:

  • source_timestamp,这是记录在来源中发生更改时的时间戳。如果您要排序的事件的 source_timestamp 值相同,请比较 lsn 值。
  • lsn(日志序列号),用于标识 WAL 日志文件中记录的偏移量。

如需详细了解元数据字段,请参阅特定于来源的元数据

如果为同一时间戳创建多个文件,应该按什么顺序处理它们? 由于无法保证文件内部和文件之间的排序,因此确定来源文件处理顺序的最佳方法是获取特定时间戳的所有文件中的所有事件,然后使用本部分前面提到的方法应用排序。
如何处理主键更新?活动中是否存在信息? 当行的主键发生更改时,Datastream 会针对更改生成两个事件:UPDATE-DELETEUPDATE-INSERTUPDATE-DELETE 事件表示更新前的数据,UPDATE-INSERT 事件表示更新后的数据。如需详细了解特定于来源的元数据,请参阅事件和数据流
在将数据流式传输到 Cloud Storage 时,Datastream 支持的最大行大小是多少? Datastream 支持的最大行大小为 30 MB。

使用场景

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

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

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

集成

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

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

Datastream 与以下数据服务集成:

  • BigQuery:Datastream 使用 BigQuery Write API 直接与 BigQuery 集成。Datastream 将更改事件直接写入 BigQuery 数据集,其中更改将与现有数据持续合并 (UPSERT)。
  • Dataflow:Datastream 使用 Dataflow 模板与 Dataflow 集成。这些模板从 Cloud Storage 读取数据并将这些数据加载到 BigQuery、Cloud SQL for PostgreSQL 或 Spanner 中。这些模板的作用是维护目标位置中复制源表的最新状态。模板在 Dataflow 界面中提供,专用于处理 Datastream 生成的文件。
  • Cloud Storage:Datastream 通过将 Cloud Storage 作为变更流式传输目标位置在其中写入数据,从而与 Cloud Storage 集成。
  • Cloud SQL 和 Spanner:通过使用 Datastream 和 Dataflow 模板,您可以维护数据库中复制的表保持最新状态。
Dataflow 中的 Datastream to BigQuery 模板是否对数据操纵语言 (DML) 操作数量有任何限制? 不会。该模板使用流式插入 API 将数据加载到 BigQuery 中。因此,DML 操作的数量没有限制。但需遵守一些配额限制

安全性和连接性

问题 答案
Datastream 是否是敏感数据的安全服务? Datastream 支持多个安全的专用连接配置,以便在从来源流式传输到目标位置时保护传输中的数据。复制数据后,默认情况下系统会对该数据进行加密,并利用 BigQuery 或 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 如何确保数据库凭据的安全? 所有用户元数据(包括用于访问数据源的用户名和密码)在传输过程中和静态时都会加密,且 Google 会将其存储在专有的存储系统中。系统会跟踪和审核对此元数据的访问。
为什么创建专用连接配置页面会指出,您必须向 Datastream 服务账号授予 roles/compute.networkAdmin 角色,才能在共享 VPC 上创建专用连接配置? 只有在创建 VPC 对等互连时才需要 networkAdmin 角色。建立对等连接后,您无需再使用该角色。如果贵组织不允许向 Datastream 服务账号授予 networkAdmin 角色,请创建具有以下特定权限的自定义角色:

动态选择 IP 范围

  • compute.routes.get
  • compute.routes.list
  • compute.subnetworks.get
  • compute.subnetworks.list

创建对等网络

  • compute.globalOperations.get
  • compute.networks.addPeering
  • compute.networks.removePeering
  • compute.networks.get

预留 IP 地址

  • compute.globalAddresses.get
  • compute.globalAddresses.create
  • compute.globalAddresses.createInternal
  • compute.globalAddresses.delete
  • compute.globalAddresses.deleteInternal
  • compute.networks.use
  • compute.networks.listPeeringRoutes
我可以使用 Private Service Connect 创建专用连接配置吗? 不可以,Datastream 不支持 Private Service Connect。

监控 Datastream

问题 答案
如何知道所有历史数据已复制到目标位置的时间? Datastream 提供日志文件中关于其当前状态的信息。系统会创建一个日志条目,用于指示表完成回填的时间。
延迟时间偶尔会增加,但会随着时间的推移而逐渐减少。这是正常现象吗? 当来源生成的事件吞吐量增加时,Datastream 会自动纵向扩容。不过,为了保护源数据库和 Datastream,Datastream 在任何时候可以打开的并发连接和进程数量是有上限的。当事件吞吐量显著增加时,延迟时间会暂时激增;随着事件积压的处理,延迟时间预计会逐渐减少。

价格

问题 答案
Datastream 的价格如何?

Datastream 的价格基于从来源处理到目标的数据量 (GB)。

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

如何计算数据的大小? 费用取决于 Datastream 处理的数据大小。Datastream 仅对流式传输到目标位置的数据收费。
如果您将 Datastream 与 BigQuery 或 Dataflow 搭配使用,则需要支付什么费用? 每项服务均单独定价和计费。

其他信息

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

后续步骤