maxwell 是用java编写的实时抓取MYSQL软件,实时读取MYSQL 二进制日志Binlog并生成JSON格式,用作生产者发送给Kafka、Redis等应用。
将自己伪装成MYSQL的一个salve,然后以salve的身份从master 复制数据。
master主库改变记录,写到二进制日志binary log 文件。
salve 从库I/O线程向mysql master 发送dump协议,将master主库的binary log events 拷贝到从库的中继日志relay log
salve 有个sql thread 会读取中继日志,顺序执行该日志中的sql事件,从而与主库保持一致。
binary log 有三种格式:statement,row,mixed
语句级别,binlog每次记录执写操作的语句,比较节约空间,但是可能产生的结果不一样,例如update test set create_date=now().如果用binlog回复日志的话, 这也执行时间不同,产生的数据就不同。
行级别,binlog记录每次操作后的每行记录的变化,优点:保持数据的一致性,因为不管执行了什么操作,都只是记录执行后的效果。缺点:占用较大空间
混合级别,statement 升级版,默认还是statement,但是当函数包含UUID()时;包含AUTO_INCREMENT字段的表被更新时;执行INSERT DELAYED语句时;用UDF时;会按照ROW 的方式进行处理。优点:节约空间的同时还兼顾了一定的一致性。缺点:还存在个别情况会造成不一致。
maxwell要做监控分析,选择row格式比较适合,强一致性。
语言: 都是java编写
数据格式:canal格式自由,maxwell只能发送json消息
数据采集模式:canal只支持增量采集,maxwell支持全量和增量
数据落地:canal要定制才行,maxwell支持kafka等多种平台
ha:都支持