InfluxDB 3 存储引擎架构
InfluxDB 3 存储引擎是一个实时的、列式数据库,针对时间序列数据进行了优化,构建于 Rust 之上,基于 Apache Arrow 和 DataFusion。 它支持无限标签基数(唯一标签值的数量)、实时查询,并经过优化以降低存储成本。
存储引擎图
存储引擎组件
路由器
路由器(也称为摄取路由器)解析传入的行协议,然后将其路由到摄取器。 为确保写入持久性,路由器会将数据复制到两个或多个可用的摄取器。
路由器伸缩策略
路由器可以垂直和水平扩展。 水平扩展可提高写入吞吐量,并且通常是路由器最有效的扩展策略。 垂直扩展(特别是增加 CPU)可提高路由器以较低延迟解析传入行协议的能力。
摄取器
摄取器处理在写入请求中提交的行协议,并将时间序列数据持久保存到对象存储。 在此过程中,摄取器执行以下操作
- 查询目录以确定应将数据持久保存到何处,并确保行协议的模式与持久数据的模式兼容。
- 接受或拒绝写入请求中的数据点,并生成响应。
- 处理 Line Protocol 并将时间序列数据以 Apache Parquet 格式持久化到对象存储中。每个 Parquet 文件代表一个分区,即数据的逻辑分组。
- 使尚未持久化的数据可供查询器使用,以确保查询结果包含最新的数据。
- 维护一个短期的预写日志 (WAL),以防止服务中断时的数据丢失。
Ingester 扩展策略
Ingester 可以进行垂直扩展和水平扩展。垂直扩展可以提高写入吞吐量,通常是 Ingester 最有效的扩展策略。
查询器
Querier 处理查询请求并返回查询结果。它通过 Apache Arrow DataFusion 支持 SQL 和 InfluxQL。
查询生命周期
在查询时,Querier 会:
接收查询请求并构建查询计划。
查询Ingester,以:
- 确保查询计划假设的模式与写入数据的模式相匹配
- 在查询结果中包含最近写入的、尚未持久化的数据
读取包含查询数据的分区 Parquet 文件,并扫描每一行以过滤出与查询计划中的谓词匹配的数据。
执行查询计划中指定的任何其他操作(例如:去重、合并和排序)。
将查询结果返回给客户端。
Querier 扩展策略
Querier 可以进行垂直扩展和水平扩展。水平扩展可以提高查询吞吐量,以处理更多并发查询。垂直扩展可以提高 Querier 处理计算密集型查询的能力。
目录
Catalog 是一个与 PostgreSQL 兼容的关系型数据库,用于存储与时间序列数据相关的元数据,包括模式信息和 对象存储中分区的物理位置。它具有以下作用:
Catalog 扩展策略
Catalog 可用的扩展策略取决于用于运行 Catalog 的 PostgreSQL 兼容数据库。所有都支持垂直扩展。大多数支持水平扩展以实现冗余和故障转移。
对象存储
对象存储包含 Apache Parquet 格式的时间序列数据。每个 Parquet 文件代表一个分区。默认情况下,InfluxDB 按天对表进行分区,但您可以自定义分区策略。每个 Parquet 文件中的数据都经过排序、编码和压缩。
对象存储扩展策略
对象存储可用的扩展策略取决于用于运行对象存储的底层对象存储服务。大多数支持水平扩展以实现冗余、故障转移和增加容量。
压缩器
Compactor 处理和压缩对象存储中的分区,以不断优化存储。然后,它使用压缩数据的地址更新Catalog。
Compactor 扩展策略
Compactor 可以进行垂直扩展和水平扩展。由于压缩是一个计算密集型过程,因此垂直扩展(特别是增加可用的 CPU)是 Compactor 最有效的扩展策略。水平扩展可以提高压缩吞吐量,但效率不如垂直扩展。
垃圾收集器
Garbage Collector 运行后台作业,用于清除过期或已删除的数据,删除过时的压缩文件,并回收Catalog 和 对象存储中的空间。
Garbage Collector 扩展策略
Garbage Collector 不是为分布式负载设计的,不应该进行水平扩展。Garbage Collector 不执行 CPU 或内存密集型工作,因此只有在观察到非常高的 CPU 使用率或容器经常耗尽内存时,才应考虑垂直扩展。
此页内容是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供有关 InfluxDB Clustered 和本文档的反馈和错误报告。要寻求支持,请使用以下资源:
拥有年度或支持合同的客户可以联系 InfluxData 支持。