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