ShardingSphere-Proxy CDC 模块构建与部署指南
shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere
概述
ShardingSphere-Proxy 的 CDC (Change Data Capture) 模块是一个强大的数据变更捕获组件,它能够实时捕获数据库中的数据变更事件。本文将详细介绍如何构建和部署 CDC 模块,包括 Server 端和 Client 端的配置与使用。
CDC 架构解析
CDC 模块采用 Server-Client 架构设计:
- CDC Server:内置于 ShardingSphere-Proxy 中,负责捕获数据库变更事件
- 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 数据库。配置方式有两种:
方法一:源码编译
- 获取 ShardingSphere 源码
- 修改相关 pom.xml 文件,移除特定依赖的
<scope>provided</scope>
标签 - 执行完整编译流程
方法二:直接引入依赖
从 Maven 仓库下载以下两个组件:
- shardingsphere-global-clock-tso-provider-redis
- 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 类提供以下主要方法:
-
connect() - 建立与服务器的连接
- 参数:数据消费者、异常处理器、错误结果处理器
-
login() - 用户认证
- 参数:用户名和密码
-
startStreaming() - 启动数据订阅
- 参数:数据库名、表名列表、是否包含全量数据
- 返回:streamingId
-
restartStreaming() - 重启订阅
- 参数:streamingId
-
stopStreaming() - 停止订阅
- 参数:streamingId
-
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();
注意事项
- CDC 目前仅同步数据变更,不包含表结构变更(DDL)
- 增量阶段按分库事务维度输出数据
- 使用 XA 事务时,openGauss 和 Proxy 都需要 GLT 模块支持
- 生产环境建议配置适当的限流参数,避免对源库造成过大压力
总结
本文详细介绍了 ShardingSphere-Proxy CDC 模块的构建、部署和使用方法。通过合理配置,CDC 模块能够高效稳定地捕获数据库变更事件,为数据同步、实时分析等场景提供可靠支持。实际应用中,建议根据业务需求调整各项参数,并进行充分的测试验证。
shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考