Canal同步数据库操作到ES中间件是如何实现的?

39 阅读1分钟

首先 MySQL 有主从同步,主库做增删改操作时,会把这些操作记到 binlog 日志里。然后从库会通过 dump 协议跟主库要 binlog,主库收到请求就把 binlog 推给从库,从库再根据日志更新自己的数据。

那 Canal ,就是利用 MySQL 主从复制的原理,把自己伪装成一个 MySQL 从服务器,然后也给主库发 dump 协议。主库收到这个请求后,就会把 binlog 推给 Canal。Canal 拿到 binlog 后,会去解析这些日志,弄清楚数据库到底做了什么操作。

Canal 一般不是直接把解析后的内容发给 ES,而是先发给 MQ(消息队列)。然后我们得自己写个监听程序,去监听 MQ 里的消息。等监听到消息了,再根据这些消息,去 ES 那边执行对应的添加、更新或者删除索引文档的操作 —— 这样就把数据库的数据同步到 ES 中间件里.