之前通过文章介绍过canal,本篇文章主要简述一下Canal、Maxwell、mysql_streamer对比。
Maxwell
Maxwell是一个能实时读取MySQL二进制日志binlog,并生成JSON格式的消息,作为生产者发送给Kafka、RabbitMQ等中间件的应用程序。它的常见应用场景有ETL、缓存构建、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、切库binlog回滚方案等。
官网:http://maxwells-daemon.io
GitHub:https://github.com/zendesk/maxwell Maxwell主要提供了下列功能:
- 支持SELECT * FROM table的方式进行全量数据初始化
- 支持在主库发生failover后,自动恢复binlog位置(GTID)
- 可以对数据进行分区,解决数据倾斜问题,发送到Kafka的数据支持库、表、列等级别的数据分区
- 工作方式是伪装为slave,接收binlog events,然后根据schema信息拼装,可以接受ddl、xid、row等event
Canal、Maxwell、mysql_streamer对比
从上文的介绍,可知:
Canal由Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大;Canal需要自己编写客户端来消费Canal解析到的数据。
Maxwell相对于Canal的优势是部署使用简单,基本不需要复杂的配置。它直接将数据变更输出为json字符串,不需要再编写客户端。对于缺乏基础建设,短时间内需要快速迭代的项目和公司比较合适。