使用 Datastream 时的一般最佳实践

为了在 Datastream 中保持可靠的复制并最大限度地减少停机时间,您可以在数据流和源数据库中应用运营最佳实践。这些实践可帮助您切换数据流的源数据库、配置指标提醒、排查延迟问题,以及规划每个数据流的表限制。

更改数据流的源数据库

在某些情况下,您可能需要更改数据流的源数据库。例如,您可能需要修改数据流,使其从副本而非主数据库实例进行复制。

  1. 创建连接配置文件 为副本实例。
  2. 使用您为副本创建的连接 配置文件和目标位置的现有连接配置文件 创建数据流。
  3. 启动数据流,并停用 历史数据回填。启动数据流后,它将仅提取二进制日志中的数据。
  4. 可选。在数据流运行后,对其进行修改 以启用自动回填。
  5. 暂停数据流,该数据流正在 从主实例读取。
  6. 可选。删除数据流,该数据流正在从主实例 流式传输数据。
  7. 可选。删除连接配置文件 删除主实例的连接配置文件。

在 Datastream 中设置提醒和监控

Datastream 信息中心包含大量信息。这些信息有助于进行调试。您可以在 Cloud Logging 中提供的日志中找到更多信息。

Datastream 提醒

Datastream 没有设置默认提醒。例如,您可以点击概览 标签页中的 “创建提醒政策” 链接,为数据新鲜度 指标创建提醒政策。对于其余指标,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,前往  提醒 页面:

    前往提醒

  2. 点击创建政策 。

  3. 点击选择指标 下拉列表。

  4. 在过滤条件字段中,输入 Datastream。

  5. 可选:您可能需要停用有效 过滤条件,才能查看所有可用指标。

  6. 在 Datastream 数据流 下搜索您要监控的指标。

  7. 点击应用 。

  8. 可选:在添加过滤条件 和转换数据 部分中输入所需详细信息。点击下一步 。

  9. 在配置提醒触发器 部分中输入所需信息。点击下一步 。

  10. 在配置通知并最终确定提醒 部分中配置通知。

  11. 查看提醒,并在准备就绪后点击创建政策 。

    如需详细了解如何完成每个步骤,请参阅 创建提醒政策。

我们建议您为以下 Datastream 指标创建提醒:

  • 数据新鲜度
  • 数据流不支持的事件数
  • 数据流总延迟时间

针对其中任何指标的提醒都可能表明数据流或源数据库存在问题。

了解延迟时间

Datastream 提供以下指标,帮助您了解复制延迟时间:

  • 数据新鲜度:数据提交 到源的时间与 Datastream 读取数据的时间之间的差值。如果此指标较高,则表示 Datastream 读取数据的速度低于源生成数据的速度。这表示源或与源的网络连接可能存在问题。
  • 系统延迟时间:Datastream 处理 事件所需的时间,从从源读取事件到将事件写入 目标位置。
  • 总延迟时间:端到端复制延迟时间,表示从 数据提交到源到将数据写入目标位置的总时间。

如果数据新鲜度较高,常见原因包括:

  • 源过载 :源数据库生成日志(二进制日志文件、重做日志文件、WAL 文件)的速度快于 Datastream 读取日志的速度。
    • 针对 MySQL/Oracle 的操作 增加 maxConcurrentCdcTasks 参数 以并行读取更多日志。
    • 针对 PostgreSQL 的操作 :将高变化率表隔离到其自己的专用数据流中。
    • 针对 SQL Server 的操作 :增加 maxConcurrentCdcTasks 参数,以并行读取更多更改表。
  • 源资源不足 :源数据库服务器本身遇到问题,例如 CPU 使用率过高、内存不足或磁盘 I/O 瓶颈。
    • 操作 :确保源实例运行状况良好。检查 CPU/RAM 使用率。对于 PostgreSQL,请考虑增加 logical_decoding_work_mem 参数的值;对于 Oracle,请确保分配足够的系统全局区 (SGA)。
  • 网络容量问题:源与 之间的 ping 时间过长或带宽饱和。 Google Cloud
    • 操作 :监控您的 VPN 或 Cloud Interconnect 带宽和延迟时间。
  • 单个大型事务 :大型批量作业(例如对数百万行执行 UPDATE)可能会导致延迟时间暂时飙升。
    • 操作 :这是预期行为。等待 Datastream 处理大型事件。请考虑在未来将大型批量作业拆分为较小的块。

如果系统延迟时间较长,则可能表示 Datastream 或目标位置存在问题。

  • 操作 :检查 Cloud Logging 中是否存在持久性行级错误(例如 invalid input for type json。如果数据流因数据类型或约束错误而处于重试循环中,则可能需要在源中手动更正数据。如果没有明显的错误,请与 Google 支持团队联系以获取帮助。

单个数据流可以处理多少个表?

我们建议单个数据流最多包含 10,000 个表。表的大小没有限制。如果您需要创建包含更多表的数据流,则该数据流可能会进入错误状态。为避免这种情况,请考虑将源拆分为多个数据流。