由于MySql是读写分离,主从同步的,由主数据库进行写操作,从数据库进行读操作,当主数据库在进行增删改操作的时候,从数据库会进行同步操作。基于数据库的这个原理:
首先要先开启MySql的binlog并设置为row模式,在这个模式下会将增删改操作前后的内容记录在binlog中,然后要给canal注册一个有MySQL的权限的账户。然后还要修改canal的instance.properties配置文件,用于监听数据库。
canal启动后会模拟mysql的从数据库,会向主数据库发送dump请求,让主数据库将Binlog中的数据同步到canal模拟的从数据库中,canal在接收到数据会及时的接受并对它做解析,然后通过消息将这些数据发送给MQ队列。
在MQ接收到消息后,后台的监听器会监听到MQ收到的消息,在监听到消息后及时对消息就行解析校验,判断是否为DELETE操作,如果是就将对ES中间件进行同步的删除操作;如果不是,就对ES中间件进行同步的增加操作。如果数据的操作是UPDATE也会走save的方法,因为直接进行增加会覆盖整条数据,可以保证数据的一致性。