9.3. 设置 SQL Server 以运行 Debezium 连接器
要使 Debezium 从 SQL Server 表捕获更改事件,具有所需权限的 SQL Server 管理员必须首先运行查询,以便在数据库中启用 CDC。然后,管理员必须为您要 Debezium 捕获的每个表启用 CDC。
默认情况下,与 Microsoft SQL Server 的 JDBC 连接受 SSL 加密保护。如果没有为 SQL Server 数据库启用 SSL,或者您希望在没有使用 SSL 的情况下连接到数据库,您可以通过将连接器配置中的 database.encrypt
属性的值设置为 false
来禁用 SSL。
有关设置 SQL Server 以与 Debezium 连接器搭配使用的详情,请查看以下部分:
应用 CDC 后,它会捕获所有 INSERT
、UPDATE
和 DELETE
操作,它们提交到启用了 CDD 的表。然后,Debezium 连接器可以捕获这些事件并将其发送到 Kafka 主题。
9.3.1. 在 SQL Server 数据库中启用 CDC 复制链接链接已复制到粘贴板!
在为表启用 CDC 之前,您必须为 SQL Server 数据库启用它。SQL Server 管理员通过运行系统存储的步骤启用 CDC。系统存储的流程可以使用 SQL Server Management Studio 运行,也可以使用 Transact-SQL 运行。
先决条件
- 您是 SQL Server 的 sysadmin 固定服务器角色的成员。
- 您是数据库的 db_owner。
- SQL Server Agent 正在运行。
SQL Server CDC 功能只处理在用户创建的表中发生的更改。您无法在 SQL Server master
数据库中启用 CDC。
流程
- 在 SQL Server Management Studio 中的 View 菜单中,单击 Template Explorer。
- 在 Template Browser 中,展开 SQL Server Templates。
- 展开 Change Data Capture > Configuration,然后点 CDC 的 Enable Database。
-
在模板中,将
USE
语句中的数据库名称替换为您要为 CDC 启用的数据库的名称。 运行存储的步骤
sys.sp_cdc_enable_db
,为 CDC 启用数据库。为 CDC 启用数据库后,会创建一个名称
cdc
的模式,以及 CDC 用户、元数据表和其他系统对象。以下示例演示了如何为数据库
MyDB
启用 CDC:示例:为 CDC 模板启用 SQL Server 数据库
USE MyDB GO EXEC sys.sp_cdc_enable_db GO
USE MyDB GO EXEC sys.sp_cdc_enable_db GO
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.2. 在 SQL Server 表中启用 CDC 复制链接链接已复制到粘贴板!
SQL Server 管理员必须在您要捕获的源表中启用更改数据捕获。必须已经为 CDC 启用数据库。要在表中启用 CDC,SQL Server 管理员为表运行存储的步骤 sys.sp_cdc_enable_table
。可以使用 SQL Server Management Studio 或使用 Transact-SQL 运行存储的流程。对于您要捕获的每个表,必须启用 SQL Server CDC。
先决条件
- 在 SQL Server 数据库上启用了 CDC。
- SQL Server Agent 正在运行。
-
您是
db_owner
固定数据库角色的成员。
流程
- 在 SQL Server Management Studio 中的 View 菜单中,单击 Template Explorer。
- 在 Template Browser 中,展开 SQL Server Templates。
- 展开 Change Data Capture > Configuration,然后单击 Enable Table Specifying Filegroup Option。
-
在模板中,将
USE
语句中的表名称替换为您要捕获的表的名称。 运行存储的步骤
sys.sp_cdc_enable_table
。以下示例演示了如何为表
MyTable
启用 CDC:示例:为 SQL Server 表启用 CDC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <.> 指定要捕获的表的名称。<.> 指定角色
MyRole
,您可以将其添加到您要为源表捕获的列授予SELECT
权限的用户。sysadmin
或db_owner
角色的用户也有权访问指定的更改表。将@role_name
的值设置为NULL
,仅允许sysadmin
或db_owner
中的成员具有捕获信息的完整访问权限。<.> 指定 SQL Server 放置捕获表的filegroup
。namedfilegroup
必须已经存在。最好不要找到用于源表的同一filegroup
中的更改表。
9.3.3. 验证用户是否有权访问 CDC 表 复制链接链接已复制到粘贴板!
SQL Server 管理员可以运行系统存储的步骤来查询数据库或表来检索其 CDC 配置信息。可以使用 SQL Server Management Studio 或使用 Transact-SQL 运行存储的流程。
先决条件
-
您有 capture 实例捕获的所有列的
SELECT
权限。db_owner
数据库角色的成员可以查看所有定义的捕获实例的信息。 - 您在为查询包括的表信息定义的任何 gating 角色中有一个成员资格。
流程
- 在 SQL Server Management Studio 中的 View 菜单中,单击 Object Explorer。
- 从 Object Explorer,展开 Databases,然后展开您的数据库对象,如 MyDB。
- 展开 Programmability > Stored processs > System Stored process。
运行
sys.sp_cdc_help_change_data_capture
存储的流程来查询表。查询不应返回空结果。
以下示例在数据库
MyDB
上运行存储的步骤sys.sp_cdc_help_change_data_capture
:示例:查询 CDC 配置信息的表
USE MyDB; GO EXEC sys.sp_cdc_help_change_data_capture GO
USE MyDB; GO EXEC sys.sp_cdc_help_change_data_capture GO
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查询会返回为 CDC 启用的每个表的配置信息,其中包含调用者有权访问的更改数据。如果结果为空,请验证用户具有访问捕获实例和 CDC 表的特权。
9.3.4. Azure 上的 SQL Server 复制链接链接已复制到粘贴板!
Debezium SQL Server 连接器可用于 Azure 上的 SQL Server。有关在 Azure 上为 SQL Server 配置 CDC 并在 Debezium 中使用它的信息,请参阅此示例。https://learn.microsoft.com/en-us/samples/azure-samples/azure-sql-db-change-stream-debezium/azure-sql%2D%2Dsql-server-change-stream-with-debezium/
9.3.5. SQL Server 捕获服务器负载和延迟上的作业代理配置的影响 复制链接链接已复制到粘贴板!
当数据库管理员为源表启用更改数据捕获时,捕获作业代理开始运行。代理从事务日志中读取新的更改事件记录,并将事件记录复制到更改数据表中。在源表中提交更改的时间以及更改出现在对应更改表中的时间,总有较小的延迟间隔。这个延迟间隔代表在源表中发生更改时以及 Debezium 可用于 Apache Kafka 的更改时之间的差距。
理想情况下,对于必须快速响应数据变化的应用程序,您希望在源和更改表之间保持关闭同步。您可能想,运行捕获代理以尽可能快地持续处理事件更改事件,可能会导致吞吐量增加,并减少 latency netobserv-wagoning 更改表,以便在事件发生后马上使用新事件记录(在最近实时发生)。但是,这不一定如此。在寻求更多即时同步时,需要支付性能损失。每次捕获作业代理查询数据库以获取新事件记录时,它会增加数据库主机上的 CPU 负载。服务器上的额外的负载可能会对整个数据库性能造成负面影响,并可能会降低事务效率,特别是在高峰数据库使用时。
监控数据库指标非常重要,以便您知道数据库是否达到服务器无法支持捕获代理的活动级别。如果您注意到性能问题,可以修改 SQL Server 捕获代理设置,以帮助平衡数据库主机上的总体 CPU 负载与可容忍的延迟程度。
9.3.6. SQL Server 捕获作业代理配置参数 复制链接链接已复制到粘贴板!
在 SQL Server 上,控制捕获作业代理行为的参数在 SQL Server 表 msdb.dbo.cdc_jobs
中定义。如果您在运行捕获作业代理时遇到问题,请调整捕获作业设置,以通过运行 sys.sp_cdc_change_job
存储的步骤并提供新值来减少 CPU 负载。
有关如何配置 SQL Server 捕获作业代理参数的具体指导超出了本文档的范围。
以下参数对于修改捕获代理行为与 Debezium SQL Server 连接器一起使用的最显著:
pollinginterval
- 指定捕获代理在日志扫描周期之间等待的时间。
- 较高的值可减少数据库主机上的负载并增加延迟。
-
值
0
指定扫描之间没有等待。 -
默认值为
5
。
maxtrans
-
指定每个日志扫描周期内进程的最大事务数。在捕获作业处理指定数量的事务后,它会暂停
pollinginterval
指定下一次扫描开始前的时间长度。 - 较低值可减少数据库主机上的负载并增加延迟。
-
默认值为
500
。
-
指定每个日志扫描周期内进程的最大事务数。在捕获作业处理指定数量的事务后,它会暂停
maxscans
-
指定捕获作业可以尝试捕获数据库事务日志的扫描周期数的限制。如果
continuous
参数设为1
,则作业会在恢复扫描前暂停pollinginterval
指定的时间长度。 - 较低值可减少数据库主机上的负载并增加延迟。
-
默认值为
10
。
-
指定捕获作业可以尝试捕获数据库事务日志的扫描周期数的限制。如果
其他资源
- 有关捕获代理参数的更多信息,请参阅 SQL Server 文档。