在本页中,您将找到有关使用 Datastream 的常见问题解答 (FAQ)。此常见问题解答与以下内容相关联:
- 关于 Datastream 和变更数据捕获 (CDC) 的常见问题
- 一般来源行为和限制
- MySQL 来源行为和限制
- Oracle 来源行为和限制
- PostgreSQL 源行为和限制(包括 AlloyDB for PostgreSQL)
- SQL Server 源行为和限制
- Salesforce 源行为和限制
- Salesforce Marketing Cloud 源(预览版)的行为和限制
- BigQuery 目标位置行为
- Cloud Storage 目标位置行为
- 使用 DataStream 的常见用例
- Datastream 如何与 Google Cloud 数据服务集成
- 安全性和连接性
- 监控 Datastream
- 价格
- 有关 DataStream 的其他信息
关于 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 还使用回填从来源拉取所有现有数据,然后将数据流式传输到目标位置。因此,系统会使用来源的所有历史数据“回填”目标位置。回填分为两种类型:
|
| 在执行回填时,您需要考虑哪些限制? |
如需了解回填限制,请参阅相应来源类型的已知限制页面:
|
| 建议按什么顺序执行 CDC 和回填操作? | 在大多数情况下,此处无需特别考虑。在数据流中启用回填后,Datastream 会同时执行回填和 CDC。在某些极端情况下,例如复制无法使用 Datastream 回填的超大型表时,您可能需要先将数据加载到 BigQuery 中,然后再启动数据流。 |
| 我可以监控 CDC 和回填操作的状态吗? | 您可以按对象监控回填状态:
CDC 状态实际上就是数据流状态。如果 CDC 操作失败,则整个流都会失败。 Cloud Monitoring 中还提供其他对象级指标。如需了解详情,请参阅 Cloud Monitoring 文档。 |
| 变更数据流与复制有何区别? | 变更流是 Datastream 发送到目标位置以供下游使用的事件序列。写入到 Cloud Storage 的变更流的结果是一组文件,其中包含在一段时间内来自特定表的变更日志事件。这些事件代表对相应表的插入、更新和删除操作,并且这些事件可以通过 Dataflow 等服务在 Cloud Storage 下游使用和处理,以用于事件驱动型架构等用例。 在 Datastream 中,复制是指目标位置中来源表的一对一最新表示形式。例如,Oracle 中的某个表,其更改会持续复制到 BigQuery 表,而 BigQuery 表会使用从 Oracle 表流式传输的更改保持最新。复制通过使用每个变更事件并使用它来更新目标来利用变更数据流。Datastream 可直接复制到 BigQuery,并与 Dataflow 集成,利用模板从 Cloud Storage 拉取变更流事件并相应地更新目标表,从而支持 Cloud SQL 和 Spanner 等其他目标位置。 |
| 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,您可以指定包含和排除表和架构的列表,以便仅将所需的数据从来源流式传输到目标位置。对于包含的表,您可以排除表的特定列,从而进一步微调要流式传输到目标位置中的数据。但是,无法复制具体化视图。 |
| 如何将数据流移至其他项目或区域? | |
| 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 可以处理的数据有哪些限制? |
存在一般限制,以及适用于特定数据库来源的限制。 一般限制包括:
如需了解特定来源的限制,请参阅以下页面:
|
| Datastream 生成的每个事件中都包含哪些数据? | 每个生成的事件(插入、更新和删除事件)都包含来自来源的整行数据,以及每列的数据类型和值。每个事件还包括可用于建立排序并确保正好一次传送的事件元数据。 |
| Datastream 能否保证排序? | 虽然 Datastream 不保证排序,但它为每个事件提供了其他元数据。此元数据可用于确保目标位置中的最终一致性。通常,可以在 1 小时内实现最终一致性,具体取决于来源、变更的比率和频率以及其他参数。 |
| Datastream 能否保证正好一次传送? | Datastream 为至少一次传送。您可以使用 Datastream 写入每个事件的其他元数据来消除重复数据。 |
| Datastream 如何表示来自来源的数据类型以供下游处理? | 在写入无架构目标位置(例如 Cloud Storage)时,Datastream 会对所有来源的数据类型进行标准化,从而简化跨来源的数据下游处理。Datastream 接受原始来源数据类型(例如 MySQL 或 PostgreSQL 统一类型表示所有可能的来源类型的无损超集,标准化意味着只需极少的精力即可处理不同来源的数据,并以与来源无关的方式在下游进行查询。 |
| Datastream 如何处理来源中的结构(架构)更改? | Datastream 会定期从来源提取架构。架构存储在 Datastream 的内部架构注册表中,每个事件都会在生成架构时引用该架构。这样,Datastream 就可以跟踪架构更改并根据这些更改进行调整,从而确保所有数据均已流式传输并正确加载到目标位置。但是,在架构提取之间,某些架构变更可能无法检测到,从而可能导致数据差异。 |
| 我删除了(舍弃了)源数据库中的一列,但该列仍显示在目标数据库中。为什么? | Datastream 不会删除目标位置中的列。您必须手动删除列。此行为是故意的,因为在某些情况下,您可能希望将已删除的列保留在目标位置。例如,Datastream 会将重命名源中的列解读为删除一个列并添加另一个列。在这种情况下,您不想丢失目标中的原始列。 |
| 由于验证失败,数据流无法启动,但我认为这是错误,或者我想尝试运行数据流。如何通过此验证? | 您可以通过添加 force=true 标志并跳过验证检查来使用 API 启动数据流。请注意,跳过验证并不能保证数据流能够运行,如果数据库缺少必要的配置或权限,数据流仍可能会失败。
|
| 我可以重启失败的直播吗? | 您可以解决 Datastream 报告的错误,从而修复状态为 您还可以恢复状态为 |
| 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 数据库复制数据:
|
| Datastream 是否支持二进制日志压缩? | 否,Datastream 不支持使用二进制日志事务压缩来压缩事务事件。停用二进制日志事务压缩,以便在 Datastream 中使用 MySQL 的变更数据捕获功能。 |
您的组织不允许向其所有表和数据库授予 SELECT 权限。您还可以使用 Datastream 吗? |
您可以向要复制的特定表或数据库中的整个架构授予 GRANT SELECT ON DATABASE_NAME.TABLE_NAME TO USER_NAME@'%'; GRANT SELECT ON DATABASE_NAME.* TO USER_NAME@'%'; 替换以下内容:
如果您想将权限限制为特定主机名,请将 |
Oracle 来源行为和限制
| 问题 | 答案 |
|---|---|
| Datastream 如何从 Oracle 获取数据? | Datastream 使用 Oracle LogMiner 从 Oracle 的重做日志中提取数据。 |
| Datastream 是否需要 Oracle 的 GoldenGate 许可? | 不需要。Datastream 不需要 GoldenGate 许可,因为它使用 Oracle LogMiner 从数据库的重做日志中读取数据。 |
| 如果 Oracle LogMiner 不再受支持,会发生什么情况? | Oracle LogMiner 仍可在所有正式版 Oracle 中使用,并且 Datastream 将在所有未来版本中继续支持 LogMiner。Oracle 已停止支持 LogMiner CONTINUOUS_MINE 选项,但 Datastream 不使用此选项,因此该弃用对 Datastream 没有影响。 |
| Datastream 是否支持对来自 Oracle 数据库的传输中的数据进行加密? | Datastream 支持基于 Oracle 网络服务对传输中的数据加密。Datastream 以 |
| Datastream 是否支持安全套接字层 (SSL) 和传输层安全 (TLS) 加密? | 支持,Datastream 支持使用 TCPS 协议建立 SSL/TLS 加密连接,以连接到 Oracle 源。 |
| Datastream 是否支持 Oracle 多租户架构,尤其是容器数据库 (CDB) 和可插入数据库 (PDB)? | 可以。Datastream 支持 Oracle 多租户架构 (CDB/PDB),但您只能在数据流中复制单个可插入数据库。 |
您所在的组织不允许授予 GRANT SELECT ANY TABLE 权限。您还可以使用 Datastream 吗? |
如果您无法授予
如需使用 Datastream 流式传输更改,您还需要对流中包含的所有表拥有读取权限。 如需启动数据流,请使用 API 绕过验证。如需了解详情,请参阅开始直播。 |
| Datastream 是否支持从 Oracle 读取副本实例进行复制? | 只要 Oracle 读取副本实例按照配置指南进行配置,Datastream 就支持从该实例进行复制。 |
| Datastream 是否支持 Oracle SCAN RAC 数据库? |