你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Fabric 中的镜像功能提供了一种简单的体验,可避免复杂的 ETL(提取转换加载),并可将现有的 Azure Database for PostgreSQL 灵活服务器资产与你在 Microsoft Fabric 中的其他数据集成在一起。 您可以将现有的 Azure Database for PostgreSQL 持续复制直接到 Fabric OneLake。 在 Fabric 中,可以解锁强大的商业智能、人工智能、数据工程、数据科学和数据共享应用场景。
Architecture
Azure Database for PostgreSQL 中的结构镜像基于 逻辑复制 和变更数据捕获(CDC)设计模式等概念构建。
为 Azure Database for PostgreSQL 灵活服务器实例中的数据库建立 Fabric 镜像后,PostgreSQL 后台进程将为要镜像的所选表创建初始快照,该快照以 Parquet 格式寄送到 Fabric OneLake 登陆区域。 在 Fabric 中运行的复制程序进程会获取这些初始快照文件,并在镜像数据库项目中创建 Delta 表。
系统还会在源数据库中捕获对所选表实施的后续更改,并将其分批传输到 OneLake 登陆区域,以应用于镜像数据库工件中的相应 Delta 表。
什么是变更数据捕获(CDC)?
变更数据捕获(CDC)是一种方法,使应用程序能够检测和捕获对数据库所做的更改。
它不依赖于显式 SQL 查询来跟踪更改。
而是涉及数据库服务器发布的连续更改事件流。
客户端可以订阅此流来监视更改、专注于特定数据库、单个表,甚至是表中列的子集。
对于 Fabric 镜像,CDC 模式是在名为 azure_cdc 的专有 PostgreSQL 扩展中实现的。 Azure Database for PostgreSQL 灵活服务器实例的控制平面在 Fabric 镜像启用工作流期间被安装,并在源数据库中注册。
Azure 变更数据捕获 (CDC) 扩展功能
Azure CDC 是 PostgreSQL 的扩展,可增强逻辑解码的功能。
它将 Write-Ahead 日志(WAL)数据解释和转换为可理解的逻辑格式。
该扩展把数据库修改转换为一系列逻辑操作,如 INSERT、UPDATE 和 DELETE。
Azure CDC 是 PostgreSQL 内置逻辑解码插件 pgoutput之上的一层。
Azure CDC 将表快照和修改导出为 Parquet 文件,并将其复制到 Fabric OneLake 着陆区以供后续处理。
在 Azure 门户中启用 Fabric 镜像
通过在 Azure 门户中对 Azure Database for PostgreSQL 灵活服务器实例进行 Fabric 镜像,你可以将 PostgreSQL 数据库复制到 Microsoft Fabric 中。 此功能可帮助你将数据与 Microsoft Fabric 中的其他服务无缝集成,实现高级分析、商业智能和数据科学方案。 通过遵循 Azure 门户中的几个简单步骤,可以配置必要的先决条件并开始镜像数据库,以使用 Microsoft Fabric 的全部潜力。
先决条件
在 Azure Database for the PostgreSQL 灵活服务器实例中使用 Fabric 镜像之前,必须配置几个先决条件。
必须启用系统分配的托管标识(SAMI)。\
- 这是 Azure CDC 用于实现以下目的的身份:验证与 Fabric OneLake 的通信、复制初始快照,以及更改以登陆区域为目的地的分批传输。
wal_level 服务器参数必须设置为“logical”。
- 为源服务器启用逻辑复制。
Azure CDC 扩展(azure_cdc)已预加载到源服务器上,并注册了所选数据库进行镜像(需要重启)。
必须增加max_worker_processes 服务器参数,以适应更多后台进程进行镜像。
Azure 门户中提供了一个新页面,用于在源服务器上自动执行先决条件配置。
选择 “开始” 以启动启用工作流。
此页面显示所需先决条件的当前状态。 如果未为此服务器启用系统分配的托管标识(SAMI),请选择要重定向到可启用此功能的页面的链接。
完成后,可以选择数据库以启用 Fabric 镜像(默认情况下最多 3 个),但可以通过更改 max_mirrored_databases 服务器参数来增加此作,然后选择“ 准备”。
工作流显示“重启服务器”弹出窗口,通过选择“重启”,可以启动该过程,从而自动执行所有剩余的配置步骤,并且可以从 Fabric 用户界面开始创建镜像数据库
服务器参数
这些服务器参数直接影响 Azure Database for PostgreSQL 的 Fabric 镜像。
Azure.fabric_mirror_enabled:默认值为 off。 此参数指定指示是否在服务器上启用镜像的标志。 它在服务器启用工作流结束时自动设置,因此不应手动更改它。
max_replication_slots:默认值 10。 我们为每个镜像数据库使用一个复制槽,但如果客户创建更多镜像或创建其他复制槽(逻辑复制),客户可能会考虑增加此槽。
max_wal_senders:默认值为 10。 与上一个参数一样,我们为每个镜像使用一个
wal发送方进程,这在镜像更多数据库时应增加。max_worker_processes:默认值为 8。 初始快照后,我们为每个镜像数据库或已启用镜像但尚未在 Fabric 中创建镜像工件的对象使用一个进程。 如果你有其他扩展或工作负载使用更多工作器进程,则必须增加此值。
max_parallel_workers:默认值为 8,这限制了可以同时运行的工作线程数。 如果在同一服务器上启用多个镜像会话,则可以考虑增加此参数以允许更多并行作(例如,在初始快照中增加并行度)。
azure_cdc.max_fabric_mirrors 默认值为 3。 如果客户需要镜像此服务器上的三个以上的数据库,则可以增加此值。 请务必考虑,每个新的镜像数据库都会消耗服务器资源(五个后台进程使用 CPU 和内存资源进行快照创建和更改批处理),因此,应持续监控资源利用率,如果 CPU 和内存利用率持续超过 80% 或性能不符合您的预期,应将计算资源扩展到下一个可用大小。
azure_cdc.max_snapshot_workers:默认值为 3。 创建初始快照期间使用的最大工作器进程数。 增加这个值以加快初始快照创建速度,当增加镜像数据库的数量时。 但是,在执行此作之前,应考虑系统中运行的其他所有后台进程。
azure_cdc.change_batch_buffer_size:默认值为 16 MB。 更改批处理的最大缓冲区大小(以 MB 为单位)。 该表显示,许多数据会先进行缓冲,直到达到此大小才会写入本地磁盘。 根据镜像数据库的数据更改频率,可以调整此值以减少更改批处理频率,或者增加此值(如果希望确定总体吞吐量的优先级)。
azure_cdc.change_batch_export_timeout:默认值为 30。 更改批处理消息之间的最大空闲时间(以秒为单位)。 超出时,我们将当前批标记为已完成。 根据镜像数据库的数据更改频率,可以调整此值以减少更改批处理频率,或者增加此值(如果希望确定总体吞吐量的优先级)。
azure_cdc.parquet_compression:默认值为 ZSTD。 此参数仅供内部使用,因此不应对其进行修改。
azure_cdc.snapshot_buffer_size:默认值为 1000。 初始快照缓冲区的最大大小(以 MB 为单位)。 根据表格,很多数据会在发送到 Fabric 前被缓冲到一定容量。 请记住,azure_cdc.snapshot_buffer_size*azure_cdc.max_snapshot_worker 是初始快照期间使用的总内存缓冲区。
azure_cdc.snapshot_export_timeout:默认值为 180。 导出初始快照的最长时间(以分钟为单位)。 如果超出最大时间,则会重启。
Monitor
在 Azure Database for PostgreSQL 灵活服务器实例中监视 Fabric 镜像对于确保镜像进程平稳高效地运行至关重要。 通过监视镜像数据库的状态,可以识别任何潜在问题,并根据需要采取纠正措施。
你可以使用多个由用户定义的函数和表来监视 Azure Database for PostgreSQL 灵活服务器实例中的重要 CDC 指标,并对 Fabric 镜像过程进行故障排除。
监视功能
Azure Database for PostgreSQL 中 Fabric 镜像的镜像函数允许无缝将 PostgreSQL 数据库复制到 Microsoft Fabric 中,从而实现高级分析和数据集成方案。
azure_cdc.list_tracked_publication():对于源灵活服务器实例中的每个发布,返回一个逗号分隔的字符串,其中包含以下信息 - publicationName (text) - includeData (bool) - includeChanges (bool) - active (bool) - baseSnapshotDone (bool) - generationId (int)
azure_cdc.publication_status('pub_name'):对于源中的每个发布,灵活服务器实例返回一个逗号分隔字符串,其中包含以下信息
- <status、start_lsn、stop_lsn、flush_lsn>。
- 状态包括[“插槽名称”、“源名称”、“CDC 数据目标路径”、“激活”、“快照已完成”、“进度百分比”、“生成 ID”、“批处理 ID 完成”、“已上传批处理 ID”、“CDC 开始时间”]
azure_cdc.is_table_mirrorable('schema_name','table_name'):给定的架构和表名称,如果表可镜像,则返回该表。 若要使表可镜像,需要满足以下条件:
- 列名不包含以下任何字符:
[ ;{}\n\t=()] - 列类型为下列类型之一:
bigintbigserialbooleanbytescharactercharacter varyingdatedouble precisionintegernumericrealserialoidmoneysmallintsmallserialtexttime without time zonetime with time zonetimestamp without time zonetimestamp with time zoneuuid
- 该表不是视图、具体化视图、外表、Toast 表或分区表
- 该表具有主键或唯一的非空且完整索引。
- 列名不包含以下任何字符:
跟踪表
- azure_cdc.tracked_publications:Fabric 中每个现有的镜像数据库对应一行。 查询此表以了解每个发布的状态。
| 列名 | Postgres 类型 | Explanation |
|---|---|---|
| 出版物编号 | oid | 发布的对象标识符 |
| 目标路径 | 文本消息 | Fabric OneLake 中登陆区域的路径 |
| 目标格式 | azure_cdc.data_format | Azure CDC 中的数据格式 |
| include_data | 布尔 | 是否在发布中包含初始快照数据 |
| include_changes | 布尔 | 是否在发布中包含更改 |
| 活动 | 布尔 | 发布项是否处于活跃状态 |
| 快照完成 | 布尔 | 快照是否已完成 |
| snapshot_progress | smallint | 快照的进度 |
| 快照进度百分比 | 文本消息 | 快照进度百分比 |
| generation_id | int | 生成标识符 |
| stream_start_lsn | pg_lsn | 更改流启动的日志序列号 |
| stream_start_time(流开始时间) | 时间戳 | 更改流启动时的时间戳 |
| stream_stop_lsn | pg_lsn | 更改流停止的日志序列号 |
| 快照大小 | bigint | 快照的总大小(以字节为单位) |
| 总时间 | int | 出版物所用的总时间(以秒为单位) |
-
azure_cdc.tracked_batches:捕获并发送到 Fabric OneLake 的每个更改批次对应一行。 查询此表以了解哪些批次已经被捕获并上传到 Fabric OneLake。 通过该
last_written_lsn列,可以了解源数据库中的给定事务是否已寄送到 Fabric。
| Name | Postgres 类型 | Explanation |
|---|---|---|
| 出版物编号 | oid | 发布的对象标识符 |
| completed_batch_id | bigint | 批的序列号(从 1 开始)。 每个发布唯一 |
| last_written_lsn | pg_lsn | 此批次的最后一次写入的 LSN |
| last_received_lsn | pg_lsn | 上次收到 LSN |
| server_lsn | pg_lsn | 当前服务器 LSN(在完成对此批次的捕获时) |
| is_batch_uploaded | 布尔 | 批次是否已上传 |
| is_batch_acknowledged | 布尔 | 我们是否确认了此批次数据 (last_written_lsn) 的 wal_sender |
| 批处理开始时间 | TIMESTAMPTZ | 批处理启动的时间戳 |
| 批处理完成时间 | TIMESTAMPTZ | 批处理完成的时间戳 |
| 批量上传时间 | TIMESTAMPTZ | 批量上传的时间戳 |
| 批次确认时间 | TIMESTAMPTZ | 向发布者确认 LSN 时的批次时间戳 |
| 批处理大小 | int | 批的大小(以字节为单位) |