腾讯大牛教你ClickHouse实时同步MySQL数据
2021/8/25 19:06:08
本文主要是介绍腾讯大牛教你ClickHouse实时同步MySQL数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ClickHouse作为OLAP分析引擎已经被广泛使用,数据的导入导出是用户面临的第一个问题。由于ClickHouse本身无法很好地支持单条大批量的写入,因此在实时同步数据方面需要借助其他服务协助。本文给出一种结合Canal+Kafka的方案,并且给出在多个MySQL实例分库分表的场景下,如何将多张MySQL数据表写入同一张ClickHouse表的方法,欢迎大家批评指正。
首先来看看我们的需求背景:
1. 实时同步多个MySQL实例数据到ClickHouse,每天规模500G,记录数目亿级别,可以接受分钟级别的同步延迟;
2. 某些数据库表存在分库分表的操作,用户需要跨MySQL实例跨数据库的表同步到ClickHouse的一张表中;
3. 现有的MySQL binlog开源组件(Canal),无法做到多张源数据表到一张目的表的映射关系。
基本原理
一、使用JDBC方式同步
1. 使用Canal组件完成binlog的解析和数据同步;
2. Canal-Server进程会伪装成MySQL的slave,使用MySQL的binlog同步协议完成数据同步;
3. Canal-Adapter进程负责从canal-server获取解析后的binlog,并且通过jdbc接口写入到ClickHouse;
优点:
1. Canal组件原生支持;
缺点:
1. Canal-Adpater写入时源表和目的表一一对应,灵活性不足;
2. 需要维护两个Canal组件进程;
二、Kafka+ClickHouse物化视图方式同步
1. Canal-Server完成binlog的解析,并且将解析后的json写入Kafka;
2. Canal-Server可以根据正则表达式过滤数据库和表名,并且根据规则写入Kafka的topic;
3. ClickHouse使用KafkaEngine和Materialized View完成消息消费,并写入本地表;
优点:
1. Kafka支持水平扩展,可以根据数据规模调整partition数目;
2. Kafka引入后将写入请求合并,防止ClickHouse生成大量的小文件,从而影响查询性能;
3. Canal-Server支持规则过滤,可以灵活配置上游的MySQL实例的数据库名和表名,并且指明写入的Kafka topic名称;
缺点:
1. 需要维护Kafka和配置规则;
2. ClickHouse需要新建相关的视图、Kafka Engine的外表等;
这篇关于腾讯大牛教你ClickHouse实时同步MySQL数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7
- 2024-02-18从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践
- 2024-02-07mysql 外键索引入门介绍,为什么工作中很少有人使用?