Maxwell 系列(一)

2021-08-05 10:27:03 浏览数 (1)

1、Maxwell介绍

maxwell读取MySQL二进制日志并以JSON格式将行更新写入到Kafka,Kinesis或其他流媒体平台。Maxwell的操作开销很低,只需要mysql和一个可写的地方即可。它的常见用例包括ETL,缓存建立/过期,指标收集,搜索索引和服务间通信,Maxwell为您提供了时间来源的一些优势,而无需重新架构整个平台。

2、数据示例

增加数据

代码语言:javascript复制
 mysql> insert into `test`.`maxwell` set id = 1, daemon = 'Stanislaw Lem';
  maxwell: {
    "database": "test",
    "table": "maxwell",
    "type": "insert",
    "ts": 1449786310,
    "xid": 940752,
    "commit": true,
    "data": { "id":1, "daemon": "Stanislaw Lem" }
  }

修改数据

代码语言:javascript复制
mysql> update test.maxwell set daemon = 'firebus!  firebus!' where id = 1;
  maxwell: {
    "database": "test",
    "table": "maxwell",
    "type": "update",
    "ts": 1449786341,
    "xid": 940786,
    "commit": true,
    "data": {"id":1, "daemon": "Firebus!  Firebus!"},
    "old":  {"daemon": "Stanislaw Lem"}
  }

3、Maxwell主要功能

  • 支持Select * from table的方式进行全量数据初始化
  • 支持在主库发生failover后,自动恢复binlog位置(GTID)
  • 可以对数据进行分区,解决数据倾斜问题,发送到kafka的数据支持database、table、column等级别的数据分区
  • 工作方式是伪装为Slave,接收binlog events,然后根据schemas信息拼装,可以接收ddl、xid、row等各种event

4、同类工具对比

除了Maxwell外,目前常用的MySQL Binlog解析工具主要有阿里的canal、mysql_streamer,三个工具对比如下:

bootstrap 引导程序

增量同步:MySQL ---> 中间件(canalmaxwell) --->Kafka---->?--->存储 Hbase/kudu/cassandra

全量: 使用bootstrap进行引导,作用是全量抽取mysql数据

代码语言:javascript复制
Maxwell允许您将数据“引导”到流中。这将执行select * from table和将结果
输出到您的流中,从而允许您从头开始播放流来重新创建整个数据集

canal由Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大。

canal需要自己编写客户端来消费canal解析到的数据。

maxwell相对canal的优势是使用简单,它直接将数据变更输出为json字符串,不需要再编写客户端。

0 人点赞