ClickHouse作为OLAP分析引擎已经被广泛使用,数据的导入导出是用户面临的第一个问题。由于ClickHouse本身无法很好地支持单条大批量的写入,因此在实时同步数据方面需要借助其他服务协助。本文给出一种结合Canal+rabbit的方案,并且给出在多个MySQL实例分库分表的场景下,如何将多张MySQL数据表写入同一张ClickHouse表的方法,欢迎大家批评指正
之前讲述过使用Canal实现ClickHouse实时同步MySQL数据,但是发现有点小问题,只同步了一张表的数据,这次除修复这个bug后,有集成了rabbitmq来作为消息队列
我的需求就是将mysql多张表的数据实时同步到clickhouse中,参考了很多网上的资料,写的都不是很好,有的配置完成后,就会报错,今天终于实现了该功能,分享给大家。
我主要利用canal来实现ClickHouse实时同步MySQL数据,并且使用了rabbitmq来做消息队列(canal-1.1.5支持了rabbitmq)
- mysql配置不再赘述,看我的上一篇文章即可
- rabbitmq配置 (rabbitmq自行安装)
- canal安装配置
- canal-client安装配置
- 创建clickhouse的数据库和表
- 结果展示
1. mysql配置不再赘述,看我的上一篇文章即可
上一篇 使用Canal实现ClickHouse实时同步MySQL数据
2. rabbitmq配置
新建交换机
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMV99Iw0-1660097859524)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/684434d9ddc54e999af7dc2ff3fcca2a~tplv-k3u1fbpfcp-watermark.image)]
新建队列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZxe9VQ4-1660097859525)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/67778ea3e826402995b9466debbb5174~tplv-k3u1fbpfcp-watermark.image)]
交换机和队列绑定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lxC7agbO-1660097859527)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8ec85ccc58304109974f440d9460cd20~tplv-k3u1fbpfcp-watermark.image)]
3. canal安装配置
下载 canal, 访问 release页面 , 选择需要的包下载, 如以 1.1.5 版本为例
#下载canalan安装包
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
#解压到指定目录
mkdir -p /usr/tool/canal
tar zxvf canal.deployer-1.1.5.tar.gz -C /usr/tool/canal
#解压后进入目录,结构如下
drwxr-xr-x 7 awwzc staff 238 12 14 23:34 bin
drwxr-xr-x 9 awwzc staff 306 12 14 23:32 conf
drwxr-xr-x 83 awwzc staff 2822 12 14 23:30 lib
drwxr-xr-x 4 awwzc staff 136 12 14 23:34 logs
#修改canal.properties(一定要修改)
canal.serverMode = rabbitmq
canal.mq.servers = xxx #mq的ip地址
canal.mq.vhost=/
canal.mq.exchange=ck-ex # 交换机
canal.mq.username=xxx
canal.mq.password=xxx
canal.mq.aliyunuid=
#修改example文件夹下面的instance.properties文件下面几项为你自己的数据库配置即可
vi conf/maxwell/instance.properties
# position info
canal.instance.master.address=192.168.0.102:3306
canal.instance.filter.regex=aqi_china\\.tb_aqi_.* #筛选mysq