一.背景与需求
最近有个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配置文件选项:
<!-- 默认值200 -->
<max_concurrent_queries>200</max_concurrent_queries>
<!-- 修改后800 -->
<max_concurrent_queries>800</max_concurrent_queries>
2.修改max_query_size
修改users.xml配置选项
<default>
<!-- 默认值本来是16K,这个我直接改为2G,否则任务有时候会有问题,导致同步延迟 -->
<max_query_size>2147483648</max_query_size>
</default>
四.许可证到期告警
1.自定义exporter对接到Promtehus
这个其实实现原理很简单,既然能在页面操作,肯定前端发送HTTP请求进行处理。那么我们通过抓包拿到登录的URL地址进行模拟登录,抓到获取证书过期API就知道许可证还有多久过期了。 最简单的就是写一个脚本,轮询,如果发现距离证书过期还有7天则发送告警信息到企业微信或者钉钉等等。
但是由于我们既然使用了Prometheus告警体系,不想自己再写所谓的告警脚本了。我写了一个exporter对接prometheus, 然后在Prometheus设置告警即可。直接下载release二进制文件使用即可。
项目地址: https://github.com/dream-mo/cloudcanal-exporter
创作不易,如有帮助给个Star⭐鼓励一下~️
Grafana截图如下: