CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Elasticsearch 入门/课时/数据同步
RawBlame
课时目录12 节

Elasticsearch 入门

  1. 01搜索引擎是什么
  2. 02核心概念
  3. 03Docker 单节点
  4. 04Mapping 与字段类型
  5. 05索引 CRUD
  6. 06查询 DSL
  7. 07聚合入门
  8. 08Spring Data Elasticsearch
  9. 09数据同步
  10. 10分片与扩容
  11. 11Kibana 可视化
  12. 12综合练习

数据同步

双写、CDC、Logstash 概念;MySQL 仍为权威。

30 分钟

数据同步

MySQL cf_track 是 唯一权威;Elasticsearch 索引是 可搜索副本。本课讲双写、CDC、Logstash 等同步思路,强调 最终一致 与失败补偿。

学习目标

  • 比较双写、异步消息、CDC 三种同步模式
  • 理解 Logstash / JDBC input 概念
  • 设计 CodeRoadMap track 索引的幂等 upsert 策略

核心内容

原则:MySQL 为准

写路径:Client → Spring Boot → MySQL(事务提交成功)
                    ↓ 异步
              Elasticsearch(tracks index)
读路径:
  列表/详情/进度 → MySQL(REST /tracks)
  关键词搜索     → ES(/api/lab/search/tracks)

ES 丢数或滞后时,以 MySQL 重放修复;禁止 以 ES 回写 MySQL。

模式一:应用层双写(不推荐生产)

@Transactional
public void updateTrack(Track track) {
    trackRepository.save(track);           // MySQL
    trackSearchRepository.save(toDoc(track)); // ES — 同请求
}

问题:ES 失败是否回滚 MySQL?跨存储无 2PC,易导致不一致。仅适合本地实验。

模式二:异步事件(推荐实验)

MySQL 提交 → 发布 TrackUpdatedEvent → @Async / MQ 消费者 → ES upsert

与 spring-boot-essentials @TransactionalEventListener 或 spring-cloud-essentials 消息队列配合。失败重试 + 死信队列。

模式三:CDC / Logstash

Logstash JDBC input 按 updated_at 增量拉 cf_track,output 到 ES,document_id 用 slug。Debezium 监听 binlog 延迟更低,运维更重。

全量重建:MySQL 导出 → _bulk(es-index)→ alias 切换。OLTP 库(MySQL / 实验 postgresql-essentials)为准,ES 为 CQRS 读模型;mongodb-essentials 日志库通常不必进 ES。

练习

  • 写脚本:MySQL 查 cf_track → NDJSON → _bulk 导入 ES
  • 画双写 vs 事件驱动时序图,标出失败点
  • 说明 track 删除时 ES 应 DELETE 还是 tombstone

小结

MySQL 提交成功即真相;ES 异步投影,可重放修复。 下一课分片与扩容直觉。

加载本节练习…
← 上一课Spring Data Elasticsearch下一课 →分片与扩容