Mysql數(shù)據(jù)同步ES的4種方式
1、同步雙寫
通過應用服務,直接為數(shù)據(jù)庫及ES寫如數(shù)據(jù)。

優(yōu)點:
- 業(yè)務邏輯簡單;
- 實時性高
缺點:
- 業(yè)務耦合,耦合大量數(shù)據(jù)同步代碼
- 硬編碼,有需要寫入 MySQL 的地方都需要添加寫入 ES 的代碼;
- 影響性能,寫入兩個存儲,響應時間變長
- 不便擴展:搜索可能有一些個性化需求,需要對數(shù)據(jù)進行聚合,這種方式不便實現(xiàn)
- 存在雙寫失敗丟數(shù)據(jù)風險;
- 性能較差,本來 MySQL 的性能不是很高,再加一個 ES,系統(tǒng)的性能必然會下降。
2、異步雙寫

優(yōu)點:
- 解耦合
- 不易出現(xiàn)數(shù)據(jù)丟失問題,主要基于 MQ 消息的消費保障機制;
- 實時性較好,使用MQ,正常情況下,同步完成在秒級;
缺點:
- 引入了新的組件和服務,增加了復雜度
- 硬編碼問題
- MQ是異步消費模型,用戶寫入的數(shù)據(jù)不一定可以馬上看到,造成延時。
3、數(shù)據(jù)抽取

優(yōu)點:
- 實現(xiàn)比較簡單
- 沒有硬編碼、無業(yè)務耦合
缺點:
- 實時性難以保證
- 對存儲壓力較大
經(jīng)典方案:借助 Logstash 實現(xiàn)數(shù)據(jù)同步,其底層實現(xiàn)原理就是根據(jù)配置定期使用 SQL 查詢新增的數(shù)據(jù)寫入 ES 中,實現(xiàn)數(shù)據(jù)的增量同步。
4、數(shù)據(jù)訂閱
MySQL通過binlog訂閱實現(xiàn)主從同步,各路數(shù)據(jù)訂閱框架比如canal就依據(jù)這個原理,將client組件偽裝成從庫,來實現(xiàn)數(shù)據(jù)訂閱。

優(yōu)點:
- 業(yè)務入侵較少
- 實時性較好、無業(yè)務耦合
缺點:
- 構建 Binlog 系統(tǒng)復雜;
- 如果采用 MQ 消費解析的 Binlog 信息,也會像方案二一樣存在 MQ 延時的風險。
至于數(shù)據(jù)訂閱框架的選型,主流的大體上是這些:
| Cancal | Maxwell | Python-Mysql-Rplication | |
|---|---|---|---|
| 開源方 | 阿里巴巴 | Zendesk | 社區(qū) |
| 開發(fā)語言 | Java | Java | Python |
| 活躍度 | 活躍 | 活躍 | 活躍 |
| 高可用 | 支持 | 支持 | 不支持 |
| 客戶端 | Java/Go/PHP/Python/Rust | 無 | Python |
| 消息落地 | Kafka/RocketMQ 等 | Kafka/RabbitNQ/Redis 等 | 自定義 |
| 消息格式 | 自定義 | JSON | 自定義 |
| 文檔詳略 | 詳細 | 詳細 | 詳細 |
| Boostrap | 不支持 | 支持 | 不支持 |
本文來自博客園,作者:曾經(jīng)已是追憶,轉載請注明原文鏈接:http://www.rzrgm.cn/qingdufengyun/p/18289322

浙公網(wǎng)安備 33010602011771號