mongodb同步elasticSearch方案评估

Ax70lp

什么是Elasticsearch 什么是 MongoDB?
自 2010 年发布以来,Elasticsearch 已成为全球人气排名前十的数据库之一。最初基于 Apache 的 Lucene 搜索引擎,它仍然是一个开源产品,使用 Java 构建,并以非结构化 NoSQL 格式存储数据。 Elasticsearch 专为搜索而构建,并提供高级数据索引功能。对于数据分析,它与 Kibana 和 Logstash 一起运行以形成 ELK 堆栈。 MongoDB 是一个开源的 NoSQL 数据库管理程序,可用于管理分布式架构中的大量数据。它是世界上最受欢迎的 文档存储,并且在一般最受欢迎的数据库中排名前 5 位。 MongoDB 允许您管理、存储和检索面向文档的信息。它提供了快速即席查询、索引、负载平衡、数据聚合和服务器端 JavaScript 执行等功能。

如何选择数据同步工具

同步方式

搜索功能是App必不可少的一部分,我们使用目前比较流行的Elasticsearch进行全文检索。我们的数据主要存储在MongoDB中,如何将这些数据导入到Elasticsearch中,并能一直保持同步呢?做法大致分为两种:

  • 1.应用层(以nodejs举例)
    简单来讲就是我在mongodb添加一条,我同时也对es添加一条,更新删除同理。
    有:mongoosastic、mongoose-elasticsearch-xp

  • 2.数据层
    有通过oplog同步数据,也有通过定期轮询新数据
    有:monstache、mongo-connector、LogStash、Flink CDC

要求

需要支持旧数据全量同步、增量同步(增删改),且近乎实时

选择建议

monstache Flink CDC LogStash mongoosastic mongoose-elasticsearch-xp
近实时 ☑️ ☑️ ☑️根据配置采集速度 ☑️ ☑️
支持(旧数据)全量同步 ☑️ ☑️ ☑️ ✖️ ☑️ esSynchronise
支持增量同步(增删改) ☑️ ☑️ ✖️不支持删 ✖️不支持删改 ✖️不支持批量删改,仅支持通过findOneAndUpdate的{new: true}支持改
是否现在社区主流 ☑️是 ☑️未来主流,可多数据源打成宽表 ✖️否,更适用于无需删改的日志数据 ✖️否 ✖️否
同步方式 数据层oplog 数据层oplog流处理 数据层定期轮询是否有数据 应用层mongoose插件 应用层mongoose插件

排除原则

1、mongo-connector太久了,支持es版本有限,且问题非常多,排除
2、mongoosastic不支持全量同步,不支持删改,排除
3、mongoose-elasticsearch-xp是在mongoosastic基础上改进的,不支持删,排除
4、LogStash不支持删同步,排除
5、一般程序构架为了解耦且并非原子操作,均不会采用在在应用层上做数据同步,排除mongoosastic、mongoose-elasticsearch-xp

实践

monstache实践mongodb同步es
Flink CDC实践mongodb到es

阿里云推荐使用:monstache
通过Monstache实时同步MongoDB数据到阿里云ES