0%

Canal+MQ同步流程

在使用ES索引搜索时,我们需要同步ES和mysql数据库中的数据,常见的索引数据同步方案有两种:同步方式和异步方式。
同步流程

1. 同步方式

同步的方式很简单,即在原先mysql的业务上增加操作ES索引的代码,但是这种方法无法完成事务回滚,会出现信息不一致的情况,维护性差且代码更复杂了。

2. 异步方式

异步的方法则是引入MQ,修改数据库后向MQ发送消息,消费者监听到MQ的消息后对ES索引作出操作来实现同步。这样的方法很好的实现了商品服务与ES的解耦合。但是在商品的业务层中依然要加入发送mq消息的代码,而canal完美解决了这个问题。

3. Canal+MQ同步流程

Canal会监听数据库中指定的表,这个被监听的表并非真正直接与商品对接的表,而是单独创造出来为了方便ES索引更改的包,他通常是原表的阉割版本,这样会让ES索引与数据库的同步更方便。一旦表被操作了,canal就会请求mysql读取binlog,然后向mq发出该表的操作日志。此时我们会在代码中写出的监听该队列的监听程序就会收到mq的更新日志并解析,解析过程中会去判断操作是否为删除,如果为删除,则执行批量删除操作,而如果是更改,则再进行更复杂的更改ES索引的操作的解析,解析完成后向es发送更新索引的请求,最终实现了mysql与ES索引的同步。

欢迎关注我的其它发布渠道

-------------我到底啦 感谢大佬-------------