流媒体服务
流服务是 Milvus 内部流系统模块的一个概念,它围绕前向写日志(WAL)构建,以支持各种与流相关的功能。
这些功能包括流式数据摄取/订阅、集群状态故障恢复、将流式数据转换为历史数据以及增长数据查询。从架构上讲,流服务由三个主要部分组成:
流协调器:协调器节点中的逻辑组件。它使用 Etcd 进行服务发现,以找到可用的流节点,并负责将 WAL 与相应的流节点绑定。它还负责注册服务,以公开 WAL 分布拓扑,让流客户端知道给定 WAL 的相应流节点。
流节点集群:负责所有流处理任务(如 WAL 附加、状态恢复、数据增长查询)的流工作节点集群。
流客户端Milvus 内部开发的客户端,封装了服务发现和就绪检查等基本功能。它用于启动消息写入和订阅等操作。

信息
流服务是一个日志驱动的流系统,因此 Milvus 中的所有写操作(如 DML 和 DDL)都被抽象为消息。
流服务会为每个消息分配一个时间戳 Oracle(TSO)字段,表示消息在 WAL 中的顺序。消息的排序决定了 Milvus 中写入操作的顺序。这使得从日志中重建最新群集状态成为可能。
每个消息都属于一个特定的VChannel(虚拟通道),并在该通道内保持一定的不变属性,以确保操作的一致性。例如,在同一通道上,Insert 操作必须始终发生在 DropCollection 操作之前。
Milvus 中的消息顺序可能类似于以下内容:

WAL 组件
为了支持大规模横向扩展,Milvus 的 WAL 不是一个单一的日志文件,而是多个日志的复合文件。每个日志都能独立支持多个 V 通道的流功能。在任何时候,WAL 组件都只能在一个流节点上操作,这些限制由底层 WAL 存储的围栏机制和流协调器共同保证。
WAL 组件的其他功能包括
分段生命周期管理:基于内存条件/段大小/段空闲时间等策略,WAL 可管理每个段的生命周期。
基本事务支持:由于每个消息都有大小限制,因此 WAL 组件支持简单事务级,以保证在 VChannel 级别进行原子写入。
高并发远程日志写入:Milvus 支持第三方远程消息队列作为 WAL 存储。为减少流节点和远程 WAL 存储之间的往返延迟(RTT)以提高写吞吐量,流服务支持并发日志写入。它通过 TSO 和 TSO 同步来维护消息顺序,并按 TSO 顺序读取 WAL 中的消息。
预写缓冲区:信息写入 WAL 后,会暂时存储在预写缓冲区中。这样就能实现日志的尾部读取,而无需从远程 WAL 存储中获取报文。
支持多个 WAL 存储:Woodpecker、Pulsar 和 Kafka。使用零磁盘模式的 Woodpecker,我们可以消除对远程 WAL 存储的依赖。
恢复存储
恢复存储组件总是运行在相应 WAL 组件所在的流节点上。
它负责将流数据转换为持久化历史数据,并将其存储在对象存储中。
它还负责处理流节点上 WAL 组件的内存状态恢复。

查询委托器
查询委托器在每个流节点上运行,负责在单个分片上执行增量查询。它生成查询计划,将其转发给相关的查询节点,并汇总查询结果。
此外,查询委托器还负责向其他查询节点广播删除操作。
查询委托器总是与 WAL 组件共存于同一个流节点上。但如果 Collections 配置了多副本,那么其他流节点上将部署N-1 个委托器。
WAL 寿命和等待就绪
通过将计算节点与存储分离,Milvus 可以轻松地将 WAL 从一个流节点传输到另一个流节点,实现流服务的高可用性。

等待就绪
当 WAL 转移到新的流节点时,客户端会发现旧的流节点拒绝了一些请求。
与此同时,WAL 将在新的流节点上恢复,客户端将等待新流节点上的钱包就绪。

想要更快、更简单、更好用的 Milvus SaaS服务 ?
Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比 免费试用 Zilliz Cloud
反馈
此页对您是否有帮助?
参考资料
https://milvus.io/docs/zh/streaming_service.md
