Cloudcanal数据同步神器

一.背景与需求

最近有个OLAP的需求,我们需要将MySQL的一些数据(这种数据有一种特性就是一旦产生记录,以后不会再进行修改、删除操作,例如登录日志、操作日志等诸如此类)。这种数据特性正好符合Clickhouse的用武之地,我们经过调研最终确定使用Clickhouse作为OLAP系统的数据库。

但是也随之迎来一个问题,运营人员对于这些数据的实时性还是有要求的,例如做一些实时报表分析。 我们大部分的业务系统采用的MySQL,所以自然而然想到通过订阅binlog的方式将MySQL的数据同步到Clickhouse中。

例如最简单和想到的一种方式是:

1.通过canal订阅mysql的binglog, 将binlog数据写入kafka, 自己写一个kafka消费者对MySQL数据进行处理写入对应Clickhouse的表中,完成数据同步。

优点: 逻辑简单,canal成熟。消费kafka的逻辑可以自由发挥

缺点: 每增加一张表要修改消费者代码,针对消费者的高可用、易拓展性、监控告警以及可维护性需要花费大量的时间。

最后,我们在网上也找了一些现成的数据同步工具,要么就是收费商业很昂贵,要么SASS(不支持私有化部署,需要安装Agent),要么开源star很少没几个人维护不敢用在生产环境。 最终发现Cloudcanal满足我们的需求:

1.支持私有化部署,整个同步过程采用Web可视化操作管理同步任务,同时还有异常监控、微信技术支持交流群(很重要,遇到问题有人解决,并且有很多技术的小伙伴相互交流)

2.Cloudcanal提供社区版许可证,可以免费使用3个月,到期后还可以继续续期。同时如果想获得更多的技术支持,Cloudcanal还支持商业版,花钱享受更多的技术支持

3.支持的数据源和目标源类型很多,常见的MySQL、Clickhouse、Starrocks、Doris、Redis等都可以支持同步

官网: https://www.clougence.com/

二.操作界面

使用门槛低,直接看官方文档一个脚本就能安装了。本质上Cloudcanal组件都是以Docker的方式进行运行,很方便,轻量级。 后面就是从界面上进行操作即可。

1.任务页面

2.添加数据源

三.MySQL同步到Clickhouse-优化

1.修改默认最大连接数

修改config.xml配置文件选项:

1
2
3
4
5
6
<!-- 默认值200 -->  
<max_concurrent_queries>200</max_concurrent_queries>


<!-- 修改后800 -->
<max_concurrent_queries>800</max_concurrent_queries>

2.修改max_query_size

1
2
3
4
<default>
<!-- 默认值本来是16K,这个我直接改为2G,否则任务有时候会有问题,导致同步延迟 -->
<max_query_size>2147483648</max_query_size>
</default>

四.许可证到期告警

1.自定义exporter对接到Prometheus

这个其实实现原理很简单,既然能在页面操作,肯定前端发送HTTP请求进行处理。那么我们通过抓包拿到登录的URL地址进行模拟登录,抓到获取证书过期API就知道许可证还有多久过期了。 最简单的就是写一个脚本,轮询,如果发现距离证书过期还有7天则发送告警信息到企业微信或者钉钉等等。

但是由于我们既然使用了Prometheus告警体系,不想自己再写所谓的告警脚本了。我写了一个exporter对接prometheus, 然后在Prometheus设置告警即可。直接下载release二进制文件使用即可。

项目地址: https://github.com/dream-mo/cloudcanal-exporter

创作不易,如有帮助给个Star⭐鼓励一下~️

Grafana截图如下: