StarRocks × MinIO:打造灵活高效的存算分离方案

“存算分离”(Decoupled Storage and Compute)是一种在现代数据系统中被广泛采用的架构设计。它将计算和存储解耦,使二者可以独立扩展,提升资源利用率并降低运维成本。StarRocks 从 3.0 版本开始支持这一架构,允许用户将数据存储从计算节点中剥离,实现更灵活、弹性的系统部署。
在这种架构中,计算层由数据库引擎负责,存储则交由对象存储系统承担。对象存储的实现方式有很多,包括各大公有云厂商提供的服务以及一些开源方案。我们在本文中选择 MinIO 作为示例,是因为它开源、高性能、支持 S3 协议,并且非常适合用于本地测试或私有部署。
MinIO 和 StarRocks 的组合正是存算分离架构的一个实践案例。MinIO 提供可靠的对象存储能力,StarRocks 专注于查询加速与计算优化,二者结合,在实时和离线分析场景下都能提供良好的性能表现与灵活性。
此外,两者都支持 Kubernetes 原生部署,可以轻松集成到现代云原生平台中。用户无需绑定特定云厂商,也可以通过简单的 YAML 文件,在本地或云上快速搭建和演进整个数据平台。这种部署模式对于开发测试、混合云、边缘计算等场景尤其友好。
下面我们将提供一份实践教程,介绍如何使用 MinIO 作为主存储,配合 StarRocks 构建起一套完整的数据分析环境。如需详细的配置说明,可参考文末链接至 StarRocks 官方文档。
存算分离架构的优势

在引入存算分离架构的同时,StarRocks 也提供了本地缓存机制,用于降低远程对象存储访问频次,从而提高数据读取性能,缓解网络瓶颈。整体优势包括:
成本控制:计算和存储资源可独立扩展,按需配置,避免资源浪费;
部署灵活:可根据业务场景自由组合不同的计算与存储系统;
弹性扩展:适配动态负载需求,计算与存储节点可分别扩容;
查询性能优化:结合本地缓存机制,提升对热点数据的访问效率;
可维护性更高:工作负载可在不同资源池之间迁移,方便运维管理;
资源隔离更清晰:适用于多租户、不同业务线的资源划分需求。
快速开始
接下来你将学到如何在 Docker 容器中运行 StarRocks 和 MinIO,配置 StarRocks 以使用共享存储,加载两个公开数据集,并使用 SQL 进行数据探索。
前置条件
你需要安装:
curl:用于下载 YAML 和数据文件;
Docker Compose:推荐直接安装 Docker Desktop,它包含了 Docker Engine 和 Compose;
验证安装情况:
SQL 客户端:比如 DBeaver 或 MySQL CLI。
本教程中的 MySQL 实例可以通过 MySQL CLI 访问,因此不需要额外依赖。当然,你也可以下载 DBeaver 或 MySQL Workbench 来获得更好的使用体验。
开始使用
创建工作目录并下载 Docker Compose 文件:
使用以下命令让 Docker Compose 在后台启动
docker-compose.yml
文件中定义的所有容器:
MinIO 设置
你可以通过 MinIO 控制台或使用 mc
来操作 MinIO。以下截图和说明基于 MinIO 控制台。
打开浏览器访问:http://localhost:9001/access-keys。用户名和密码在 Docker Compose 文件中已配置,默认是 minioadmin:minioadmin
。
点击 “Create access key +”,然后点击 “Create”。

连接 SQL 客户端(以 DBeaver 为例)
你需要连接到一个 SQL 客户端来操作数据。你可以选择使用 DBeaver。在 DBeaver 中创建一个新的数据库连接,然后选择 MySQL 数据库驱动:
端口:9030
地址:localhost
用户名:root
测试连接成功后点击 Finish。

或者你更习惯使用命令行,也可以在 starrocks-fe
容器中使用 MySQL CLI。要连接到 StarRocks,请进入包含 docker-compose.yml
的目录,并运行以下命令:
创建 Bucket
在你的 SQL 客户端中运行以下命令,确保使用你之前在 MinIO 控制台中创建的 Access Key 和 Secret:
访问 http://localhost:9001/buckets,确认名为 starrocks
的 bucket 是否已成功创建。

下载数据
在终端中运行以下命令,打开 starrocks-fe
容器中的 Bash shell,这样你就可以访问容器的文件系统并在其中执行命令:
运行以下命令,在容器内创建一个 quickstart
目录:
接着运行以下命令,将两个数据集下载到刚刚创建的文件夹中:
创建数据库与表
在使用 SQL 客户端连接到 StarRocks 的终端窗口中,看到 StarRocks >
提示符后,运行以下命令。
你的终端应该类似如下所示:
在 SQL 客户端中创建表
返回 DBeaver 或你选择的其他 SQL 客户端,执行以下命令为数据创建表:
加载数据
切换到你之前下载数据集的终端,在 starrocks-fe
容器中的 shell 中执行以下 curl
命令。当提示输入密码时,直接按回车键即可。
完成后,返回浏览器访问 http://localhost:9001,确认数据是否已成功上传到 MinIO。

查询数据
回到你的 SQL 客户端,我们来对刚才加载的数据运行一些查询。首先,我们通过查询来了解降水、交通事故与星期几/时间之间的关系:
开放表格式+对象存储实践
最后,我们再放上 StarRocks x Apache Iceberg/Hudi x MinIO 的视频 demo,只要短短几分钟就可以完成数据入湖到可视化:
Apache Iceberg:https://www.bilibili.com/video/BV1ET42167TY/
Apache Hudi:https://www.bilibili.com/video/BV1G45PzHEuF/
评论