Canal与DataX等工具的区别
Canal\DataX\MySQLMTOP
你好! 今天这篇文章主要讲解 各种数据同步组件以及数据采集分析组件等运维相关工具,如果你想转型架构师也可以参阅这篇文章。
1. Canal
Canal意译为水道/管道,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。
早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务trigger获取增量变更。从2010年,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括以下内容:
- 数据库镜像
- 数控实时备份
- 索引构建和实时维护(拆分异构索引、倒排索引等)
- 业务cache刷新
- 带业务逻辑的增量数据处理
当前的canal支持源端MySQL版本包括5.1.x,5.5.x,5.6.x,5.7.x,8.0.x
1.1 canal工作原理
MySQL主备复制原理
- MySQL master将数据变更写入二进制日志(binary log,其中记录叫做二进制日志事件binary log events,可以通过show binlog events 进行查看)
- MySQL slave将master的binary log events 拷贝到它的中继日志中(relay log)
- MySQL slave重放relay log 中的事件,将数据变更反映到它自己的数据库中
canal的工作原理类似mysql主从同步原理:
- canal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议
- MySQL master收到dump协议请求,开始推送binary log 给canal
- canal解析binary log对象(原始为byte流)
1.2 canal应用场景
该技术在某些平台职位搜索业务中得到了采用,场景:在企业HR发布、更新或删除职位时,我们需要及时更新职位索引,便于求职者能快速的搜索到。
想了解更多cannal工具详情,可参考官网文档:https://github.com/alibaba/canal
2. DataX
2.1 Datax简介
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、
SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种异构数据源之间高效的数据同步功能。
设计理念
为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接DataX,便能跟已有的数据源做到无缝数据同步。
当前使用现状
DataX在阿里巴巴集团内被广泛使用,承担了所有大数据的离线同步业务,并已持续稳定运行了多年。当年每天完成同步8w多道作业,每日传输数据量超过300TB。
2.2 Datax框架设计
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流
控,并发,数据转换等核心技术问题。
2.3 Datax插件体系
DataX Framework提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插
件,就能无缝对接其他数据源。经过几年积累,DataX目前已经有了比较全面的插件体系,主流的
RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:
2.4 Datax核心架构
DataX 3.0 开源版本支持单机多线程模式完成同步作业运行,本小节按一个DataX作业生命周期的时序
图,从整体架构设计非常简要说明DataX各个模块相互关系。
- DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来
完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切
分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。 - DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发
执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。 - 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task
重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所
有Task,默认单个任务组的并发数量为5。 - 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的
线程来完成任务同步工作。 - DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任
务完成后Job成功退出。否则,异常退出,进程退出值非0
想了解更多DataX工具详情,可参考官网文档:https://github.com/alibaba/DataX
3. MySQLMTOP
3.1 MySQLMTOP简介
MySQLMTOP 是一个由Python+PHP开发的开源MySQL企业监控系统。该系统由Python实现多进程数
据采集和告警,PHP实现Web展示和管理,优点如下:
- MySQL服务器无需安装任何Agent,只需在监控WEB界面配置相关数据库信息
- 启动监控进程后,即可对上百台MySQL数据库的状态、连接数、QTS、TPS、数据库流量、复制、
性能慢查询等进行实时监控。 - 可以在数据库偏离设定的正常运行阀值(如连接异常,复制异常,复制延迟) 时发送告警邮件通知到
DBA进行处理。 - 可以对历史数据归档,通过图表展示数据库近期状态,以便DBA和开发人员能对遇到的问题进行分
析和诊断。
MySQLMTOP 发展历史如下:
2014年01月,开源MySQLMTOP企业MySQL监控系统正式上线并开源
2014年06月,MySQLMTOP进行重构,加入了Oracle、Mongodb、Redis的支持,正式更名为Lepus
2014年08月,Lepus 成功取得商业软件著作权
2015年01月,开源MySQLMTOP被评为2014优秀开源软件
2015年01月,Lepus正式开源,并建立官方网站向大家免费提供服务
2015年06月,Lepus网站软件下载总数量统计超过10000+,并广泛应用于各大互联网企业生产数据库的
监控
2017年01月,Lepus代码托管至github,网站软件下载总数量统计超过30000+
3.2 MySQLMTOP功能
MySQLMTOP主要功能如下:
- 实时 MySQL 状态监控和警报
MySQLMTOP 持续监视 MySQL 的基本状态和性能信息,包括数据库连接状态,启动时间,数据
库版本,总连接数,活动进程,QPS,TPS,进出MySQL数据库的流量信息。在数据库状态异常或
偏离正常基准水平时发出报警邮件通知。
- 实时 MySQL复制监控
MySQLMTOP自动发现 MySQL 复制拓扑结构,自动监视数据库的延时和binlog信息,可以了解所
有 MySQL 主服务器和从服务器的性能、可用性和运行状况。并在问题(如从服务器延迟)导致停
机前向管理员提供改正建议。 - 远程监控云中的 MySQL
适合于云和虚拟机的设计,能远程监视MySQL服务器不需要任何远程代理器。 - 直观管理所有 MySQL
MySQLMTOP提供一个基于 Web 的界面,可令全面深入地了解数据库性能、可用性、关键活动
等;直观地查看一台服务器、自定义的应用组或所有服务器。一组丰富的实时图形和历史图形将帮
助您深入了解详细的服务器统计信息。
- 可视化MySQL慢查询分析
监视实时查询性能,查看执行统计信息,筛选和定位导致性能下降的 SQL 代码。结合使用
Information Schema 可直接从 MySQL 服务器收集数据,无需额外的软件或配置。 - 性能监控
监视影响 MySQL 性能的主要指标。如Key_buffer_read_hits、Key_buffer_write_hits、
Thread_cache_hits、Key_blocks_used_rate、Created_tmp_disk_tables_rate等信息,根据相关
性能指标可以对服务器核心参数进行调整优化。
想了解更多MySQLMTOP工具详情,可参考官网文档:http://www.lepus.cc/