配置层级关系
milvus.yaml ← 主配置文件(Milvus 镜像内置默认值)
│
└── user.yaml ← 用户覆盖配置(优先级最高,覆盖 milvus.yaml)
│
└── 环境变量 ← 部分参数可通过环境变量注入
(如 ETCD_ENDPOINTS、MINIO_ADDRESS)
配置加载顺序(后者覆盖前者):
- 代码内置默认值
milvus.yaml(镜像内/milvus/configs/milvus.yaml)user.yaml(用户映射/milvus/configs/user.yaml)- 环境变量(仅部分参数支持)
挂载自定义配置
# docker-compose.yml 中的配置挂载
services:
standalone:
volumes:
# 方式1:挂载完整的 milvus.yaml(完全替换)
- ./my_milvus.yaml:/milvus/configs/milvus.yaml
# 方式2:挂载 user.yaml(仅覆盖需要修改的参数,推荐)
- ./user.yaml:/milvus/configs/user.yaml
# Docker run 方式挂载配置
docker run -d --name milvus-standalone \
-p 19530:19530 -p 9091:9091 \
-v /host/path/user.yaml:/milvus/configs/user.yaml \
milvusdb/milvus:v2.6.16 milvus run standalone
查看当前运行时配置
# 进入容器查看完整配置
docker exec -it milvus-standalone cat /milvus/configs/milvus.yaml
# 查看特定配置段
docker exec milvus-standalone cat /milvus/configs/milvus.yaml | grep -A 20 "^proxy:"
# 查看合并后的运行时参数(通过 API)
curl -s http://localhost:9091/api/v1/health
核心参数分类详解
milvus.yaml 配置
- 依赖组件配置
- etcd—元数据存储与服务发现
- minio— S3 兼容对象存储(binlog +索引文件持久化)
- mq —消息队列:rocksmq(SD默认) / pulsar / kafka / woodpecker
- 自身组件配置
- proxy / rootCoord / queryCoord / queryNode
- dataCoord / dataNode / indexCoord / indexNode
- 通用功能配置
- common(安全/多租户/TLS)/quotaAndLimits(配额限流)/log(日志)
如果要理解这块,得了解Milvus的架构:

流节点 (StreamingNode) = 逻辑功能, 没有专门的配置 。它的功能分布融合在了 datanode 和 querynode 上。所有 Worker Node(包含 QueryNode/DataNode)都可以视为 Streaming Node在物理部署上,它则表现为独立的 QueryNode 和 DataNode 进程。
IndexNode 的角色被 DataNode 替代
独立的 coord 配置项也被融合 :
querycoord和indexcoord在较新版本中也已合并,不再单独配置。
本质可以通过以下命令去快速定位到对应的模块
# 查看特定配置段
docker exec milvus-standalone cat /milvus/configs/milvus.yaml | grep -A 20 "^proxy:"
docker exec milvus-standalone cat /milvus/configs/milvus.yaml | grep -A 20 "^etcd:"
不过这里要查看,有更好的方式。我把Milvus 这种 milvus.yaml 复制出来,给大家查看!
# 假设容器名为 milvus-standalone
docker cp milvus-standalone:/milvus/configs/milvus.yaml /home/milvus.yaml

依赖组件参数
etcd — 元数据存储
etcd 是 Milvus 的元数据大脑,存储所有 Collection Schema、索引元数据、Segment 状态、节点拓扑信息。
etcd:
endpoints:
- etcd:2379 # etcd 服务地址(Standalone 模式下 localhost:2379)
rootPath: by-dev # Milvus 数据在 etcd 中的键前缀(多实例隔离用)
metaSubPath: meta # 元数据子路径
kvSubPath: kv # 键值数据子路径
requestTimeout: 10000 # 请求超时(毫秒)
dialTimeout: 10000 # 连接超时(毫秒)
use:
embed: false # Standalone 是否使用内嵌 etcd
auth:
enabled: false # 是否启用 etcd 认证
userName: "" # etcd 用户名
password: "" # etcd 密码
ssl:
enabled: false # 是否启用 TLS
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
endpoints |
["localhost:2379"] |
etcd 地址列表 | 生产环境建议 3 节点 etcd 集群 |
rootPath |
by-dev |
数据前缀 | 多环境隔离时修改此项 |
requestTimeout |
10000 |
请求超时 ms | 网络延迟大时适当增大 |
use.embed |
false |
内嵌模式 | Standalone embed 版自动设为 true |
minio — 对象存储
MinIO/S3 负责存储所有持久化的向量数据,包括 binlog(数据日志)、index(索引文件)、delta_log(删除日志)。
minio:
address: minio:9000 # S3 兼容存储地址
port: 9000 # S3 API 端口
accessKeyID: minioadmin # 访问密钥 ID
secretAccessKey: minioadmin # 访问密钥 Secret
useSSL: false # 是否使用 HTTPS
bucketName: a-bucket # 存储桶名称
rootPath: files # 数据存储根路径
# 云存储提供商(可选)
cloudProvider: aws # aws / gcp / azure / aliyun
iamEndpoint: "" # IAM 端点
# 连接池配置
useVirtualHost: false
requestTimeout: 10000 # 请求超时(毫秒)
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
bucketName |
a-bucket |
存储桶名 | 按项目/环境划分不同 bucket |
rootPath |
files |
数据前缀 | 多实例共享 MinIO 时设不同前缀 |
useSSL |
false |
SSL/TLS | 生产环境必须启用 |
requestTimeout |
10000 |
请求超时 | 大文件场景适当增大 |
浏览器访问 MinIO Console(需提前暴露 9001 端口)
浏览器打开 http://localhost:9001
用户名: minioadmin, 密码: minioadmin
mq — 消息队列(WAL 底层实现)
消息队列在 Milvus 中充当预写日志 (WAL) 的角色,保障数据可靠性。
mq:
type: rocksmq # Standalone 默认:rocksmq
# 可选:pulsar / kafka / woodpecker
# 使用 RocksMQ(Standalone 默认,基于 RocksDB,无需额外容器)
rocksmq:
path: /var/lib/milvus/rdb_data # RocksDB 数据存储路径
rocksmqPageSize: 67108864 # 每页大小 (64MB)
retentionTimeInMinutes: 4320 # 消息保留时间 (72小时)
# 使用 Pulsar(Distributed 默认,集群模式推荐)
# pulsar:
# address: pulsar://pulsar:6650
# maxMessageSize: 5242880 # 单消息最大 5MB
# 使用 Kafka
# kafka:
# brokerList: kafka:9092
消息队列选择指南:
| MQ 类型 | 适用场景 | 外部依赖 | 性能 |
|---|---|---|---|
| rocksmq | Standalone 单机 | 无(内嵌 RocksDB) | 低延迟,无网络开销 |
| pulsar | Distributed 集群 | 需独立 Pulsar 集群 | 高吞吐,支持多租户 |
| kafka | 已有 Kafka 生态 | 需独立 Kafka 集群 | 成熟稳定,生态丰富 |
| woodpecker | v2.6 新增 | 无(直接写 S3) | 零磁盘占用,云原生 |
核心组件参数
proxy — 访问层网关
Proxy 是客户端与 Milvus 交互的唯一入口,负责认证、限流、路由和结果合并。
proxy:
port: 19530 # gRPC 服务端口
http:
enabled: true # 启用 HTTP 端点
port: 9091 # HTTP 端口
debug_mode: false # 调试模式(生产关闭)
timeTickInterval: 200 # 时间滴答间隔(毫秒)
msgStream:
timeTick:
bufSize: 512 # 时间滴答缓冲区大小
# 连接管理
maxUserNum: 100 # 最大客户端连接数
maxNameLength: 255 # Collection/Field 名称最大长度
maxFieldNum: 64 # 单 Collection 最大字段数
maxVectorFieldNum: 10 # 单 Collection 最大向量字段数
maxShardNum: 64 # 单 Collection 最大分片数
maxDimension: 32768 # 向量最大维度
# 访问日志
accessLog:
enabled: false # 是否记录访问日志
maxSize: 512 # 单日志文件最大大小(MB)
maxBackups: 8 # 日志备份数
maxAge: 7 # 日志保留天数
# 超时配置
searchTimeout: 0 # 搜索超时(0 = 不限制)
createTimeout: 60000 # 创建操作超时(ms)
# 连接保活
connectionCheckInterval: 120 # 连接检查间隔(秒)
gracefulStopTimeout: 30 # 优雅关闭超时(秒)
# 客户端缓存
cache:
enabled: true # 启用查询结果缓存
ttl: 0 # 缓存 TTL(0 = 永不过期)
# 请求限制
maxTaskNum: 1024 # 最大并发任务数
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
maxFieldNum |
64 | 最大标量字段数 | 按需调整,单表字段 ≤ 32 更佳 |
maxVectorFieldNum |
10 | 最大向量字段 | 混合搜索场景可增大 |
maxShardNum |
64 | 最大分片数 | 每 2 亿数据 1 个 shard |
maxDimension |
32768 | 最大向量维度 | 超大规模 embedding 模型需调大 |
timeTickInterval |
200ms | Time Tick 间隔 | 实时性要求高可减小(最低 10ms) |
rootCoord — 根协调器(DDL + TSO)
rootCoord:
address: localhost:53100 # 服务地址
port: 53100 # 服务端口
maxPartitionNum: 1024 # 单 Collection 最大分区数
maxDatabaseNum: 64 # 最大数据库数
enableActiveStandby: false # 主备高可用开关
# DDL 操作限制
minDdlChannalRpcTimeout: 20000 # DDL 最小 RPC 超时(ms) --legacy
dmlChannelNum: 16 # DML 通道数 --legacy
maxDdlChanNum: 16 # 最大 DDL 通道数 --legacy
# TSO 时间戳
timestamp:
timetickInterval: 200 # 时间滴答间隔(ms)
# 优雅关闭
gracefulStopTimeout: 30
queryCoord — 查询协调器
queryCoord:
address: localhost:53110
port: 53110
# 负载均衡
autoBalance: true # 自动负载均衡
checkInterval: 1 # 负载检查间隔(秒)
balanceIntervalSeconds: 60 # 负载均衡执行间隔(秒)
overloadedMemoryThreshold: 70 # 过载内存阈值(百分比)
# Segment 分配
taskExecutionTimeout: 120000 # 任务执行超时(ms)
# 握手
enableHandoff: true # 启用 Segment Handoff
handoffTimeout: 5000 # Handoff 超时(ms)
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
autoBalance |
true |
自动负载均衡 | 生产环境保持开启 |
balanceIntervalSeconds |
60s | 均衡检查间隔 | 频繁写入时适当缩短 |
overloadedMemoryThreshold |
70% | 过载阈值 | 内存资源紧张时调低至 50-60% |
handoffTimeout |
5000ms | 交接超时 | 大 Segment 场景适当增加 |
dataCoord — 数据协调器
dataCoord:
address: localhost:53120
port: 53120
# Segment 管理(核心!)
segment:
maxSize: 1024 # 单 Segment 最大容量(MB)
diskSegmentMaxSize: 2048 # 磁盘索引 Segment 最大容量(MB)
sealProportion: 0.12 # Growing→Sealed 触发系数
expansionRate: 1.25 # Compaction 膨胀倍数
# 生命周期
maxLifetime: 86400 # Segment 最大存活时间(秒)
minSizeFromIdToSealed: 16 # Growing→Sealed 最小行数(MB)
maxBinlogFileNum: 10 # 触发 Flush 的 binlog 文件数上限
# Compaction 压缩合并
enableCompaction: true
compaction:
mix:
triggerInterval: 60 # 混合合并触发间隔(秒)
levelzero:
triggerInterval: 60 # L0 合并触发间隔(秒)
clustering:
enable: false # 聚类压缩开关
autoEnable: false # 自动触发聚类压缩
triggerInterval: 600 # 触发间隔(ms)
minInterval: 3600 # 最小间隔(秒)
maxInterval: 259200 # 最大间隔(秒, 默认3天)
newDataSizeThreshold: 512m # 新数据量阈值
timeout: 7200 # 压缩超时(秒)
# 垃圾回收
enableGarbageCollection: true
gc:
interval: 3600 # GC 执行间隔(秒)
dropTolerance: 86400 # 删除容忍时间(秒, 24小时)
scanInterval: 168 # 对象存储孤儿文件扫描间隔(小时)
# 索引构建
index:
taskSlot: 1 # 索引任务并发槽位
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
segment.maxSize |
1024MB | Segment 最大大小 | 内存充裕可增至 4096MB(减少 Segment 数) |
segment.sealProportion |
0.12 | Seal 触发系数 | 写入吞吐高时设小(如 0.08);离线场景设大(如 0.3) |
segment.expansionRate |
1.25 | 合并膨胀率 | 默认即可 |
gc.dropTolerance |
86400s | 数据删除宽限期 | 若需要 Time Travel 超过 24h,需增大 |
enableCompaction |
true |
合并开关 | 纯只读场景可关闭 |
indexCoord — 索引协调器
indexCoord:
address: localhost:53130
port: 53130
enable: true # v2.5+ 索引协调功能已并入 DataCoord
bindInterval: 5000
v2.6 变更: IndexCoord 功能已合并到 DataCoord。此配置段保留向后兼容。
queryNode — 查询节点
queryNode:
port: 21123
# 缓存管理(v2.6 重要特性)
cache:
enabled: true
memory: 2048 # 缓存内存容量(MB)
warmup: async # 预热策略: async | sync | disable
# 块缓存 (Chunk Cache)
chunk:
enabled: false # 是否启用本地磁盘缓存
path: /var/lib/milvus/chunk_cache
size: 104857600 # 缓存大小(字节, 默认100MB)
# 内存映射 (mmap)
mmap:
vectorField: false # 向量字段是否使用 mmap
scalarField: false # 标量字段是否使用 mmap
vectorIndex: false # 向量索引是否使用 mmap
# 搜索配置
scheduler:
receiveChanSize: 10240 # 调度接收通道大小
readChanSize: 128
maxReadConcurrentRatio: 1.0 # 最大并发读比例
# 优雅关闭
gracefulStopTimeout: 1800 # 优雅关闭超时(秒)
# 磁盘索引
disk:
enabled: false # 是否启用磁盘索引(DiskANN)
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
cache.memory |
2048MB | 查询缓存大小 | 内存充裕可增大至 4-8GB |
cache.warmup |
async |
预热策略 | async: 加载快但初期慢;sync: 加载慢但查询无延迟;disable: 不预热 |
mmap.vectorField |
false |
向量 mmap | 内存不足时设为 true,用磁盘换内存 |
mmap.scalarField |
false |
标量 mmap | 有大标量字段(JOSN/Array)时推荐开启 |
disk.enabled |
false |
DiskANN 磁盘索引 | 十亿级数据且内存有限时开启 |
dataNode — 数据节点
dataNode:
port: 21124
# 数据刷新
flush:
insertBufSize: 16777216 # 插入缓冲区大小(字节, 16MB)
mergeBufSize: 16777216 # 合并缓冲区大小(字节)
interval: 1 # Flush 检查间隔(秒)
# 数据导入
import:
maxConcurrentTaskNum: 16
MaxImportFileSize: 4194304 # 最大导入文件大小(字节, 4GB)
memoryLimit: 2147483648 # 导入内存限制(字节, 2GB)
# Compaction 执行
compaction:
useMergeSort: true # 使用归并排序
memoryBufferRatio: 0.1 # 压缩内存缓冲比例
workPoolSize: 8 # 压缩工作池大小
# 优雅关闭
gracefulStopTimeout: 1800
indexNode — 索引构建节点
indexNode:
port: 21121
scheduler:
buildParallel: 1 # 并行构建索引的任务数
# 磁盘索引
disk:
enabled: false
gracefulStopTimeout: 1800
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
buildParallel |
1 | 并行构建数 | CPU 充裕可增至 2-4,但会增加内存压力 |
通用配置参数
common — 通用安全配置
common:
# 安全
security:
authorizationEnabled: false # RBAC 鉴权开关
defaultRootPassword: Milvus # 默认 root 密码(首次启动后修改!)
superUsers: "" # 超级用户列表
tlsMode: 0 # TLS 模式: 0=关闭 1=单向 2=双向
# 多租户
session:
ttl: 604800 # 会话 TTL(秒, 7天)
retryTimes: 30 # 重试次数
# 存储
storageType: remote # 存储类型: remote(MinIO/S3) | local
retentionDuration: 86400 # 数据保留时长(秒),影响 Time Travel 窗口
# 时间戳
usePartitionKeyAsClusteringKey: false # 分区键用作聚类键
# 会话管理
sessionTTL: 60 # 会话超时(秒)
sessionRetryTimes: 30 # 会话重试次数
# 指标
metrics:
port: 9090 # Prometheus 指标端口
quotaAndLimits — 配额与限流
这是 milvus.yaml 中配置项最多的章节,防止单个操作或用户打爆系统。
quotaAndLimits:
enabled: true # 全局限流开关
# ====== 内存保护 ======
forceDenyAllDDL: false # 紧急开关:内存不足时强制拒绝所有 DDL
forceDenyAllDML: false # 紧急开关:内存不足时强制拒绝所有 DML
# ====== DDL 限制 ======
ddl:
enabled: false # DDL 限流开关
collectionRate: -1 # -1 不限制
partitionRate: -1
# ====== DML 限制(数据写入) ======
dml:
enabled: false
insertRate:
collection:
max: -1 # 单 Collection 最大插入速率(MB/s)
db:
max: -1
upsertRate:
collection:
max: -1
deleteRate:
collection:
max: -1
bulkLoadRate:
collection:
max: -1
# ====== DQL 限制(查询搜索) ======
dql:
enabled: false
searchRate:
collection:
max: -1 # 单 Collection 最大搜索 QPS
db:
max: -1
queryRate:
collection:
max: -1
# ====== 写入保护 ======
flushRate:
enabled: false
collection:
max: 0.1 # 每 Collection Flush 频率(次/秒),默认 10s 1 次
# ====== 磁盘保护 ======
diskProtection:
enabled: true
diskQuota: -1 # 磁盘配额限制(字节), -1 = 不限制
# ====== 内存保护 ======
memoryProtection:
enabled: true
waterMarkMemoryRatio: 0.85 # 内存水位线(85% 触发保护)
# ====== 结果限制 ======
limits:
maxCollectionNum: 65536 # 最大 Collection 数量
maxInsertSize: -1 # 单次 Insert 最大数据量(字节)
maxSearchSize: -1 # 单次 Search 最大数据量
maxQuerySize: -1 # 单次 Query 最大数据量
maxQueryResultWindow: 16384 # 查询结果最大窗口
# ====== Deny Writing ======
denyWritingOnMemoryWatermark: true # 内存水位触发时拒绝写入
| 参数 | 默认值 | 说明 | 调优建议 |
|---|---|---|---|
flushRate.collection.max |
0.1 | Flush 频率限制 | 写入密集时可增至 1.0 |
waterMarkMemoryRatio |
0.85 | 内存水位 | 系统内存紧张时调低至 0.7 |
maxCollectionNum |
65536 | 最大 Collection 数 | 多租户场景默认够用 |
maxQueryResultWindow |
16384 | 查询窗口 | 需要大量分页时增大 |
log — 日志配置
log:
level: info # 日志级别: debug | info | warn | error | panic | fatal
file:
rootPath: "" # 日志目录
maxSize: 512 # 单文件最大(MB)
maxBackups: 20 # 最大备份文件数
maxAge: 7 # 最大保留天数
format: text # 格式: text | json
stdout: true # 输出到标准输出
⚠️ 重要提醒:
debug级别日志量非常大,仅调试时使用。生产环境必须设为info。Docker 部署时务必限制容器日志大小:// /etc/docker/daemon.json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }
Milvus 2.6.x-核心机制深度解析
核心机制 — 流批分离架构(v2.6 重大变更)
https://milvus.io/docs/v2.5.x/assets/milvus_architecture.png

https://milvus.io/docs/v2.5.x/assets/milvus_architecture.png

2.5 vs 2.6 组件变化对比:
| 2.5.x 组件 | 2.6.x 组件 | 变化说明 |
|---|---|---|
| QueryNode | QueryNode | 仅处理 Sealed Segment 批量查询 |
| DataNode | DataNode | 仅做 Compaction + 索引构建 |
| — | StreamingNode | 全新!接管所有实时数据写入 |
| IndexNode 独立 | 合并入 DataNode | 简化拓扑 |
| RootCoord/QueryCoord/DataCoord | MixCoord | 协调器三合一 |
核心机制 — 数据写入完整路径

这里的TSO:它是一个全局单调递增的时钟,给每条写入数据盖一个”时间邮戳”,用来确定”谁先谁后”。
因为这里有可能有多个stream的node节点,TSO 解决的就是这个问题 :不管你从哪个 StreamingNode 写入,所有数据都用同一个全局序号,绝对的”先来后到”。
核心机制 — WAL 预写日志
WAL = 数据可靠性核心支柱。任何操作先写 WAL,后处理。
WAL 关键特性:
| 特性 | 说明 |
|---|---|
| 先写后处理 | 任何 DML/DDL 先记录到 WAL,然后才处理 |
| 崩溃恢复 | StreamingNode 崩溃 → 重放 WAL → 完整恢复 |
| TSO 排序 | 每条消息带全局 TSO,WAL 中的顺序 = 操作发生的顺序 |
| 原子写入 | VChannel 级别保证原子性 |
| 可迁移 | WAL 可在 StreamingNode 间迁移,实现高可用 |
核心机制 — Segment 生命周期
Segment 是 Milvus 中数据管理的****最小物理单元。

segment 状态速查:
| 状态 | 可写 | 可查 | 索引 | 存储位置 | 持久化 |
|---|---|---|---|---|---|
| Growing | ✅ | ✅ (BF) | ❌ | StreamingNode 内存 | ❌ |
| Sealed | ❌ | ❌ | 待构建 | MinIO + QueryNode | ✅ |
| Loaded | ❌ | ✅ | ✅ | QueryNode 内存/磁盘 | ✅ |
| Compacted | ❌ | ✅ | ✅ | QueryNode + MinIO | ✅ |
核心机制 — Flush + Compaction
Flush 是将 Growing Segment 的数据从内存****持久化到对象存储的过程。
触发条件(满足任一):
① 大小:≥ 1024MB × 0.12 ≈ 123MB
② 文件数:binlog ≥ 10 个
③ 时长:Segment ≥ 86400s
④ 手动:client.flush() API
执行流程:
Seal 指令 → WAL 消费完毕
→ 序列化为 binlog → 上传 S3
→ 标记 Sealed → Handoff
→ DataNode 异步建索引
✅ 非阻塞:其他 Segment 不受影响
✅ TSO 保证一致性快照
Compaction 压缩合并:**Compaction 将多个小 Sealed Segment **合并为更大的 Segment。
三种类型:
① Binlog(L0):合并 insert+delta log
② Segment(Mix):小段合并
③ Clustering:按标量 key 重排
合并流程:
检测小段 → 下发任务 → 读取
→ 合并去重 → 新段写 S3
→ 建索引 → QueryNode 加载
→ 旧段标记 GC → 异步清理
✅ 后台异步:不阻塞查询
✅ 原子切换:新段就绪后切换
三种 Compaction 类型:
| 类型 | 触发条件 | 作用 |
|---|---|---|
| Binlog Compaction (L0) | delta binlog 行数 > 总量的 20% | 合并 insert log + delta log,清理已删除数据 |
| Segment Compaction (Mix) | 小于 0.5×maxSize 的段 > 10 个 | 小段合并,减少碎片 |
| Clustering Compaction | 需手动开启 + 按配置触发 | 按标量 key 重排数据,优化标量过滤 |
核心机制 — (Timestamp Oracle)
TSO 是 Milvus 分布式一致性的****核心支柱。
TSO 核心作用:
| 作用 | 说明 |
|---|---|
| 全局有序 | 所有操作获得严格递增的时间戳,操作顺序明确 |
| 因果一致性 | TSO(A) < TSO(B) ⇒ 操作 A 发生在操作 B 之前 |
| 一致性快照 | 查询可指定 Guarantee Timestamp,读取某时间点快照 |
| 崩溃恢复 | WAL 中按 TSO 顺序重放,恢复状态一致 |
一致性级别与 TSO 的关系:
| 一致性级别 | Guarantee Timestamp | 性能 | 适用场景 |
|---|---|---|---|
| Strong | 最新 TSO(等待所有已提交数据) | 最低 | 金融、强一致业务 |
| Bounded | TSO − 可配置时间窗口 | 中 | 大多数业务 |
| Session | 同一会话内自己的写入可见 | 中 | Web 应用 |
| Eventually | 不保证 | 最高 | 推荐系统、搜索 |
Time Tick + 负载均衡机制
Time Tick 是 WAL 流中的****心跳/推进信号,代表”此时间点之前的所有消息都已写入 WAL”。
Time Tick 四大作用:
- 推进可读水位: QueryNode 需要知道 WAL 已写到哪个时间点,以确定哪些 Growing Data 可安全读取
- 触发 Flush 决策: Time Tick 推进到 Segment 所有数据已写入时,可安全 Flush
- 一致性边界: Bounded Consistency 的”允许滞后 N 秒”依赖 Time Tick 确定当前最新可读时间
- 防止查询饥饿: 即使无新数据写入,Time Tick 也周期性推进,查询不被无限阻塞
**Proxy 在路由查询请求到 QueryNode 时,通过 **LoadBalancer 接口选择目标节点。
三种策略(Proxy 路由到 QueryNode):
① RoundRobin 轮询
Q1→Q2→Q3→Q1 轮流,简单高效
适合:节点同配、数据均匀
② LeastCost 最少代价
选 CPU/内存/请求数最轻的节点
适合:节点异构、负载波动大
③ LookAside 旁路
查本地缓存 → 命中直接转发
适合:高并发 + 低延迟