使用 Binlog 和 MQ 构建实时数据同步系统
用 Canal 把自己伪装成一个 MySQL 的从库,从 MySQL 实时接收 Binlog,然后发送到MQ中,下游业务系统根据需求自己去消费MQ。
保证数据同步的实时性
一般容易成为性能瓶颈的就是消费 MQ 的同步程序,因为这些同步程序里面一般都会有一些业务逻辑,而且如果下游的数据库写性能跟不上,表象也是这个同步程序处理性能上不来,消息积压在 MQ 里面。
MySQL 主从同步 Binlog,为了确保数据一致性,Binlog 的顺序很重要,是绝对不能乱序的从库同步必须按顺序执行,所以一般有因果性的需要用一个消费线程。
需要根据业务特性来定制化处理,比如订单数据,同一订单的操作有因果性,需要保证顺序。 具体做法:
- 根据下游同步程序的消费能力,计算出需要多少并发;
- 设置 MQ 中主题的分区(队列)数量和并发数一致。对应到订单库就是,相同订单号的 Binlog 必须发到同一个分区上。
此文章为3月Day19学习笔记,内容来源于极客时间《后端存储实战课》