乐趣区

关于数据库:5分钟搞定-MySQL-到-ClickHouse-实时数据同步进阶篇CloudCanal实战

简述

之前的文章 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/
退出移动版