4.4. 设置 MongoDB 以使用 Debezium 连接器


MongoDB 连接器使用 MongoDB 的更改流来捕获更改,因此连接器只适用于 MongoDB 副本集,或者每个分片都是一个单独的副本集的分片集群。有关设置 副本集或 分片集群,请参阅 MongoDB 文档。另外,请务必了解如何使用副本集启用 访问控制和身份验证

您还必须有一个 MongoDB 用户,该用户具有适当的角色才能读取 oplog 的 admin 数据库。此外,用户还必须能够在分片集群的配置服务器中读取配置数据库,并且必须具有 listDatabases 特权操作。当使用更改流(默认)时,用户还必须具有集群范围的特权操作 查找和 changeStream

当您打算使用 pre-image 并填充 before 字段时,您需要首先为一个集合启用 changeStreamPreAndPostImages,使用 db.createCollection(), create, 或 collMod

最佳 Oplog 配置

Debezium MongoDB 连接器读取 更改流,以获取副本集的 oplog 数据。因为 oplog 是一个固定的、大写的集合,如果超过其最大配置的大小,它开始覆盖其最旧的条目。如果出于某种原因停止连接器,在重启时,它会尝试从最后一个 oplog 流位置恢复流。但是,如果最后一个流位置从 oplog 中删除,具体取决于连接器的 snapshot.mode 属性中指定的值,则连接器可能无法启动,报告 无效的恢复令牌错误。如果失败,您必须创建一个新的连接器,以便 Debezium 继续从数据库捕获记录。如需更多信息,如果 snapshot.mode 设置为 initial,则 Connector 会在停止很长时间后失败

为确保 oplog 保留 Debezium 恢复流所需的偏移值,您可以使用以下任一方法:

  • 增加 oplog 的大小。根据您的典型工作负载,将 oplog 大小设置为大于每小时的峰值 oplog 条目数的值。
  • 增加 oplog 条目保留的最小小时数(MongoDB 4.4 及更高版本)。此设置基于时间,因此即使 oplog 达到其最大配置的大小,可以保证最后一个 n 小时中的条目可用。虽然这通常是首选选择,但对于具有接近容量的高工作负载的集群,请指定最大 oplog 大小。

为了帮助防止与缺少 oplog 条目相关的失败,跟踪报告复制行为的指标非常重要,并优化 oplog 大小以支持 Debezium。特别是,您应该监控 Oplog GB/Hour 和 Replication Oplog Window 的值。如果 Debezium 离线,超过复制 oplog 窗口的值,并且主 oplog 比 Debezium 可以消耗条目的速度增长,则连接器失败可能会导致。

有关如何监控这些指标的详情,请参考 MongoDB 文档

最好将最大 oplog 大小设置为基于 oplog 的每小时增长的值(Oplog GB/Hour),乘以处理 Debezium 失败所需的时间。

也就是说,

oplog GB/Hour X average reaction time to Debezium 失败

例如,如果 oplog 大小限制为 1GB,并且 oplog 每小时增长 3GB,则 oplog 条目会每小时清除三次。如果 Debezium 在此期间失败,则其最后一个 oplog 位置可能会被删除。

如果 oplog 的增长率为 3GB/hour,并且 Debezium 在 2 小时内处于离线状态,您可以将 oplog 大小设置为 3GB/hour X 2 hours 或 6GB。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.