https://github.com/datavane/consilens
跨数据源数据一致性校验工具
https://github.com/datavane/consilens
Last synced: about 2 months ago
JSON representation
跨数据源数据一致性校验工具
- Host: GitHub
- URL: https://github.com/datavane/consilens
- Owner: datavane
- License: apache-2.0
- Created: 2026-04-13T03:00:55.000Z (3 months ago)
- Default Branch: dev
- Last Pushed: 2026-05-12T07:27:30.000Z (about 2 months ago)
- Last Synced: 2026-05-12T09:31:48.053Z (about 2 months ago)
- Language: Java
- Homepage:
- Size: 2.22 MB
- Stars: 26
- Watchers: 1
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-java - Consilens
README
# Consilens
> 跨数据源数据一致性校验工具。
Consilens 用于验证数据同步、迁移、ETL、回填后的结果是否一致,并输出行级、列级差异。
适合这类场景:
- MySQL → PostgreSQL / ClickHouse / StarRocks 迁移验收
- 数据同步链路校验
- ETL / 回填结果核对
- 双写 / 灰度切换对账
## 核心特性
- 跨数据源比对,不要求两侧数据集在同一个实例
- 基于 connector/dataset 抽象,架构可扩展至 ES、MongoDB、HDFS 等非关系型数据源
- 大表优先走 checksum 收敛,差异可定位到主键和字段
- 支持多格式 sink 输出:控制台、JSON 文件、CSV 文件、结果表
- 基于 SPI 的连接器插件扩展
## 内置连接器
| 数据库 | 连接器模块 | 验证状态 |
| --- | --- | --- |
| MySQL | `consilens-connector-mysql` | 已验证 |
| PostgreSQL | `consilens-connector-postgresql` | 已验证 |
| SQL Server | `consilens-connector-sqlserver` | 内置(待验证) |
| Oracle | `consilens-connector-oracle` | 内置(待验证) |
| ClickHouse | `consilens-connector-clickhouse` | 内置(待验证) |
| Doris | `consilens-connector-doris` | 内置(待验证) |
| StarRocks | `consilens-connector-starrocks` | 已验证 |
| Presto | `consilens-connector-presto` | 内置(待验证) |
| Trino | `consilens-connector-trino` | 内置(待验证) |
| TiDB | `consilens-connector-tidb` | 内置(待验证) |
说明:`内置(待验证)` 表示仓库里已有对应连接器模块,但 README 目前只把已完成端到端验证的数据库作为对外首推能力。
## 工作方式
```text
边界探测
↓
首轮分段
↓
checksum 比对
↓
一致段跳过
↓
差异段继续收敛
↓
小段本地精确比较
```
## 快速开始
### 构建
```bash
mvn clean package -DskipTests -Prelease
```
### 执行
```bash
./bin/consilens-cli.sh diff -c config.yaml
```
### 最小配置示例
```yaml
source:
type: mysql
connection:
url: jdbc:mysql://localhost:3306/source_db
username: ${env.MYSQL_USER}
password: ${env.MYSQL_PASSWORD}
resource:
type: table
name: orders
target:
type: postgresql
connection:
url: jdbc:postgresql://localhost:5432/target_db?currentSchema=public
username: ${env.PG_USER}
password: ${env.PG_PASSWORD}
resource:
type: table
name: orders
comparison:
keys:
source:
- order_id
target:
- order_id
fields:
source:
- order_id
- customer_id
- amount
- status
- created_at
target:
- order_id
- customer_id
- amount
- status
- created_at
strategy:
mode: checksum
algorithm: xor
bisectionFactor: 8
bisectionThreshold: 5000
batchSize: 1000
enableProfiling: false
result:
sinks:
- format: console
type: result
- format: json
type: diff-record
properties:
path: ./diff_results.json
pretty: true
```
请将上面的用户名和密码替换成真实值。配置支持环境变量占位符,语法为 `${env.VAR_NAME}` 或 `${env.VAR_NAME:默认值}`。
## 策略
| 策略 | 状态 | 说明 |
| --- | --- | --- |
| `checksum` | 已实现 | 推荐默认使用,支持跨数据源 |
| `join` | 已实现 | 仅支持同一个 JDBC URL |
## 文档
- [快速开始](./docs/01-快速开始.md)
- [配置详解](./docs/02-配置详解.md)
- [连接器与数据源支持](./docs/03-插件与数据库支持.md)
- [架构设计](./docs/04-架构设计.md)
- [开发指南](./docs/05-开发指南.md)
## 社交媒体
- 微信公众号,扫描二维码关注

## 联系作者
- 添加时备注:Consilens
