使用mongo-connector同步MongoDB到Elasticsearch出现文档缺失问题
文档丢失问题排查原因
- 命令参数冲突:你使用的启动命令中同时存在
--only-dump和--no-dump两个互斥参数,前者表示仅执行全量数据导出不追更增量 oplog,后者表示跳过全量同步仅同步增量数据,两个参数同时存在会导致全量同步逻辑执行异常,大量文档未被处理。同时命令中重复定义了两次--batch-size=1000,部分版本的 mongo-connector 对重复参数解析存在异常,会导致批量写入逻辑故障,部分批次文档未提交到 Elasticsearch。 - 文档管理器版本不兼容:你使用的
elastic2_doc_manager是适配 Elasticsearch 2.x 版本的组件,和你使用的 Elasticsearch 7.12 版本存在大量兼容性差异:Elasticsearch 7.x 版本移除了多 type 支持,默认仅保留_doc内置 type,低版本的文档管理器写入时会因为 type 映射规则不匹配触发写入错误,而你开启了--continue-on-error参数,写入错误的文档会被直接跳过不会中断同步流程,最终表现为文档丢失。 - 字段映射不兼容:MongoDB 中的部分字段类型(如嵌套多层的数组、ObjectId 类型、无标准格式的日期字段、包含特殊字符的字符串字段)如果和 Elasticsearch 侧索引预先定义的映射规则不匹配,写入时会触发数据格式错误,被
--continue-on-error参数跳过不写入。 - 时区参数适配问题:你开启了
--tz-aware时区感知参数,如果 MongoDB 中存储的日期字段未携带时区信息,或者 Elasticsearch 索引的日期字段时区配置和 MongoDB 侧不匹配,会导致日期字段解析失败,对应文档被丢弃。 - 文档ID覆盖问题:mongo-connector 默认会将 MongoDB 的
_id作为 Elasticsearch 文档的_id写入,低版本的elastic2_doc_manager对 ObjectId 类型的转换存在bug,或者部分 MongoDB 文档_id包含特殊字符时,会出现多个 MongoDB 文档对应同一个 Elasticsearch_id的情况,后续写入的文档会覆盖之前的文档,导致最终统计数量偏少。
内容的提问来源于stack exchange,提问作者Noa
相关产品推荐
相关产品推荐

