常见问题解答

您可以找到有关 Datastream 和变更数据捕获的常见问题解答。主题包括常见应用场景、来源和目标行为、 Google Cloud 集成、安全性、连接、监控和价格。

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

问题 答案
什么是 Datastream?

Datastream 是一项无服务器且易于使用的变更数据捕获 (CDC) 和复制服务。借助 Datastream,您可以将 AlloyDB for PostgreSQL、PostgreSQL、MySQL、SQL Server 和 Oracle 等关系型数据库源,以及 Salesforce、Salesforce Marketing Cloud(预览版)、ServiceNow(预览版)和 MongoDB 中的数据直接无缝复制到 BigQuery。Datastream 具有现代企业所需的规模、速度、安全性和简便性。通过自动扩缩的无服务器架构,Datastream 可以让您设置可实现低延迟数据复制的 ELT(提取、加载和转换)流水线,从而获得近乎实时的数据洞见。

Datastream 还能够以可靠且延迟极低的方式跨异构数据库和应用同步数据流。您可以将该服务与 Dataflow 模板集成,以将数据库复制到 Cloud SQL 或 Spanner 中进行数据库同步,也可以直接利用 Cloud Storage 中的事件流来实现事件驱动型架构。

Datastream 通过哪些方法流式传输数据? Datastream 通过以下两种方法之一将数据从来源流式传输到目标位置:
  • 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 上下文中,复制是指在目标位置中创建源表的 1:1 最新表示。例如,Oracle 中的一个表,其更改会持续复制到 BigQuery 表,其中 BigQuery 表会使用从 Oracle 表流式传输的变更数据流保持最新状态。复制功能会使用每个变更事件并用其更新目标,从而利用变更数据流。Datastream 支持直接复制到 BigQuery,并通过与 Dataflow 集成来支持其他目标位置(例如 Cloud SQL 和 Spanner),方法是利用从 Cloud Storage 中拉取变更数据流事件并相应地更新目标表的模板。

Datastream 是否需要在来源上安装代理? 您不必在来源上安装代理。Datastream 使用现有接口(例如 Oracle LogMiner)从来源中获取数据。
一个数据流中可以包含多少个表? Datastream 在单个数据流中最多可处理 10,000 个表。从技术角度来看,没有理由将数据库拆分为多个数据流,但出于业务考虑,您可能需要为不同的逻辑流使用不同的数据流,例如在从 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、Salesforce、Salesforce Marketing Cloud(预览版)、ServiceNow(预览版)和 MongoDB 源(包括云托管和自行管理的源)流式传输数据。如需了解特定于来源的版本,请参阅以下页面:

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 目标位置的行大小上限为 100 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 无需锁定表。

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

MySQL 来源行为和限制

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

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

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

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 读取副本实例进行复制? 不支持,Datastream 不支持从 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 用作来源概览。

Salesforce 来源行为和限制

问题 答案
什么是 Salesforce 组织? Salesforce 组织(也称为组织)是您的专用 Salesforce 部署,类似于数据库实例。一个组织有一组已获许可的用户,并存储所有客户数据和应用。
什么是 Salesforce 对象、记录和字段?

对象是类实体,类似于关系型数据库术语中的表。可以是标准维度,也可以是自定义维度。Salesforce 默认包含标准对象,而自定义对象则由用户创建,用于存储特定于其用例的数据。

记录是对象的特定实例,类似于关系型数据库中的行。

字段是对象的特定属性,类似于关系型数据库中的列。

Datastream 是否支持 Salesforce 计算字段? Datastream 部分支持 Salesforce 计算字段(公式字段)。复制这些字段会受到某些限制。如需了解详情,请参阅已知限制。

Salesforce Marketing Cloud 来源行为和限制

问题 答案
什么是 Salesforce Marketing Cloud? Salesforce Marketing Cloud 是一个平台,可跨多个渠道(例如电子邮件、移动设备和社交媒体)提供个性化的客户历程。它是一个与标准 Salesforce 平台完全独立的产品。
Datastream 如何从 Salesforce Marketing Cloud 复制数据? Datastream 会根据配置的轮询间隔,使用 Salesforce Marketing Cloud API 拉取数据。它支持对大多数对象进行增量同步,并对数据扩展等对象进行定期完全刷新。

BigQuery 目标行为

问题 答案
Datastream 和 BigQuery 如何协同工作,以从源数据库复制更改? Datastream 会持续从源数据库读取变更数据流,并使用 Storage Write API 将 upsert 和删除事件流式传输到 BigQuery 目标表。然后,BigQuery 会根据表过时配置将更改应用于表。
数据操纵语言 (DML) 操作在 BigQuery 中是如何应用的?
  • 在仅附加模式下,数据会作为更改流附加到 BigQuery 中,每个 INSERT、UPDATE-INSERT、UPDATE-DELETE 和 DELETE 事件都有单独的行。
  • 在合并模式(默认)下,当 Datastream 在 BigQuery 中创建表时,它会根据源中定义的主键在表上设置主键。BigQuery 会处理这些事件,并根据源表主键对底层 BigQuery 表应用更改。如果源表没有主键,则系统会将其视为使用了仅附加模式。
Datastream 和 BigQuery 如何处理事件排序? BigQuery 会使用事件元数据和内部更改序列号 (CSN),按正确的顺序将事件应用于表。如需详细了解事件元数据,请参阅事件和数据流。
与 Datastream 搭配使用时,BigQuery 费用如何计算? BigQuery 费用与 Datastream 费用分开计算和收取。如需了解如何控制 BigQuery 费用,请参阅 BigQuery CDC 价格。
将数据流式传输到 BigQuery 时,Datastream 支持的最大行大小是多少? 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(对于基于 binlog 的复制)或 binlog_file(对于基于 GTID 的复制),Datastream 会从中拉取 CDC 复制中的事件。
  • log_position(对于基于 binlog 的复制)或 binlog_position(对于基于 GTID 的复制),用于标识 MySQL 二进制日志中记录的偏移量。
  • gtid(对于基于 GTID 的复制),用于唯一标识事件的事务。

对于 PostgreSQL 来源:

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

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

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

使用场景

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

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

  1. 分析:通过将数据直接复制到 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 如何确保数据库凭据的安全? 无论您是使用 Secret Manager 存储密码,还是在创建连接配置文件时手动输入密码,所有用户元数据都会在传输和静态时加密,并且 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 接口作为专用连接配置。Private Service Connect 接口是一种资源,允许提供方 Virtual Private Cloud (VPC) 网络发起与使用方 VPC 网络中的网络连接的连接,以及接收来自该网络连接的连接。如需了解详情,请参阅配置 Private Service Connect 接口。

监控 Datastream

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

价格

问题 答案
Datastream 的价格如何?

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

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

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

其他信息

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

后续步骤