ShardingSphere-Proxy CDC 模块构建与部署指南

ShardingSphere-Proxy CDC 模块构建与部署指南

shardingsphere shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere

概述

ShardingSphere-Proxy 的 CDC (Change Data Capture) 模块是一个强大的数据变更捕获组件,它能够实时捕获数据库中的数据变更事件。本文将详细介绍如何构建和部署 CDC 模块,包括 Server 端和 Client 端的配置与使用。

CDC 架构解析

CDC 模块采用 Server-Client 架构设计:

  1. CDC Server:内置于 ShardingSphere-Proxy 中,负责捕获数据库变更事件
  2. CDC Client:用户应用程序中引入的客户端,用于消费变更数据

这种设计实现了生产者和消费者的解耦,提供了灵活的数据处理能力。

环境准备

基础要求

  • JDK 1.8 或更高版本
  • ShardingSphere-Proxy 集群模式
  • ZooKeeper 作为注册中心(3.4.6+版本)

数据库支持

CDC 模块目前主要支持以下数据库:

  • openGauss
  • PostgreSQL
  • MySQL

CDC Server 部署详解

1. 获取 ShardingSphere-Proxy

首先需要获取 ShardingSphere-Proxy 的发布包,可以通过官方渠道下载最新版本。

2. GLT 模块配置(可选)

GLT (Global Lock Transaction) 模块用于保证 XA 事务的完整性,主要针对 openGauss 数据库。配置方式有两种:

方法一:源码编译
  1. 获取 ShardingSphere 源码
  2. 修改相关 pom.xml 文件,移除特定依赖的 <scope>provided</scope> 标签
  3. 执行完整编译流程
方法二:直接引入依赖

从 Maven 仓库下载以下两个组件:

  1. shardingsphere-global-clock-tso-provider-redis
  2. jedis-4.3.1

将下载的 JAR 包放入 Proxy 的 ext-lib 目录。

3. 配置文件调整

修改 conf/global.yaml 文件,关键配置项包括:

mode:
  type: Cluster
  repository:
    type: ZooKeeper
    props:
      namespace: cdc_namespace
      server-lists: localhost:2181

props:
  proxy-default-port: 3307
  cdc-server-port: 33071
  proxy-frontend-database-protocol-type: openGauss

4. 数据库驱动配置

根据后端数据库类型,将对应的 JDBC 驱动放入 ${shardingsphere-proxy}/ext-lib 目录。

5. 启动与验证

使用启动脚本启动 Proxy:

sh bin/start.sh

检查日志文件 logs/stdout.log,确认出现以下信息表示启动成功:

[INFO ] [main] o.a.s.p.frontend.ShardingSphereProxy - ShardingSphere-Proxy Cluster mode started successfully

CDC 任务配置

1. 查询当前配置

SHOW STREAMING RULE;

2. 完整配置示例

ALTER STREAMING RULE (
READ(
  WORKER_THREAD=20,
  BATCH_SIZE=1000,
  SHARDING_SIZE=10000000,
  RATE_LIMITER (TYPE(NAME='QPS',PROPERTIES('qps'='500')))
),
WRITE(
  WORKER_THREAD=20,
  BATCH_SIZE=1000,
  RATE_LIMITER (TYPE(NAME='TPS',PROPERTIES('tps'='2000')))
),
STREAM_CHANNEL (TYPE(NAME='MEMORY',PROPERTIES('block-queue-size'='2000')))
);

配置项说明

| 配置分类 | 参数名 | 说明 | |---------|-------|------| | READ | WORKER_THREAD | 数据读取线程数,建议不小于分库数量 | | READ | BATCH_SIZE | 单次查询最大记录数 | | READ | SHARDING_SIZE | 全量数据分片大小 | | READ | RATE_LIMITER | 读取限流配置 | | WRITE | WORKER_THREAD | 数据写入线程数 | | WRITE | BATCH_SIZE | 批量写入最大记录数 | | WRITE | RATE_LIMITER | 写入限流配置 | | STREAM_CHANNEL | TYPE | 数据通道类型,目前支持MEMORY | | STREAM_CHANNEL | block-queue-size | 内存队列大小 |

CDC Client 使用指南

1. 引入依赖

在项目中添加 CDC Client 依赖:

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-data-pipeline-cdc-client</artifactId>
    <version>${version}</version>
</dependency>

2. 核心 API 使用

CDCClient 类提供以下主要方法:

  1. connect() - 建立与服务器的连接

    • 参数:数据消费者、异常处理器、错误结果处理器
  2. login() - 用户认证

    • 参数:用户名和密码
  3. startStreaming() - 启动数据订阅

    • 参数:数据库名、表名列表、是否包含全量数据
    • 返回:streamingId
  4. restartStreaming() - 重启订阅

    • 参数:streamingId
  5. stopStreaming() - 停止订阅

    • 参数:streamingId
  6. dropStreaming() - 删除订阅

    • 参数:streamingId

3. 典型使用流程

// 创建客户端实例
CDCClient client = new CDCClient("localhost", 33071);

// 连接服务器
client.connect(records -> {
    // 处理接收到的记录
}, exception -> {
    // 处理异常
}, errorResult -> {
    // 处理错误结果
});

// 用户登录
client.login(new CDCLoginParameter("username", "password"));

// 启动订阅
String streamingId = client.startStreaming(
    new StartStreamingParameter("test_db", Arrays.asList("t_order"), true));

// ...业务处理...

// 停止订阅
client.stopStreaming(streamingId);

// 关闭连接
client.close();

注意事项

  1. CDC 目前仅同步数据变更,不包含表结构变更(DDL)
  2. 增量阶段按分库事务维度输出数据
  3. 使用 XA 事务时,openGauss 和 Proxy 都需要 GLT 模块支持
  4. 生产环境建议配置适当的限流参数,避免对源库造成过大压力

总结

本文详细介绍了 ShardingSphere-Proxy CDC 模块的构建、部署和使用方法。通过合理配置,CDC 模块能够高效稳定地捕获数据库变更事件,为数据同步、实时分析等场景提供可靠支持。实际应用中,建议根据业务需求调整各项参数,并进行充分的测试验证。

shardingsphere shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廉娴鹃Everett

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值