数据库与 ES 的数据一致性

87 阅读1分钟

在我们的项目中,采用 Canal 与消息队列(MQ)中间件实现了数据库与 Elasticsearch(ES)的数据一致性保障,能够将数据库数据实时同步至 ES。

这种方案的核心优势在于对业务代码完全零侵入,且具备极强的通用性。具体如下:

当数据库数据发生变更时,MySQL 会将变更记录写入 binlog 日志;Canal 作为数据同步的关键组件,会伪装成 MySQL 从库,然后向主库发送 dump 请求,从而获取并解析 binlog 日志,随后将解析后的变更数据写入 MQ。

我们写消费者程序,该程序会实时监听 MQ 中的消息。在接收到消息后,系统会对其进行解析与校验,精准判断操作类型:若为删除操作,则同步执行 ES 中的删除动作;若为新增或修改操作,则对应执行 ES 中的新增或更新操作。这样就有效保证了数据库与 ES 的数据一致性