跳到正文
Elaine Blog
返回

MySQL 到 Elasticsearch 的一致性

Elasticsearch 与搜索架构

MySQL 保存业务真相,Elasticsearch 保存可重建的搜索投影。同步方案必须允许延迟和重复,避免旧事件覆盖新文档,并提供全量重建与持续对账。

Table of contents

Open Table of contents

三种同步方式

方式优点主要风险
应用同步双写实现直观任一边失败产生不一致,增加请求延迟
Binlog CDC不侵入业务提交路径,可重放表结构事件需转换成搜索文档
Outbox + 事件业务语义清晰,与本地事务原子需维护发布、积压和事件契约

CDC(Change Data Capture,变更数据捕获)从数据库日志读取插入、更新和删除。搜索文档常由多张表拼成,一条行变更不等于完整业务事件;投影器可能需要回查数据库或消费领域事件。

用版本阻止倒序覆盖

每个变更携带单调版本,例如数据库行版本或 Binlog 位置。Elasticsearch 更新只接受比当前版本新的事件;重复和旧事件直接忽略。

运行实验室 CDC 测试下载

mvn -Dtest=SearchArchitectureTest#cdcProjectionRejectsOldOrDuplicateEvents test

测试先应用版本 2,再收到版本 1,投影仍保留新值。删除也要携带版本,并保留足够时间的墓碑或外部版本信息,避免迟到更新把已删除文档复活。

重建和对账是正式能力

新建版本化索引,从数据库快照全量导入,同时记录增量起点;全量完成后追平增量,校验数量、业务关键字段哈希和代表性查询,再切换读别名。不要在原索引上边删边重灌。

持续对账按主键范围抽样或计算摘要,差异进入修复队列。监控 CDC 位点延迟、失败事件、重试年龄、文档版本冲突和索引/数据库数量差。对外承诺“搜索在 30 秒内更新”比笼统的“最终一致”更可验证。

下一步

继续阅读09-12 微服务日志采集与检索,把搜索能力用于可治理的日志平台。


分享这篇文章:

上一篇
高可用集群、容量规划与性能调优
下一篇
微服务日志采集与检索