跳到主要内容
版本:4.x

KingbaseES-R6

适用版本 Cloud 功能TapData Cloud 为您提供了云端服务,适合需要快速部署、低前期投资场景,帮助您更好地专注于业务发展而非基础设施管理,注册账号即可领取免费的 Agent 实例,欢迎试用。 企业版功能TapData Enterprise 可部署在您的本地数据中心,适合对数据敏感性或网络隔离有严格要求的场景,可服务于构建实时数仓,实现实时数据交换,数据迁移等场景。

金仓数据库管理系统(KingbaseES)是北京人大金仓信息技术股份有限公司自主研发的、具有自主知识产权的商用关系型数据库管理系统。KingbaseES-R6 可兼容 Postgres 9.6 版本的绝大多数特性,本文将介绍如何在 TapData 中添加 KingbaseES-R6 数据源,后续可将其作为源或目标库来构建数据管道。

支持版本与架构​

单节点架构下的 KingBaseES R6 V8 ~ V9

提示

KingbaseES-R6 支持的数据库模式为 Oracle、PostgreSQL 和 MySQL,需注意 Oracle 模式下默认对象全小写,更多介绍,见 Kingbase ES 官方文档。

支持数据类型​

类别数据类型
字符串与文本character、character varying、text
数值类型smallint、integer、bigint、numeric、real、double precision
日期和时间date、timestamp (without time zone)、timestamp with time zone、time (without time zone)、time with time zone、interval
二进制与位类型bytea、bit、bit varying
布尔类型boolean
网络地址与标识符cidr、inet、macaddr、uuid
几何数据类型point、line、lseg、box、path、polygon、circle
XML 与 JSONxml、json
数组类型array(选择增量数据读取插件为 Walminer 时不支持)

支持同步的操作​

INSERT、UPDATE、DELETE

提示

作为同步目标时,您可以通过任务节点的高级配置选择写入策略,如插入冲突时更新或丢弃,更新失败时插入或仅打印日志。此外,还可应用和执行源库解析的 ADD COLUMN、CHANGE COLUMN、DROP COLUMN 和 RENAME COLUMN 操作。

功能限制​

  • KingbaseES-R6 作为源库时,不支持采集其 DDL(如增加字段),且不支持指定增量数据采集时间。
  • KingbaseES-R6 不支持字符串类型存放\0,TapData 会将其自动过滤以避免异常报错。
  • Walminer 插件目前仅支持连接合并共享挖掘。

注意事项​

  • 使用基于复制槽的日志插件(如 wal2json)时,过多的共享挖掘进程可能导致 WAL 日志积压,增加磁盘压力。建议减少挖掘进程数量或及时删除无用的 CDC 任务和复制槽。
  • 基于 WAL 日志的插件(如 walminer)在执行共享挖掘时会频繁读写 walminer_contents 表,从而产生一定负载,但因目前仅支持单任务挖掘,影响相对较小。

准备工作​

作为源库​

  1. 以管理员身份登录 KingbaseES-R6 数据库。

  2. 执行下述格式的命令,创建用于数据同步/开发任务的账号。

    CREATE USER username WITH PASSWORD 'password';
    • username:用户名。
    • password:密码。
  3. 为刚创建的账号授予权限,您也可以基于业务需求自定义权限控制。

    -- 进入要授权的数据库
    \c database_name

    -- 授予目标 Schema 的表读取权限
    GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO username;

    -- 授予目标 Schema 的 USAGE 权限
    GRANT USAGE ON SCHEMA schema_name TO username;
    • database_name:数据库名称。
    • schema_name:Schema 名称。
    • username:用户名。
  4. 如需读取源库的增量变更,您还需要执行下述步骤。

    1. 修改复制标识为 FULL(使用整行作为标识),该属性决定了当数据发生 UPDATE/DELETE 时,日志记录的字段。

      ALTER TABLE schema_name.table_name REPLICA IDENTITY FULL;
      • schema_name:Schema 名称。
      • table_name:表名称。
    2. 修改配置文件 kingbase.conf,将 wal_level 的值修改为 logical,并调大 max_replication_slots 的值,示例如下。

      wal_level = logical
      # 至少要大于将其作为源时,挖掘的任务数
      max_replication_slots = 30
    3. 修改权限配置文件 sys_hba.conf,增加下述内容以保障账号访问权限。

      # 替换 username 为刚刚创建的用户
      local replication username trust
      host replication username 0.0.0.0/32 md5
      host replication username ::1/128 trust
    4. 安装日志插件。

      • Walminer(推荐):V87B 以上的版本内置该插件,使用方法,见 WalMiner 使用示例。该方式不依赖逻辑复制,无需设置 wal_level 为 logical,也不需要调整复制槽配置,但需授予超级管理员权限。
      • Pgoutput:内置逻辑复制协议,无需额外安装。对于含主键表且 replica identity 为 default 的情况,更新事件中的 before 字段会为空,可通过设置 replica identity full 解决。此外,如需使用默认的全局 PUBLICATION,请由管理员或超级用户预先创建:

        -- 需由管理员或超级用户执行
        CREATE PUBLICATION dbz_publication FOR ALL TABLES;
        提示

        此外,在创建连接时选择 Pgoutput 插件,可开启部分订阅功能,避免无主键表必须设置 REPLICA IDENTITY FULL 才能更新/删除的限制;该方式无需创建全局 PUBLICATION,但用于同步的账号需具备 CREATE PUBLICATION 和目标表的 OWNER 权限。

      • Decoderbufs:利用 Google Protocol Buffers 解析 WAL 日志,但配置较为复杂。

      • wal2json:登录 KingbaseES-R6 所属的服务器,跟随下述步骤完成插件的编译,最后将生成的 wal2json.so 文件复制到 KingbaseES-R6 对应目录,本案例中为 /home/kingbase5b/ES/V8/KESRealPro/V008R006C005B0054/Server/lib/。

        # 下载插件
        git clone https://github.com/eulerto/wal2json.git && cd wal2json

        # 修改 Makefile 内容:
        PG_CONFIG = pg_config
        PGXS := $(shell $(PG_CONFIG) --pgxs)

        # 替换为
        PG_CONFIG = sys_config
        PGXS := $(shell $(PG_CONFIG) --sysxs)

        # 切换用户
        su kingbase

        # 复制资源文件
        cp -a /home/kingbase/ES/V8/KESRealPro/V008R006C005B0054/Server/lib/plc/.server /home/kingbase/ES/V8/KESRealPro/V008R006C005B0054/Server/include/server

        # 执行 make,目录下即可生成 wal2json.so
        make

作为目标库​

  1. 以管理员身份登录 KingbaseES-R6 数据库。

  2. 执行下述格式的命令,创建用于数据同步/开发任务的账号。

    CREATE USER username WITH PASSWORD 'password';
    • username:用户名。
    • password:密码。
  3. 为刚创建的账号授予权限,您也可以基于业务需求自定义权限控制。

    -- 进入要授权的数据库
    \c database_name;

    -- 授予目标 Schema 的 USAGE 和 CREATE 权限
    GRANT CREATE,USAGE ON SCHEMA schemaname TO username;

    -- 授予目标 Schema 的表读写权限
    GRANT SELECT,INSERT,UPDATE,DELETE,TRUNCATE ON ALL TABLES IN SCHEMA schemaname TO username;
    • database_name:数据库名称。
    • schema_name:Schema 名称。
    • username:用户名。

连接 KingbaseES-R6​

  1. 登录 TapData 平台。

  2. 在左侧导航栏,单击连接管理。

  3. 单击页面右侧的创建。

  4. 在弹出的对话框中,搜索并选择 KingbaseES-R6。

  5. 在跳转到的页面,根据下述说明填写 KingbaseES-R6 的连接信息。

    KingbaseES-R6 连接示例

    • 连接信息设置
      • 连接名称:填写具有业务意义的独有名称。
      • 连接类型:支持将 KingbaseES-R6 作为源或目标库。
      • 地址:数据库连接地址。
      • 端口:数据库的服务端口,默认为 54321。
      • 数据库:数据库名称,即一个连接对应一个数据库,如有多个数据库则需创建多个数据连接。
      • 模型:Schema 名称。
      • 额外参数:额外的连接参数,默认为空。
      • 账号:数据库的账号。
      • 密码:数据库账号对应的密码。
      • 日志插件:如需读取 KingbaseES-R6 的数据变更,实现增量数据同步,您需要根据准备工作的指引,完成插件的安装。
    • 高级设置
      • 共享挖掘:挖掘源库的增量日志,可为多个任务共享源库的增量日志,避免重复读取,从而最大程度上减轻增量同步对源库的压力,开启该功能后还需要选择一个外存用来存储增量日志信息。
      • 包含表:默认为全部,您也可以选择自定义并填写包含的表,多个表之间用英文逗号(,)分隔。
      • 排除表:打开该开关后,可以设定要排除的表,多个表之间用英文逗号(,)分隔。
      • Agent 设置:默认为平台自动分配,您也可以手动指定 Agent。
      • 模型加载频率:数据源中模型数量大于 1 万时,TapData 将按照设置的时间定期刷新模型。
      • 开启心跳表:当连接类型为源头或目标时,可启用该开关。TapData 会在源库创建 _tapdata_heartbeat_table 心跳表,并每 10 秒更新一次(需具备相应权限),用于监测数据源连接与任务的健康状况。心跳任务在数据复制/开发任务启动后自动启动,您可在数据源编辑页面查看心跳任务。
  6. 单击连接测试,测试通过后单击保存。

    提示

    如提示连接测试失败,请根据页面提示进行修复。

节点高级特性​

在配置数据同步/转换任务时,将 KingbaseES-R6 作为目标节点时,您可以选择是否开启忽略 NotNull(默认关闭),可实现在目标库建表时忽略 NOT NULL 的限制。

节点高级特性