使用 Datastream 时的一般最佳实践

在此页面中,您将找到有关使用 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 Stream 下搜索要监控的指标。

  7. 点击应用

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

  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)。
  • 网络容量问题:源与 Google Cloud之间存在较高的 ping 时间或带宽饱和问题。
    • 操作:监控 VPN 或 Cloud Interconnect 带宽和延迟时间。
  • 单个大型事务:大型批处理作业(例如对数百万行执行的 UPDATE)可能会导致延迟暂时性激增。
    • 操作:这是预期行为。等待 Datastream 处理大型事件。请考虑在未来将大型批处理作业拆分为更小的块。

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

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

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

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