go-mysql-transfer是一款MySQL数据库实时增量同步工具。
能够监听MySQL二进制日志(Binlog)的变动,将变更内容形成指定格式的消息,实时发送到接收端。从而在数据库和接收端之间形成一个高性能、低延迟的增量数据同步更新管道。
# 特性
1、简单,不依赖其它组件,一键部署
2、集成多种接收端,如:Redis、MongoDB、Elasticsearch、RocketMQ、Kafka、RabbitMQ、HTTP API等,无需编写客户端,开箱即用
3、内置丰富的数据解析、消息生成规则,支持模板语法
4、支持Lua脚本扩展,可处理复杂逻辑,如:数据的转换、清洗、打宽
5、集成Prometheus客户端,支持监控、告警
6、集成Web Admin监控页面
7、支持高可用集群部署
8、数据同步失败重试
9、支持全量数据初始化
# 与同类工具比较
<table>
<thead>
<tr>
<th width="20%">特色</th>
<th width="20%">Canal</th>
<th width="20%">mysql_stream</th>
<th width="40%">go-mysql-transfer</th>
</tr>
</thead>
<tbody>
<tr>
<td>开发语言</td>
<td>Java</td>
<td>Python</td>
<td>Golang</td>
</tr>
<tr>
<td>高可用</td>
<td>支持</td>
<td>支持</td>
<td>支持</td>
</tr>
<tr>
<td>接收端</td>
<td>编码定制</td>
<td>Kafka等(MQ)</td>
<td>Redis、MongoDB、Elasticsearch、RabbitMQ、Kafka、RocketMQ、HTTP API <br>后续支持更多</td>
</tr>
<tr>
<td>全量数据初始化</td>
<td>不支持</td>
<td>支持</td>
<td>支持</td>
</tr>
<tr>
<td>数据格式</td>
<td>编码定制</td>
<td>Json(固定格式)</td>
<td>Json(规则配置)<br>模板语法<br>Lua脚本</td>
</tr>
</tbody>
</table>
# 实现原理
1、go-mysql-transfer将自己伪装成MySQL的Slave,
2、向Master发送dump协议获取binlog,解析binlog并生成消息
3、将生成的消息实时、批量发送给接收端
如下图所示:
![](images/1.png)
# 开源
gitee (速度更快) :[go-mysql-transfer](https://gitee.com/wj596/go-mysql-transfer)
github:[go-mysql-transfer](https://github.com/wj596/go-mysql-transfer?_blank)
如果此工具对你有帮助,请在Star支持下;