Milvus 数据刷新管道架构总览

文档索引

本文档系列详细介绍了 Milvus DataNode 中数据刷新(Flush)管道的核心组件和机制。文档按组件和功能模块组织,便于深入理解系统设计。

📚 核心组件文档

  1. FlowGraph 管理器

    • fgManagerImpl 的设计与职责
    • FlowGraph 生命周期管理
    • 多通道并发管理
  2. DataSyncService

    • DataSyncService 架构
    • FlowGraph 组装流程
    • 节点初始化与启动
  3. DD Node(数据分发节点)

    • ddNode 的消息过滤机制
    • DDL 消息处理
    • 消息类型(MsgType)赋值流程
  4. WriteBuffer 管理器

    • bufferManager 的设计与实现
    • 内存管理与驱逐策略
    • 通道注册与生命周期
  5. WriteBuffer 实现

    • WriteBuffer 接口与基础实现
    • l0WriteBuffer 特殊设计
    • 段缓冲(segmentBuffer)管理
  6. SyncManager 与 SyncTask

    • SyncManager 异步同步机制
    • SyncTask 执行流程
    • 数据持久化与元数据更新
  7. TT Node(时间戳节点)

    • ttNode 的检查点更新机制
    • ChannelCheckpointUpdater 异步更新
    • 检查点失败处理
  8. Flush 与 Checkpoint 机制

    • Flush 操作的全链路影响
    • Checkpoint 更新流程
    • flushTs 的作用与重置条件
    • 数据一致性保障

🔗 组件关系图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
┌─────────────────────────────────────────────────────────────┐
│ fgManagerImpl │
│ (管理多个 DataSyncService,按通道组织) │
└────────────────────┬────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│ DataSyncService │
│ (控制一个通道的 FlowGraph) │
└──────┬──────────────┬──────────────┬───────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ ddNode │──▶│writeNode │──▶│ ttNode │
│(消息过滤)│ │(数据缓冲)│ │(检查点更新)│
└────┬─────┘ └────┬─────┘ └─────┬─────┘
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │WriteBufferMgr│ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ WriteBuffer │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ SyncManager │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ SyncTask │ │
│ └──────────────┘ │
│ │
└──────────────┬───────────────┘


┌─────────────────┐
│ ChannelCheckpoint│
│ Updater │
└─────────────────┘

📖 关键概念

消息流(Message Stream)

  • InsertMsg: 插入数据消息
  • DeleteMsg: 删除数据消息
  • DDL 消息: CreateSegment、Flush、DropCollection 等控制消息

数据缓冲(WriteBuffer)

  • Growing Segment: 正在接收数据的段
  • Sealed Segment: 已封装的段,准备刷新
  • L0 Segment: 流式模式下的删除数据专用段

同步机制(Sync)

  • 自动同步: 基于内存阈值、时间策略触发
  • 手动刷新: 通过 Flush 消息触发
  • SyncTask: 执行数据持久化的任务单元

检查点(Checkpoint)

  • Channel Checkpoint: 通道级别的数据消费位置
  • flushTs: 刷新目标时间戳
  • 检查点更新: 异步更新到 DataCoord

🎯 数据流程

1
2
3
4
5
消息流 → ddNode(过滤) → writeNode(缓冲) → WriteBuffer → SyncManager → SyncTask → 对象存储

MetaCache 更新

ttNode → CheckpointUpdater → DataCoord

📝 相关代码路径

  • 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 管理器 开始深入了解各个组件。