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/

流程

  1. 使用 Db2 提供的 bldrtn 命令,编译 Db2 服务器主机上的 Debezium 管理 UDF:

    cd $HOME/asncdctools/src
    bldrtn asncdc
  2. 启动数据库(如果尚未运行)。将 DB_NAME 替换为您要 Debezium 连接到的数据库的名称。

    db2 start db DB_NAME
  3. 确保 JDBC 可以读取 Db2 元数据目录:

    cd $HOME/sqllib/bnd
    db2 connect to DB_NAME
    db2 bind db2schema.bnd blocking all grant public sqlerror continue
  4. 确保数据库最近备份。ASN 代理必须具有从中读取的最新起点。如果您需要执行备份,请运行以下命令来修剪数据,以便只有最新版本可用。如果您不需要保留旧版本的数据,请为备份位置指定 dev/null

    1. 备份数据库。将 DB_NAMEBACK_UP_LOCATION 替换为适当的值:

      db2 backup db DB_NAME to BACK_UP_LOCATION
    2. 重启数据库:

      db2 restart db DB_NAME
  5. 连接到数据库,以安装 Debezium 管理 UDF。假设您以 db2instl 用户身份登录,因此 UDF 应在 db2inst1 用户上安装。

    db2 connect to DB_NAME
  6. 复制 Debezium 管理 UDF,并为它们设置权限:

    cp $HOME/asncdctools/src/asncdc $HOME/sqllib/function
    chmod 777 $HOME/sqllib/function
  7. 启用用于启动和停止 ASN 捕获代理的 Debezium UDF:

    db2 -tvmf $HOME/asncdctools/src/asncdc_UDF.sql
  8. 创建 ASN 控制表:

    $ db2 -tvmf $HOME/asncdctools/src/asncdctables.sql
  9. 启用 Debezium UDF,添加表以捕获模式并从捕获模式中删除表:

    $ db2 -tvmf $HOME/asncdctools/src/asncdcaddremove.sql

    设置 Db2 服务器后,使用 UDF 使用 SQL 命令控制 Db2 复制(ASN)。有些 UDF 期望返回值,在这种情况下,您使用 SQL VALUE 语句调用它们。对于其他 UDF,请使用 SQL CALL 语句。

  10. 从 SQL 客户端启动 ASN 代理:

    VALUES ASNCDC.ASNCDCSERVICES('start','asncdc');

    或者在 shell 中:

    db2 "VALUES ASNCDC.ASNCDCSERVICES('start','asncdc');"

    前面的语句返回以下结果之一:

    • asncap 已在运行
    • start --> <COMMAND>

      在这种情况下,在终端窗口中输入指定的 <COMMAND >,如下例所示:

      /database/config/db2inst1/sqllib/bin/asncap capture_schema=asncdc capture_server=SAMPLE &
  11. 将表置于捕获模式。对您要放入捕获的每个表调用以下语句:将 MYSCHEMA 替换为包含您要放入捕获模式的模式的名称。同样,将 MYTABLE 替换为要放入捕获模式的表名称:

    CALL ASNCDC.ADDTABLE('MYSCHEMA', 'MYTABLE');
  12. 重新初始化 ASN 服务:

    VALUES ASNCDC.ASNCDCSERVICES('reinit','asncdc');

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 文档。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.