Milvus 数据刷新管道架构总览
文档索引
本文档系列详细介绍了 Milvus DataNode 中数据刷新(Flush)管道的核心组件和机制。文档按组件和功能模块组织,便于深入理解系统设计。
📚 核心组件文档
-
fgManagerImpl的设计与职责- FlowGraph 生命周期管理
- 多通道并发管理
-
- DataSyncService 架构
- FlowGraph 组装流程
- 节点初始化与启动
-
ddNode的消息过滤机制- DDL 消息处理
- 消息类型(MsgType)赋值流程
-
bufferManager的设计与实现- 内存管理与驱逐策略
- 通道注册与生命周期
-
WriteBuffer接口与基础实现l0WriteBuffer特殊设计- 段缓冲(segmentBuffer)管理
-
SyncManager异步同步机制SyncTask执行流程- 数据持久化与元数据更新
-
ttNode的检查点更新机制ChannelCheckpointUpdater异步更新- 检查点失败处理
-
- Flush 操作的全链路影响
- Checkpoint 更新流程
flushTs的作用与重置条件- 数据一致性保障
🔗 组件关系图
1 | ┌─────────────────────────────────────────────────────────────┐ |
📖 关键概念
消息流(Message Stream)
- InsertMsg: 插入数据消息
- DeleteMsg: 删除数据消息
- DDL 消息: CreateSegment、Flush、DropCollection 等控制消息
数据缓冲(WriteBuffer)
- Growing Segment: 正在接收数据的段
- Sealed Segment: 已封装的段,准备刷新
- L0 Segment: 流式模式下的删除数据专用段
同步机制(Sync)
- 自动同步: 基于内存阈值、时间策略触发
- 手动刷新: 通过 Flush 消息触发
- SyncTask: 执行数据持久化的任务单元
检查点(Checkpoint)
- Channel Checkpoint: 通道级别的数据消费位置
- flushTs: 刷新目标时间戳
- 检查点更新: 异步更新到 DataCoord
🎯 数据流程
1 | 消息流 → ddNode(过滤) → writeNode(缓冲) → WriteBuffer → SyncManager → SyncTask → 对象存储 |
📝 相关代码路径
- FlowGraph 管理:
internal/flushcommon/pipeline/flow_graph_manager.go - DataSyncService:
internal/flushcommon/pipeline/data_sync_service.go - DD Node:
internal/flushcommon/pipeline/flow_graph_dd_node.go - WriteBuffer 管理器:
internal/flushcommon/writebuffer/manager.go - WriteBuffer 实现:
internal/flushcommon/writebuffer/write_buffer.go - L0 WriteBuffer:
internal/flushcommon/writebuffer/l0_write_buffer.go - SyncManager:
internal/flushcommon/syncmgr/sync_manager.go - SyncTask:
internal/flushcommon/syncmgr/task.go - TT Node:
internal/flushcommon/pipeline/flow_graph_time_tick_node.go - CheckpointUpdater:
internal/flushcommon/util/checkpoint_updater.go
下一步: 从 FlowGraph 管理器 开始深入了解各个组件。