永不言败:使用 CDC MinIO Sink 为 CockroachDB 实现持久化数据

Never Say Die: Persistent Data with a CDC MinIO Sink for CockroachDB

CockroachDB 作为一款弹性和可扩展的分布式 SQL 数据库,迅速出现在数据库领域。CockroachDB 汲取了其同名昆虫的顽强生命力,即使在硬件故障面前也能保持高可用性。其分布式架构跨越多个节点,体现了其昆虫对应物般的适应能力。

凭借强大的数据一致性和 ACID 事务支持,CockroachDB 成为需要数据准确性和可靠性的应用程序的可靠选择,能够在动态环境中蓬勃发展,并轻松管理分布式数据的复杂性。

本博文介绍了如何将 MinIO 用作 CockroachDB 的 Changefeed Sink。通过这样做,您不仅可以受益于 CockroachDB 的优势,还可以利用 持久性可扩展性性能 的优势。将此用作建立企业级 CDC 策略的指南。它受到 这个 优秀的代码库的启发。

什么是 CDC?

CDC 是一种智能数据库管理技术,用于跟踪和捕获关系数据库(如 CockroachDB)中的更改。它就像一个监控器,实时检测 CRUD 操作(如插入、更新和删除)。

CDC 的优势在于它能够识别仅更改的数据,这使得它在网络带宽和成本方面比传统的复制方法更有效率。这种效率对于数据集成、实时分析以及维护分布式系统之间的一致性等任务至关重要。CDC 确实是实时互联数据结构的先决条件,并且仍然是保持数据库同步并在动态数据环境中维护可靠性的基本工具。

这种持续的实时数据更新流为训练和优化机器学习模型提供了丰富的基础,这些模型需要大量最新的数据才能取得成功。

CockroachDB 的 Changefeed Sink

Changefeed Sink 在 CockroachDB 中就像数据管道一样,能够有效地将数据库中发生的 CRUD 操作传输到外部目标。在本例中,MinIO 充当其中一个目标。当配置为 Sink 时,MinIO 成为持续更改流的存储库,为 CDC 操作提供持久且可扩展的存储解决方案。

这种方法的一个好处是,您可以使用 MinIO 存储桶中的 CDC 数据来跨云复制您的数据策略。例如,如果您的 CockroachDB 托管在 AWS 中,但您需要将数据本地化以便模型运行,则可以使用这种方法。这可能是实施多云数据策略的有效方式。

先决条件

要遵循本指南,请确保您已安装 Docker Compose。您可以使用 Docker Desktop 分别或一起安装 Docker Engine 和 Docker Compose。最简单的方法是使用 Docker Desktop。

通过运行以下命令检查 Docker Compose 是否已安装

docker-compose --version

您将需要 CockroachDB 的自托管企业版许可证。对于 CockroachDB 的此本地部署,请注意,适用于 MacOS 的 ARM 版 CockroachDB 处于实验阶段,尚未准备好投入生产。

入门

要开始,请从 此处 克隆或下载项目文件夹。

打开一个终端窗口,导航到项目文件夹并运行以下命令:

docker-compose up -d

此命令指示 Docker Compose 从 `docker-compose.yml` 文件读取配置,创建并启动其中定义的服务,并在后台运行它们,使您可以将终端用于其他任务,而无需绑定到容器的控制台输出。

运行命令后,您应该能够看到容器已启动并正在运行。

您可以通过 http://127.0.0.1:8080 访问 Cockroach UI。验证您的节点是否处于活动状态。

您可以通过 http://127.0.0.1:9001 访问 MinIO UI。使用用户名和密码组合 minioadmin:minioadmin 登录。

登录后,您应该能够验证 `docker-compose.yml` 中的 mc 命令是否已执行,并且名为 `cockroach` 的存储桶是否已自动创建。

SQL 命令

容器启动并运行后,您现在可以运行 SQL 命令了。在您下载教程文件并启动容器的同一文件夹中,在终端窗口中运行以下命令。此命令在 `crdb-1` 容器内执行交互式 SQL shell,连接到该容器中运行的 CockroachDB 实例,并允许您输入 SQL 查询。

docker exec -it crdb-1 ./cockroach sql --insecure

如果正确执行了 shell,您应该会看到以下内容。

#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v19.2.2 (x86_64-unknown-linux-gnu, built 2019/12/11 01:33:43, go1.12.12) (same version as client)
# Cluster ID: 0a668a2d-056d-4203-a996-217ca6169f80
#
# Enter \? for a brief introduction.
#

如先决条件中所述,您需要一个企业版 CockroachDB 帐户才能设置 CDC。使用相同的终端窗口输入接下来的命令。

SET CLUSTER SETTING cluster.organization = '<organization name>';

SET CLUSTER SETTING enterprise.license = '<secret>';

SET CLUSTER SETTING kv.rangefeed.enabled = true;

使用 CDC

您现在可以构建您的数据库和表了。以下 SQL 创建了一个名为 `ml_data` 的新数据库,将当前数据库上下文切换到 `ml_data`,创建一个名为 `model_performance` 的表以存储有关机器学习模型的信息,并将两行数据插入到此表中,表示特定模型的性能指标。在同一终端中执行这些命令。

CREATE DATABASE ml_data;

SET DATABASE = ml_data;

CREATE TABLE model_performance (
     model_id INT PRIMARY KEY,
     model_name STRING,
     accuracy FLOAT,
     training_time INT);

INSERT INTO model_performance VALUES
   (1, 'NeuralNetworkV1', 0.85, 120),
   (2, 'RandomForestV2', 0.92, 150);


接下来,运行以下命令为 CockroachDB 中的 `model_performance` 表创建一个 Changefeed,并将其配置为将更新流式传输到 MinIO。

CREATE CHANGEFEED FOR TABLE model_performance INTO 'experimental-s3://cockroach?AWS_ACCESS_KEY_ID=minioadmin&AWS_SECRET_ACCESS_KEY=minioadmin&AWS_ENDPOINT=http://minio:9000&AWS_REGION=us-east-1' with updated, resolved='10s';

导航到 http://127.0.0.1:8080 上的 Cockroach UI,以验证您的 Changefeed 是否已成功创建,并且是否已建立高水位时间戳。

对您的数据进行更改以查看 Changefeed 的实际效果。

UPDATE model_performance SET model_name = 'ResNet50' WHERE model_id = 1;

运行以下命令以确保命令已执行。

SELECT * FROM model_performance ;
  model_id |   model_name   | accuracy | training_time  
+----------+----------------+----------+---------------+
         1 | ResNet50       |     0.88 |           130  
         2 | RandomForestV2 |     0.92 |           150

在生产环境中,您的交易将填充 MinIO,而无需此步骤。

导航回 http://127.0.0.1:9001 上的 MinIO UI 以查看 Changefeed 的实际效果。

结束语

在本教程中,您已经完成了使用 MinIO 创建 Changefeed Sink 的过程,以启用企业版 CockroachDB 的 CDC 策略。

此 CDC 策略为您的最重要数据的 弹性 和持续同步的数据结构奠定了基础。当您绝对需要拥有数据的完美副本以进行数据探索、分析或 AI 应用程序时,CockroachDB 和 MinIO 的组合是您的制胜策略。

发展这里概述的内容,您将继续支持更好的决策,促进 AI/ML 工作,并维护动态数据环境的可靠性。

下载 MinIO 以满足您所有与蟑螂相关需求。MinIO - CockroachDB 的检查站,但它们不会退房。如果您有任何问题或遇到错误,请联系我们 hello@min.io 或在 Slack 上联系我们。

我要感谢 CockroachDB 的各位,尤其是 John Billingsley,感谢他们帮助我们撰写这篇文章。