Skip to content

MongoDB Source 组件使用说明

组件说明

MongoDB 用于一次性或周期性全量同步数据。

配置项说明

配置名称数据类型是否必填默认值描述
节点名称StringMongoDB当前创建的节点名称,由用户自定义且不可为空。命名可包含字母、数字、下划线。确保唯一性。
节点编码String自动生成当前创建的节点编码,以此标识此组件,由用户自定义且不可为空。命名可包含字母、数字、下划线。确保唯一性。
选择数据源String-从下拉选项中选择列出的当前项目已经关联的数据源。
选择库String-从下拉列表中选择数据库。
集合名称String-MongoDB 中的集合(Collection)是一组文档的容器,类似于关系型数据库中的表。
SchemaString-MongoDB的BSON和SeaTunnel数据结构映射。可以自动获取,也可以手动编写。
匹配查询String在MongoDB中,用于过滤文档以进行查询操作的匹配条件
投影查询String-在MongoDB中,投影查询是一种查询操作,用于选择性地返回文档中的字段。通过使用投影操作符,我们可以指定需要返回的字段,以及是否要排除特定的字段
分片键String_id分片键(用于并行读取)。
分片大小Int64每个分片(Split)的大小(字节)。
每批次获取文档数Int2048每个批处理从服务器获取的文档数量。设置合适的批处理大小可以提高查询性能,避免一次获取大量数据带来的内存压力。
查询最长执行时间Int600该参数是MongoDB的查询选项,用于限制查询操作的最大执行时间。maxTimeMin的取值以分钟为单位。如果查询的执行时间超过了设置的时间限制,MongoDB将终止操作并返回错误。
空闲游标不超时BooleanMongoDB服务器通常在一段时间(10分钟)不活动后会对空闲游标进行超时处理,以防止内存过度使用。将此选项设置为true以防止这种情况发生。但是,如果应用程序处理当前批文档的时间超过30分钟,则会话被标记为过期并关闭。
字符串映射Boolean将整条文档映射为单个 String 字段。
可选参数-其他参数,用户可以根据需求进行配置。

数据类型映射

MongoDB BSON类型SeaTunnel类型说明
ObjectIdSTRING自动转为24位十六进制字符串
StringSTRING
BooleanBOOLEAN
BinaryBINARY
Int32INTEGER
Int64BIGINT
DoubleDOUBLE
Decimal128DECIMAL精度不超过decimal(34,18)
DateDATE
TimestampTIMESTAMP
ObjectROW嵌套结构
ArrayARRAY

特殊类型(映射为STRING):Symbol、RegularExpression、JavaScript、DbPointer 使用Extended JSON格式存储。

性能优化与最佳实践

场景推荐配置原理
大集合全量split-key=_id, split-size=32-64MB并行扫描,避免单线程瓶颈
网络延迟高fetch.size=512减少单次传输数据量
内存受限fetch.size=1024, 减小split-size控制批处理压力
仅需部分字段match.projection大幅减少网络IO
嵌套文档复杂flat.sync-string=true + 下游解析避免深度Schema定义

并行度建议:execution.parallelism 设置为 MongoDB 分片数的 1.5 倍左右。

常见错误与解决方案

错误现象可能原因解决方案
Caused by:
com.mongodb.MongoCommandException: ... not authorized
权限不足创建专用role,授予changeStream权限
Change Stream自动终止长时间无变更,token过期设置heartbeat.interval.ms,推荐30000
大文档同步OOMSplit大小超过文档大小减小split-size,增加JVM内存

FAQ

Q:MongoDB输入组件无法获取元信息;抛异常:Command failed with error 13 (Unauthorized): 'not authorized on admin to execute command {listDatabases: 1, nameOnly: true }'on server 192.168.16.80:27017. The full response is {"ok: 0.0errmsg"not authorized on admin to execute command { listDatabases: 1, nameOnly: true }code":13,"codeName":"Unauthorized"}'

A:MongoDB数据源配置的用户角色权限不够,没有读取数据库的权限。详见MongoDB官方手册:https://www.mongodb.com/zh-cn/docs/manual/reference/built-in-roles/