共计 2562 个字符,预计需要花费 7 分钟才能阅读完成。
简述
之前的文章 5 分钟搞定 MySQL 到 ClickHouse 实时数据同步 公布后,很多用户将 MySQL->ClickHouse 实时同步链路用了起来,然而咱们很快发现,CollapsingMergeTree 在某些场景下可能并不能按预期进行数据折叠。
这个时候,咱们参考了 ClickHouse 官网实现的 MaterializeMySQL 表引擎,将 ReplacingMergeTree 作为对端主力表引擎进行数据链路构建。
新计划劣势包含
- 表不存在额定的字段
- 按 order by key 严格合并(单节点)
- 能够设置按工夫距离主动 optimize 表 (autoOptimizeThresholdSec 参数)
- 反对 DDL 同步
技术点
构造迁徙
目前到 ClickHouse 的构造迁徙中,默认抉择 ReplacingMergeTree 作为表引擎,源主键作为 sortKey (无主键表则是 tuple),如下示例:
CREATE TABLE console.worker_stats
(
`id` Int64,
`gmt_create` DateTime,
`worker_id` Int64,
`cpu_stat` String,
`mem_stat` String,
`disk_stat` String
)
ENGINE = ReplacingMergeTree()
ORDER BY id
SETTINGS index_granularity = 8192
写数据
新计划全量依然依照规范 batch 导入,增量和 CollapsingMergeTree 作为表引擎的区别在于
- 转换 Insert、Update 操作为 Insert
- Delete 操作独自通过 alter table delete 语句进行操作
所以 Delete 操作如果较多,增量同步性能会急剧下降,倡议 delete RPS 不超过 50。
switch (rowChange.getEventType()) {
case INSERT:
case UPDATE: {for (CanalRowData rowData : rowChange.getRowDatasList()) {CkTableBatchData.RecordWithState addRecord = new CkTableBatchData.RecordWithState(CanalEventType.INSERT, rowData.getAfterColumnsList());
batchData.getRecords().add(addRecord);
}
break;
}
case DELETE: {for (CanalRowData rowData : rowChange.getRowDatasList()) {CkTableBatchData.RecordWithState delRecord = new CkTableBatchData.RecordWithState(CanalEventType.DELETE, rowData.getBeforePkColumnsList());
batchData.getRecords().add(delRecord);
batchData.setHasDelete(true);
}
break;
}
default:
throw new CanalException("not supported event type,eventType:" + rowChange.getEventType());
}
举个 ” 栗子 ”
- 造 Insert、Update、Delete 负载,比例为 20:78:2
- 增加数据源
- 创立工作,抉择数据源和库,并连贯胜利
- ClickHouse 侧点开 高级选项,确保 表引擎为 ReplacingMergeTree
- 点击下一步
- 抉择数据同步,倡议规格至多抉择 1 GB。
- 目前曾经反对 MySQL->ClickHouse DDL 同步, 可默认选中。
- 点击下一步
- 抉择表、列、创立确认默认下一步。
- 期待工作主动构造迁徙、全量迁徙、数据同步追上
- 关上 主动表优化 开关,默认设置 30 秒距离
- 提早追平状态,进行负载
- 期待主动优化间隔时间,创立一个校验工作,跑完后果统一。
- 也能够期待 ClickHouse 主动优化,但工夫不定
常见问题
新计划还存在什么问题
目前并未反对集群(distribute 表),所以如果 ClickHouse 是一个集群,还须要进一步加强。
另外构造迁徙和增量对于 partition key 设置的反对,以及其余个性化表构造定义反对,还没有做到位。
还反对其余数据源么
咱们目前收到比拟多 Kafka、SqlServer、MongoDB、Oracle 到 ClickHouse 的需要,目前 SqlServer 咱们目前正在反对中,Kafka、MongoDB、Oracle 源端曾经反对,买通 ClickHouse 链路咱们会在适合的工夫同时关上。
总结
本文简要介绍了 CloudCanal 实现 MySQL 到 ClickHouse 数据迁徙同步的进阶能力,相比于老计划,劣势显著。如果各位有需要,能够尝试应用下咱们的社区版收费体验。最初,如果各位感觉这篇文章还不错,请点赞、评论加转发吧。
更多精彩
- 5 分钟搞定 MySQL 到 MySQL 异构在线数据迁徙同步 -CloudCanal 实战
- 5 分钟搞定 MySQL 到 ElasticSearch 迁徙同步 -CloudCanal 实战
- 5 分钟搞定 MySQL 到 TiDB 迁徙同步 -CloudCanal 实战
- 构建基于 Kafka 直达的混合云在线数据生态 -cloudcanal 实战
- 异地多活根底之数据双向同步进阶篇 -CloudCanal 实战
- MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
社区快讯
- 咱们创立 CloudCanal 微信粉丝群啦,在外面,你能够失去最新版本公布信息和资源链接,你能看到其余用户一手评测、应用状况,你更能失去激情的问题解答,当然你还能够给咱们提需要和问题。快快退出吧。
- 扫描下方二维码,增加咱们小助手微信拉您进群,接头语 (“加 CloudCanal 社区群”)
退出 CloudCanal 粉丝群把握一手音讯和获取更多福利,请增加咱们小助手微信:suhuayue001
CloudCanal- 收费好用的企业级数据同步工具,欢送品鉴。
理解更多产品能够查看官方网站:http://www.clougence.com
CloudCanal 社区:https://www.askcug.com/