一句话描述:利用MySQL Binlog+Kafka即可实现
MySQL Binlog
MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
binlog日志有两个最重要的使用场景。
- mysql主从复制:mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
- 数据恢复:通过mysqlbinlog工具来恢复数据。
binlog日志包括两类文件:
- 二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件。
- 二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。
利用MySQL Binlog+Kafka传递数据变更消息
场景:想要统计新订单的实时增加情况?想要实时跟踪库存的变化?想要订阅业务数据库的变更?下游业务希望实时感知数据库的变更,但频繁查询增量数据又影响业务数据库性能。如何又快又好的做好这些事,而又不影响线上数据库的性能?
实现思路:代码对接上游业务数据库,实时对Binlog数据分析、解析、PB格式序列化和压缩后,将数据库变更推送到Kafka。下游各应用消费Kafka的数据从而实时获取上游业务库的数据变更。
这样,如果下游系统是使用ES系统的话,就可以再message system注册成为consumer,一旦上游数据库产生变更,就可以及时获取到kafka发来的消息,将mysql数据库变更同步到elasticsearch库里。