微信公众号: [深广大数据Club]
关注可了解更多大数据相关的咨询。问题或建议,请公众号留言;
[如果你觉得深广大数据Club对你有帮助,欢迎赞赏]
近期接触的比较多的关于mysql数据实时采集转储,以及后续计算分析的项目,这里对使用到的canal框架进行介绍、基于canal框架的架构设计以及升级canal1.1.0之后的架构优化。
ali canal介绍
canal 是阿里巴巴mysql数据库binlog的增量订阅&消费组件。早起是为了解决ali跨机房同步的需求。canal分内部版本以及外部版本,外部版本即开源版本,仅支持mysql以及mysql核心(mariadb)5.7及以下的版本.
基于日志增量订阅&消费支持的业务:
-
数据库镜像
-
数据库实时备份
-
多级索引 (卖家和买家各自分库索引)
-
search build
-
业务cache刷新
-
价格变化等重要业务消息
工作原理
mysql主备复制实现
从上层来看,复制分成三步:
master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
slave将master的binary log events拷贝到它的中继日志(relay log);
slave重做中继日志中的事件,将改变反映它自己的数据。
canal的工作原理
原理相对比较简单:
-
canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
-
mysql master收到dump请求,开始推送binary log给slave(也就是canal)
-
canal解析binary log对象(原始为byte流)
架构设计
需求
其实需求很简单,我们需要将数据从mysql抽取,将数据存储到kafka中,提供给后续程序的存储或者分析计算,但是时效性上要求实时。
需求分析
根据上述的需求理解,在做整体设计的时候,从kafka获取数据进行计算存储这块已经比较成熟了,所以我们更多的是要解决前面的从mysql采集数据存放到kafka的问题。
从mysql获取数据,整体来说有两种方法:
-
第一种,可以直接从mysql读取新数据,不过这个方法一方面你要去判断新数据是否为新数据,另一方面还要考虑这种读取方法是否会对其他用户的访问造成影响,还有就是要做到实时很难。
-
第二种,通过解析mysql binlog方式来解决实时数据抽取存储的问题,canal则可以满足这一点,不过canal无法直接存储到kafka中,需要通过其他手段将数据存入到kafka中
架构图
上图中,mysql数据通过binlog机制,生成binlog文件,通过canal进行binlog的解析,将数据通过canal source传入到flume,再通过flume写入到kafka,然后再提供给后续程序的存储以及分析计算。这里就不画的那么详细了,我们的重点放在前面的数据采集。其中canal source是需要自己自定义开发的canal source插件。
我们的标题中提到了要对上述架构的优化,其实这个优化主要由于canal新版本发布提供的一些很给力的功能,让我们的整体框架上得到了较好的改进,接下来我们先看下canal新版的介绍。
canal 1.1.0介绍
重要功能优化
-
整体性能测试&优化,提升了150%.
-
表结构TSDB相关问题全部修复(比较多的是DDL语法解析兼容性)
-
基于bio修复binlog长时间无数据导致的半开链接无法恢复
功能新增
-
原生支持prometheus监控
-
原生支持kafka消息投递
-
原生支持aliyun rds的binlog订阅 (解决自动主备切换/oss binlog离线解析) 参考: 【Aliyun RDS QuickStart】
-
原生支持 docker 镜像
-
MySQL gtid模式订阅支持
-
MySQL XA binlog事件
-
Mysql Show Slave Hosts状态支持
基于canal 1.1.0的架构优化
其实这里我们最关注的功能其实是对于kafka的支持,因为在我们前面的架构设计过程中,由于数据从canal抽取之后无法直接存入kafka,所以需要我们自己读取数据写入到kafka中,有了这个功能我们可以大大简化我们的前期数据采集存储流程。
优化后架构图
采用canal1.1.0之后,整体架构就变成上图的样子,优化了从canal-flume-kafka的中间环节,直接通过canal写入到kafka topic中。整体优化之后我们既不需要自定义开发canal flume source,也不需要考虑使用flume过程中遇到的问题。
赞赏
如果你觉得到深广大数据Club对你有帮助,欢迎赞赏,有你的支持,我们一定会越来越好!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 避免凭证转储攻击的5个技巧
- 通过内存转储打破Linux全盘加密保护
- 条条大路通罗马——花式转储域密码哈希
- 蓝屏(BSOD)转储设置,看本文就够了!
- 从PowerShell内存转储中提取执行的脚本内容
- Oracle数据块转储并查看块的详细内容
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Eloquent JavaScript
Marijn Haverbeke / No Starch Press / 2011-2-3 / USD 29.95
Eloquent JavaScript is a guide to JavaScript that focuses on good programming techniques rather than offering a mish-mash of cut-and-paste effects. The author teaches you how to leverage JavaScript's......一起来看看 《Eloquent JavaScript》 这本书的介绍吧!