项目地址:https://github.com/tal-tech/cds
ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它有着优异的性能,可以快速部署和运行。不过要想使用 ClickHouse 搭建起数仓用于数据分析,一个重要的问题就是数据如何进入 ClickHouse?我们希望数据源的变化能够自动实时地被同步到ClickHouse,而且支持方便的动态的添加新的数据源(新的数据库,表), 能够自动的生成对应数据源的schema。
go-zero 团队使用go语言围绕ClickHouse开发了一些方便的组件与服务。
我们得到了下面这样的数据同步设计
该数据同步系统大致由以下三部分组成
- DM 全量同步服务 github.com/tal-tech/cds/dm
- RTU 实时增量同步服务 github.com/tal-tech/cds/rtu
- Galaxy 网页控制台服务 github.com/tal-tech/cds/galaxy
流程如下:
- 用户可以在网页控制台添加数据源,自动生成 DDL,添加同步任务,该任务会被发送到 etcd。
- dm会收到全量同步的通知,执行历史数据的全量同步工作。
- 之后网页控制台服务会指定 connector 开启数据库 log 监听工作,数据会进入 kafka。
- 监听 etcd 集群的 RTU 实时增量同步服务服务会发现有新的任务,RTU 自动领取任务,到 kafka 消费数据并同步至 ClickHouse。
上述服务的开发使用了 Go 语言。借助于 go-zero 中的工具包,如 goctl 等, 我们快速实现了它。它还加入了支持自适应 mongoDB 结构变化,支持数据分表等。
我们相信这是go语言与ClickHouse探索大数据的一个不错的起点,我们希望有更多的人能够参与进来。
CDS项目地址:https://github.com/tal-tech/cds
go-zero项目地址:https://github.com/tal-tech/go-zero