3.5. 设置 Db2 以运行 Debezium 连接器
要使 Debezium 捕获提交到 Db2 表的更改事件,具有所需特权的 Db2 数据库管理员必须在数据库中配置表以更改数据捕获。开始运行 Debezium 后,您可以调整捕获代理的配置以优化性能。
有关为 Debezium 连接器设置 Db2 的详情,请查看以下部分:
3.5.1. 配置 Db2 表以更改数据捕获
要将表置于捕获模式,Debezium 提供了一组用户定义的功能(UDF)。此处的步骤演示了如何安装和运行这些管理 UDF。或者,您可以运行 Db2 控制命令将表置于捕获模式。然后,管理员必须为希望 Debezium 捕获的每个表启用 CDC。
先决条件
-
以
db2instl
用户身份登录 Db2。 - 在 Db2 主机上,Debebe 管理 UDF 在 $HOME/asncdctools/src 目录中提供。UDF 可从 Debezium 示例存储库 获得。
流程
使用 Db2 提供的
bldrtn
命令编译 Db2 服务器主机上的 Debezium 管理 UDF:cd $HOME/asncdctools/src
./bldrtn asncdc
启动数据库(如果还没有运行)。将
DB_NAME
替换为您希望 Debezium 连接到的数据库的名称。db2 start db DB_NAME
确保 JDBC 可以读取 Db2 元数据目录:
cd $HOME/sqllib/bnd
db2 bind db2schema.bnd blocking all grant public sqlerror continue
确保数据库最近备份。ASN 代理必须具有从中读取的最新起点。如果您需要执行备份,请运行以下命令,它会修剪数据,以便只有最新版本可用。如果您不不需要保留旧版本的数据,请为备份位置指定
dev/null
。备份数据库。将
DB_NAME
和BACK_UP_LOCATION
替换为适当的值:db2 backup db DB_NAME to BACK_UP_LOCATION
重启数据库:
db2 restart db DB_NAME
连接到数据库,以安装 Debezium 管理 UDF。假设您以
db2instl
用户身份登录,因此应在db2inst1
用户上安装 UDF。db2 connect to DB_NAME
复制 Debezium 管理 UDF 并为它们设置权限:
cp $HOME/asncdctools/src/asncdc $HOME/sqllib/function
chmod 777 $HOME/sqllib/function
启用用于启动和停止 ASN 捕获代理的 Debezium UDF:
db2 -tvmf $HOME/asncdctools/src/asncdc_UDF.sql
创建 ASN 控制表:
$ db2 -tvmf $HOME/asncdctools/src/asncdctables.sql
启用 Debezium UDF 来添加表来捕获模式并从捕获模式中删除表:
$ db2 -tvmf $HOME/asncdctools/src/asncdcaddremove.sql
设置 Db2 服务器后,使用 UDF 使用 SQL 命令控制 Db2 复制(ASN)。有些 UDF 期望一个返回值,在这种情况下,您可以使用 SQL
VALUE
语句来调用它们。对于其他 UDF,请使用 SQLCALL
语句。启动 ASN 代理:
VALUES ASNCDC.ASNCDCSERVICES('start','asncdc');
以上语句返回以下结果之一:
-
asncap 已在运行
start -->
<COMMAND>
在这种情况下,在终端窗口中输入指定的
<COMMAND
>,如下例所示:/database/config/db2inst1/sqllib/bin/asncap capture_schema=asncdc capture_server=SAMPLE &
-
将表置于捕获模式。对您要放入捕获的每个表调用以下语句:将
MYSCHEMA
替换为包含您要放入捕获模式的表的 schema 名称。同样,将MYTABLE
替换为要放入捕获模式的表名称:CALL ASNCDC.ADDTABLE('MYSCHEMA', 'MYTABLE');
重新初始化 ASN 服务:
VALUES ASNCDC.ASNCDCSERVICES('reinit','asncdc');
3.5.2. Db2 捕获代理配置对服务器负载和延迟的影响
当数据库管理员为源表启用数据捕获时,捕获代理开始运行。代理从事务日志中读取新的更改事件记录,并将事件记录复制到捕获表中。在源表中提交更改的时间之间,更改在对应的更改表中出现的时间,始终会有一个小的延迟间隔。这个延迟间隔代表了在源表中更改时以及 Debezium 被流传输到 Apache Kafka 间的差距。
理想情况下,对于必须快速响应数据更改的应用程序,您希望在源和捕获表之间保持同步。您可能希望运行捕获代理来持续处理更改事件,可能会导致吞吐量增加吞吐量,并减少在事件发生后尽快使用新的事件记录更改表。然而,这不一定是这种情况。在更直接同步时,会牺牲性能损失。每次更改代理查询数据库是否有新的事件记录时,它会增加数据库主机上的 CPU 负载。服务器上的额外负载可能会对整体数据库性能造成负面影响,并可能会降低事务效率,特别是在峰值数据库使用期间。
监控数据库指标非常重要,以便您知道数据库是否达到服务器不再支持捕获代理级别的活动点。如果您在运行捕获代理时遇到问题,请调整捕获代理设置,以减少 CPU 负载。
3.5.3. Db2 捕获代理配置参数
在 Db2 上,IBMSNAP_CAPPARMS
表包含控制捕获代理行为的参数。您可以调整这些参数的值,以平衡捕获过程的配置,以减少 CPU 负载并仍然维护可接受的延迟级别。
有关如何配置 Db2 捕获代理参数的具体指导超出了本文档的范围。
在 IBMSNAP_CAPPARMS
表中,以下参数对降低 CPU 负载有最大的效果:
COMMIT_INTERVAL
- 指定捕获代理等待将数据提交到更改数据的秒数。
- 数值越大可减少数据库主机上的负载并增加延迟。
-
默认值为
30
。
SLEEP_INTERVAL
- 指定捕获代理在达到活跃事务日志结束后等待启动新提交周期的秒数。
- 数值越大可减少服务器上的负载,并增加延迟。
-
默认值为
5
。
其他资源
- 有关捕获代理参数的更多信息,请参阅 Db2 文档。