MySQL 到 ClickHouse 数据同步产品对比推荐
ClickHouse 在执行分析查询时的速度优势很好的弥补了 MySQL 的不足,但是对于很多开发者和 DBA 来说,如何将 MySQL 稳定、高效、简单的同步到 ClickHouse 却很困难。本文对比了 NineData、MaterializeMySQL(ClickHouse 自带)、Bifrost 三款产品,看看他们在同步时的差异。
对比结果概述
整体上,NineData(官网:www.ninedata.cloud )的数据复制功能在功能、性能表现最突出。其次是 Bifrost 和 ClickHouse 自带的 MaterializeMySQL。NineData 在增量 DDL 的处理、字段映射的准确性、无主键表、以及功能丰富度上最强(数据校验、过滤、限流等),详细的对比如下图:
结构映射对比
在做了详细对比之后,对于基础类型,只有 NineData 考虑的更加完整,例如 MySQL 的 datetime 需要映射到 ClickHouse 的 DateTime64,否则则可能出现数据丢失。如果使用 Biforst 或 MaterializeMySQL 等其他产品均映射到 datetime 可能会造成一定程度的数据精度丢失。
此外,在对比了 MySQL 全部数据类型之后,发现 NineData 支持更完整,例如对 JSON 类型、几何数据、地理信息仅 NineData 支持。此外,对于基础类型,也只有 NineData 考虑更加细致,使用 Biforst 或 MaterializeMySQL 等其他产品则可能导致精度丢失,从而造成数据丢失。
详细的对比如下图:
无主键表支持
NineData 对记录做了特殊的标记处理,所以很好的支持了无主键表的数据同步。而 MaterializeMySQL、Biforst 均不支持。
详细的对比如下图:
增量 DDL
对于数据增量同步,支持好各种类型的 DDL 是保障同步链路持续稳定的关键,NineData 在无主键表 DDL 支持、字段删除、字段名修改等特殊操作均做了适配处理,可以很好的保障复制链路的问题。同时,NineData 还提供了可视化的错误修复和跳过功能,可以最大限度的保障链路持续稳定。
详细的对比如下图:
限流、对比、过滤等
除了前面介绍的一般功能之外,为了提升数据质量、保障稳定,NineData 还支持了包括数据对比、运行中的限流、数据过滤等功能。具体的说明如下:
同步性能对比
这里使用 sysbench 工具生成了 5000 万行记录进行全量性能对比,再生成约 1800 万次 DML(约 5GB Binlog)进行增量性能对比。
对比中,全量同步 NineData 性能为 36.2W RPS(每秒同步记录数)为最高;增量同步则是 ClickHouse 自带的同步工具 MaterializeMySQL 最高,需要注意,MaterializeMySQL 在错误处理上比较简单,如果报错则需要全部重新同步。
详细的对比如下:
全量同步
通过 sysbench 生成 10 张表,每张表 500W 记录(5000W 行),数据文件大小约为 12G:
增量同步
通过 sysbench 生成 5G 大小的 BinLog 日志(约 1800W 次 DML),再进行增量同步:
总结
NineData(https://www.ninedata.cloud/)在功能上领先其他同步工具,特别是字段类型的全面适配和增量复制期间 DDL 的支持度,并且在动态限流、数据对比、监控等能力上也支持的最完善。
所以,如果想把 MySQL 的数据实时同步到 ClickHouse,推荐使用 NineData,不仅使用简单(SaaS),并在满足功能和性能的前提下,实现了字段类型的无损转换和数据的实时复制,很好的解决 MySQL 同步数据到 ClickHouse 的问题。
补充说明
当前各个云厂商虽然都提供 ClickHouse 托管服务,但是另一方面云厂商又都在发展自己的数仓产品,在同步功能支持上通常仅对自家的数仓产品支持比较好,而对 ClickHouse 同步支持都很薄弱。此外,开源工具 Canal 也因为不能很好的支持结构同步,使用和维护起来并不方便。
评论