Azure Cosmos DB 分析存储中的变更数据捕获

适用对象: NoSQL MongoDB

通过 Azure Cosmos DB 分析存储中的变更数据捕获 (CDC),可以高效地使用分析存储中变更(插入、更新和删除)数据的连续和增量馈送。 它与 Azure Synapse 和 Azure 数据工厂无缝集成,可提供适用于高数据量的可缩放无代码体验。 由于变更数据捕获功能基于分析存储,因此它 不使用预配的 RU,不会影响事务性工作负载,可提供较低的延迟,并且具有较低的 TCO。

Azure Cosmos DB 分析存储中的变更数据捕获功能可以使用 Azure Synapse 或 Azure 数据工厂数据流将数据写入各种接收器。

Diagram of the analytical store in Azure Cosmos DB and how it, with change data capture, can write to various first and third-party target services.

有关映射数据流中支持的接收器类型的详细信息,请参阅数据游戏支持的接收器类型

除了提供从分析存储到不同目标的增量数据源外,变更数据捕获还支持以下功能:

  • 支持捕获删除和中间更新
  • 能够对特定类型的操作(插入 | 更新 | 删除 | TTL)筛选更改源
  • 支持通过源查询在更改源上应用筛选器、投影和转换
  • 可以同时使用同一容器上的多个更改源
  • 容器中的每个更改在变更数据捕获源中只出现一次,并在内部对检查点进行管理
  • 可以“从头开始”或“从给定时间戳开始”或“从现在开始”同步更改
  • 对于可进行更改的固定数据保留期没有限制

使用内部管理的检查点高效进行增量数据捕获

Cosmos DB 容器中的每个更改在 CDC 源中只出现一次,并在内部对检查点进行管理。 这有助于解决基于“_ts”值使用自定义检查点这一常见模式的以下缺点:

  • “_ts”筛选器应用于数据文件,这些文件并不能始终保证最少的数据扫描。 新 CDC 功能中基于内部管理的 GLSN 的检查点可确保仅基于元数据完成增量数据标识,从而保证每个流中的数据扫描量最少。

  • 分析存储同步流程不能保证基于“_ts”的排序,这意味着在某些情况下,增量记录的“_ts”小于最后一个设置检查点的“_ts”,并且可能会在增量流中遗漏。 新的 CDC 不考虑使用“_ts”来标识增量记录,因此保证不会遗漏任何增量记录。

功能

Azure Cosmos DB 分析存储中的变更数据捕获支持以下关键功能。

从头开始捕获更改

如果选择了“Start from beginning”选项,则初始加载会在首次运行中包括容器数据的完整快照,并在后续运行中会捕获更改的或增量数据。 这受 analytical TTL 属性的限制,并且更改源中不包含从分析存储中移除的 TTL 文档。 示例:假设一个将 analytical TTL 设置为 31536000 秒的容器,这相当于 1 年。 如果为此容器创建 CDC 进程,则初始加载中将仅包含 1 年以上的文档。

从给定时间戳开始捕获更改

选择“Start from timestamp”选项后,初始加载将从给定时间戳开始处理数据,并在后续运行中会捕获增量或已更改的数据。 此过程也会受到 analytical TTL 属性的限制。

从现在开始捕获更改

选择 Start from timestamp 选项后,不会捕获容器所有过去的操作。

捕获删除、中间更新和 TTL

分析存储的变更数据捕获功能可捕获删除操作、中间更新和 TTL 操作。 捕获的删除和更新可以应用于支持删除和更新操作的接收器。 {_rid} 值可唯一标识记录,因此通过将 {_rid} 指定为接收器端的键列,更新和删除操作会反映在接收器上。

请注意,TTL 操作被视为删除操作。 检查“源设置”部分,以检查模式详细信息,以及接收器中对中间更新和删除的支持。

为特定类型的操作筛选更改源

可以为特定类型的操作筛选变更数据捕获源。 例如,可以选择性地仅捕获插入和更新操作,从而忽略 user-delete 和 TTL-delete 操作。

通过源查询在更改源上应用筛选器、投影和转换

可以选择性地使用源查询来指定筛选器、投影和转换,这些都会推送到列分析存储。 下面是一个示例源查询,它仅使用筛选器 Category = 'Urban' 捕获增量记录。 此示例查询仅投影五个字段,并应用一个简单的转换:

SELECT ProductId, Product, Segment, concat(Manufacturer, '-', Category) as ManufacturerCategory
FROM c 
WHERE Category = 'Urban'

多个 CDC 进程

可以创建多个进程来使用分析存储中的 CDC。 此方法可灵活地支持不同的方案和要求。 虽然一个进程可能没有数据转换和多个接收器,但另一个进程可以有数据平展和一个接收器。 它们可以并行运行。

吞吐量隔离、更低的延迟和 TCO

对于 Cosmos DB 分析存储的操作不使用预配的 RU,因此不会影响事务工作负载。 使用分析存储进行变更数据捕获还具有较低的延迟和较低的 TCO。 较低的延迟是因为分析存储可实现更好的数据处理并行度,并降低总体 TCO,支持你在这些快速变化的经济条件下提高成本效益。

方案

下面是可以使用变更数据捕获和分析存储的常见方案。

使用 Cosmos DB 中的增量数据

如果当前正在使用或计划使用以下内容,则可以使用分析存储变更数据捕获:

  • 使用 Azure 数据工厂数据流或复制活动进行增量数据捕获。
  • 使用 Azure 数据工厂进行一次性批处理。
  • 流式处理 Cosmos DB 数据
    • 分析存储最多有 2 分钟的延迟来同步事务存储数据。 可以每分钟安排一次 Azure 数据工厂数据流。
    • 如果需要在不出现上述延迟的情况下进行流式传输,建议使用事务存储的更改源功能。
  • 捕获删除、增量更改、对 Cosmos DB 数据应用筛选器。
    • 如果对更改源使用 Azure Functions 触发器或任何其他选项,并且想要捕获删除、增量更改、应用转换等,建议通过分析存储进行变更数据捕获。

对所选的分析平台进行增量馈送

变更数据捕获功能支持端到端分析解决方案,使你能够灵活地将 Azure Cosmos DB 数据用于任何受支持的接收器类型。 有关支持的接收器类型的详细信息,请参阅数据游戏支持的接收器类型。 此外,变更数据捕获还支持你将 Azure Cosmos DB 数据引入集中式数据湖,并与来自其他不同数据源的数据进行联接。 可以平展数据、进行分区,并在 Azure Synapse Analytics 或 Azure 数据工厂中应用更多转换。

Azure Cosmos DB for MongoDB 容器上的变更数据捕获

API for MongoDB 的链接服务接口在 Azure 数据工厂数据流中尚不可用。 可以将 API for MongoDB 的帐户终结点与 Azure Cosmos DB for NoSQL 链接服务接口配合使用,将其用作在直接支持 Mongo 链接服务之前的解决方法。

在新的 NoSQL 链接服务的接口中,选择“手动输入”以提供 Azure Cosmos DB 帐户信息。 可在此处使用帐户的 NoSQL 文档终结点(例如:https://<account-name>.documents.azure.cn:443/)而不是 Mongo DB 终结点(例如:mongodb://<account-name>.mongo.cosmos.azure.cn:10255/

后续步骤