【免费下载链接】arc
Open, SQL-native time-series database for telemetry you need to keep. 38M+ records/sec ingestion, 25M+ rows/sec queries. InfluxDB Line Protocol and Telegraf compatible. Open Parquet on your storage. Single binary. S3/Azure native. Air-gap ready. AGPL-3.0.
Arc 是一个开源的 SQL 原生时序数据库(Time-Series Database),单二进制运行,写入吞吐可达 38M+ 记录/秒,兼容 InfluxDB Line Protocol 和 Telegraf。它把数据以标准 Parquet 文件格式存储,支持把数据直接放在 S3、Azure Blob 或 GCS 对象存储上——本文带你用最少的配置完成 Arc 对象存储后端切换。
为什么要把 Arc 数据放到对象存储?
Arc 的存储层由统一的 storage backend 工厂 驱动,支持local、s3、minio、azure、azblob、gcs六种后端。把主存储指向对象存储有几个直接好处:
- 🗄️标准 Parquet 文件:所有数据都是开放格式的 Parquet 对象,随时可以用任意工具(或 DuckDB)直接读取,没有厂商锁定;
- 📦多实例共享:多个 Arc 节点可以共享同一个 bucket/container/bucket,这是企业版集群部署的基础;
- 🧊冷热分层:Enterprise 版可把冷数据自动迁移到 S3/Azure/GCS 冷层(
tiered_storage.cold); - 💾备份同源:备份目标(
backup.targets)也可以指向同一对象存储,用prefix隔离子树即可与主数据并存。
三种对象存储后端一览
| 后端取值 | 配置段 | 关键参数 | 推荐认证方式 |
|---|---|---|---|
s3/minio | [storage] | s3_bucket、s3_region、s3_endpoint | 环境变量 / EKS IRSA / 实例角色 |
azure | [storage] | azure_container、azure_account_name | 环境变量(连接串或账号+密钥) |
gcs | [storage] | gcs_bucket | Application Default Credentials / 服务账号密钥文件 |
切换后端只需一行:在arc.toml中设置backend = "s3"、"azure"或"gcs"(见 arc.toml 官方配置参考)。所有配置项都支持ARC_前缀环境变量覆盖,如ARC_STORAGE_BACKEND=s3。
S3 / MinIO 后端最快配置方法
真实 AWS S3(推荐写法)
[storage] backend = "s3" s3_bucket = "my-arc-bucket" s3_region = "us-east-1" # 凭据不要写进配置文件,用环境变量: # export ARC_STORAGE_S3_ACCESS_KEY=... # export ARC_STORAGE_S3_SECRET_KEY=...⚠️新手最常踩的坑:仓库自带的 arc.toml 示例为 MinIO 本地开发预设了
s3_use_ssl = false和s3_path_style = true。如果你指向真实 AWS S3 却沿用这两个值,所有读取都会以403 Forbidden / AccessDenied失败。AWS S3 必须是s3_use_ssl = true+s3_path_style = false(Arc 内置默认值本就是 AWS 正确值,示例文件是主动为 MinIO 改的)。
免密钥部署(IRSA / 实例角色)
如果你运行在 EKS 上,只要 Pod 绑定了 IAM 角色(AWS_ROLE_ARN+AWS_WEB_IDENTITY_TOKEN_FILE),两个s3_*_key全部留空即可——Arc 会自动检测并走 IRSA 认证。本地源码里有现成的 IRSA 验证脚本 可以参考。S3 后端实现见 internal/storage/s3.go,它走 AWS 默认凭据链(环境变量、IAM 角色等)。
自托管 S3 兼容存储(MinIO / SeaweedFS / R2)
三个关键差异:s3_endpoint填服务地址、s3_use_ssl = false(或按你的 TLS 配置)、s3_path_style = true。仓库提供了完整的 Docker Compose 示例,Arc + SeaweedFS 开箱即用:deploy/docker-compose/oss-s3/README.md,对应的环境变量写法在 docker-compose.yml。
Azure Blob 后端配置步骤
[storage] backend = "azure" azure_container = "arc-data" azure_prefix = "instances/abc123" # 可选 # 凭据三选一,均建议用环境变量: # ARC_STORAGE_AZURE_CONNECTION_STRING(最简单) # ARC_STORAGE_AZURE_ACCOUNT_NAME + ARC_STORAGE_AZURE_ACCOUNT_KEY # 或 azure_sas_token(受限权限 SAS 令牌)Azure 支持的全部参数定义在 config.go 的 StorageConfig 中,实现代码在 internal/storage/azure.go。运行在 Azure 托管服务上时,把azure_use_managed_identity = true即可免去账号密钥。本地调试可以用azure_endpoint指向 Azurite。
GCS 后端配置步骤
[storage] backend = "gcs" gcs_bucket = "my-arc-bucket" # gcs_prefix = "instances/abc123" # 可选 # gcs_credentials_file = "/etc/arc/gcs-key.json" # 可选认证逻辑很省心:不设置gcs_credentials_file时,Arc 使用Application Default Credentials(ADC)——GCE/GKE 元数据服务器、GKE Workload Identity、Cloud Run、或GOOGLE_APPLICATION_CREDENTIALS环境变量全部自动识别,云上部署基本零配置。注意 GCS 后端走的是原生 JSON API 而非 S3 兼容端点(见 internal/storage/gcs.go 的说明),并不支持层级命名空间(HNS)bucket,创建时使用标准命名空间 bucket。专用端点(如 Private Service Connect)通过gcs_endpoint配置,仅接受 https。
用 prefix 让多个实例共享一个 bucket
三个后端都支持前缀隔离:s3_prefix/azure_prefix/gcs_prefix,例如:
s3_prefix = "instances/abc123"前缀会应用到该后端触碰的每一个 key,多个部署(或主数据 + 备份)可以安全地共享同一个 bucket/container。前缀是父级关系时 Arc 会在启动时拒绝重叠的备份目标与主存储,帮你避免"备份套娃"式的灾难。
凭据最佳实践
- 🎯优先环境变量:
ARC_STORAGE_S3_ACCESS_KEY、ARC_STORAGE_S3_SECRET_KEY、ARC_STORAGE_AZURE_*、gcs_credentials_file指向密钥文件,配置文件里不落地密钥; - 🎯云上优先免密钥:IRSA、实例角色、Managed Identity、ADC 是安全审计最友好的路径;
- 🎯配置覆盖规则:环境变量用
ARC_前缀 + 点号转下划线(如storage.s3_bucket→ARC_STORAGE_S3_BUCKET),机制见 config.go 环境变量注册; - ⚠️别把密钥提交进仓库:
arc.toml中的 S3/Azure/GCS 凭据值刻意保持注释状态,就是为了避免"发布配置"变成"发布密钥"。
对象存储上的查询性能调优
数据搬到对象存储后,有两处调优值得知道:
- S3 文件缓存:
[query]段的enable_s3_cache = true、s3_cache_size = "128MB"、s3_cache_ttl_seconds = 3600,对 CTE、子查询、反复刷新的 Grafana 面板尤其有效(arc.toml 说明); - 远程读缓存:
database.external_file_cache默认"auto"——节点可能读 S3/Azure 时自动开启 DuckDB 外部文件缓存作为远程读缓存,全部数据在本地盘时自动关闭(config.go 说明)。
另外别忘了:自动 compaction(小时/日两级合并)在对象存储上同样运行,能把小文件合并约 10 倍体积压缩,直接降低存储费与 API 请求费,调优见 docs/operations/compaction.md。
常见错误速查
| 症状 | 原因 | 解决 |
|---|---|---|
AWS S3 全部读取403 / AccessDenied | s3_use_ssl=false或s3_path_style=true | 两者分别改为true/false |
| MinIO 连接失败 | 没设 path-style | s3_path_style = true+ 填s3_endpoint |
| 启动报 bucket 校验失败 | 前缀不可用 / GCS 用了 HNS bucket | 检查 prefix 权限;GCS 换标准命名空间 bucket |
| 写数据成功但备份异常 | 备份目录与主存储重叠 | 备份目标必须与存储根目录不相交(arc.toml 警告) |
| 冷层查询不到数据 | 冷层 bucket 配成了 Glacier/深归档类 | 冷对象需要可即时读取,用 STANDARD 或 Autoclass |
小结与延伸资料
把 Arc 指向对象存储,本质上只是改一个backend键加几行连接参数,换来的是开放 Parquet 文件、多节点共享、冷热分层和更低廉的历史数据成本。
- 完整配置参考:arc.toml
- 存储后端实现:internal/storage/factory.go、s3.go、azure.go、gcs.go
- 配置加载与默认值:internal/config/config.go
- 企业版共享 bucket 集群部署示例:deploy/docker-compose/enterprise-shared/
- 冷层(tiered storage)配置:见 arc.toml 的 tiered_storage 段
【免费下载链接】arc
Open, SQL-native time-series database for telemetry you need to keep. 38M+ records/sec ingestion, 25M+ rows/sec queries. InfluxDB Line Protocol and Telegraf compatible. Open Parquet on your storage. Single binary. S3/Azure native. Air-gap ready. AGPL-3.0.
相关推荐
Grafana Mimir 对象存储后端配置完全指南:S3、GCS、Azure Blob 与 OpenStack Swift
Grafana Mimir 对象存储后端配置完全指南:S3、GCS、Azure Blob 与 OpenStack Swift Grafana Mimir 将指标
时序数据库后端数据存储可观测性云原生一条命令跑通 Pi Web:pi 编程智能体本地浏览器界面的安装、远程访问与源码原理
一条命令跑通 Pi Web:pi 编程智能体本地浏览器界面的安装、远程访问与源码原理 Pi Web 是 pi 编程智能体(pi coding agent)的本地
人工智能代码智能体前端本地部署AI 应用大麦网Python自动抢票脚本:从零配置到跑通下单
大麦网Python自动抢票脚本:从零配置到跑通下单 开票前五分钟,你盯着页面狂按 F5,倒计时归零的那一秒,「即将开抢」还没变灰,按钮就直接弹成了「缺货登记」—
RPA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考