使用 CDC 的数据库复制
数据库复制是从源数据库(MySQL、Mongo、PostgreSQL 等)获取数据并将其复制到目标数据库的过程。这可以是一次性操作或实时同步过程。
在Powerplay,我们的产品团队不断运行各种数据查询以获取用户洞察力。运行复杂的查询来构建用户仪表板会给我们的生产数据库带来巨大的开销。因此,生产 API 开始需要更多时间来执行。它还导致我们的生产数据库崩溃了几次。那时我们决定创建主要生产数据库的副本并将所有分析转移到分析数据库。
数据库复制方法
主要有3种数据复制方式。选择正确的方法取决于您的特定用例以及您使用的数据库类型。
-
Full Load and Dump - 该方法每隔一定时间,先查询DB内部的所有数据,然后进行快照。然后这个快照替换了我们数据仓库中之前的快照。此方法适用于小型表或一次性导出。
-
增量 - 在这个方法中,我们为每个表/集合定义一个事件。每次更新或插入行/文档时,都会触发该事件。定期查询数据库以查找更改。尽管在设置触发系统方面进行了初步努力,但这种方法对 DB 的负载较小。
-
Change Data Capture(CDC) - 它涉及每隔几秒查询一次DB的内部操作日志,并复制数据仓库内部的更改。这是一种更可靠的方法,对数据库性能的影响要小得多。它还可以帮助您避免加载重复的事件。 CDC 是不断更新的数据库的最佳方法。
CDC 与 MongoDB 和 Kafka
我们之所以选择 CDC,是因为我们希望将分析数据库与生产数据库实时同步,这可以通过增量和 CDC 方法来实现。但增量法初始工作量大,需要定期监测。另一方面,它与 CDC 是无缝的。
在了解如何使用MongoDB实现 CDC 之前,我们需要事先了解一些主题:
更改流 -
Change Stream是 v3.6 中引入的一个 MongoDB API。 Change Streams 允许应用程序监听实时数据更改,而不会有拖尾oplog(数据库上所有修改操作的滚动记录)的复杂性和风险。应用程序可以使用更改流来订阅单个集合、数据库或整个部署上的所有数据更改,并立即对其做出反应。
更改流仅适用于副本集。这个限制是因为变更流的实现是基于 oplog 的,它只在副本集上可用。
注意:更改流也可用于分片集群,但不建议这样做,因为您必须单独跟踪每个分片上的每个 oplog,这最终违背了更改流的目的。
要将更改流数据从源数据库传递到接收数据库,我们需要一个事件流平台。这就是 Apache Kafka 适合这个角色的地方。
阿帕奇卡夫卡 -
Kafka是一个分布式事件流平台,使开发人员能够将多个系统连接在一起以交换消息(数据)。它常用于 ETL 数据管道、CDC 系统等。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Vp4f-rS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/y1fcu1vko1o44eko7rvx.png)
卡夫卡关键概念:
-
**集群:**它是服务器的集合,它们共同处理消息/数据的管理。
-
Messages: 以任何格式存储数据的字节数组。
-
**主题:**主题是 Kafka 中存储和发布消息的类别。
-
生产者: 将消息写入 Kafka 主题。
-
**消费者:**阅读来自 Kafka 主题的消息。
为了在 MongoDB 和 Apache Kafka 之间建立连接,MongoDB 构建了官方框架MongoDB Kafka Connector。
MongoDB 卡夫卡连接器 -
[](https://res.cloudinary.com/practicaldev/image/fetch/s--lBeRQLLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/utalktkomyp0adwalsl5.png)
使用此框架,生产者和消费者可以使用 Kafka Connect API 为 MongoDB 中的每个数据库或集合写入和读取更改。
连接器可以配置为源或接收器:
-
源连接器 - 这充当源。它被配置为订阅我们的 MongoDB 部署中的更改,并且随着该部署中的更改,事件将发布到 Kafka 主题。
-
Sink Connector - 它从主题中读取消息,并将文档写入 Sink MongoDB 部署。
MongoDB Kafka 连接器可以使用 CDC 和 Kafka 无缝复制 MongoDB。您可以在此处找到说明,了解如何设置和使用它。
更多推荐
所有评论(0)