1 个不稳定版本
0.1.0 | 2021年10月29日 |
---|
#7 in #分组
20KB
406 行
plateau[^1] 是一个轻量级的事件和日志聚合器
特性
- 快速。在常见云硬件上的单节点吞吐量高达 1M 128 字节记录/s。
- 通过“主题”进行记录分组,通过“分区”进行写入并行化。
- 每个主题固定大小的保留策略,以及基于年龄的附加可选过期策略。
- 通过可预测的负载 shedding 在负载下优雅地失败。
架构
plateau 被分为两个高级组件:清单和段存储。
清单
清单跟踪有关段的高级元数据,例如大小、时间和逻辑索引范围。
清单跟踪每个主题的每个分区的状态。通过索引段范围优化记录查询,只需读取相关的段。它还用于跟踪和达到保留目标。
目前,唯一支持的清单是本地 SQLite 数据库。
段存储
段存储负责记录的大批量批存储。记录被分组为可变大小的“段”。通过批量写入段数据来优化写入。这聚合了写入并减少了清单提交,这对于高吞吐量至关重要。
“段日志”(slog)是一系列段。它提供了一个接口,用于在指定的边界最终确定段、缓存和提交当前段数据以及推出新段。
A slog 不跟踪自己的任何状态(例如当前段索引)。清单中存储的分区数据用于此目的。每个分区由一个单独的 slog 支持。
slog 写入并行是通过每个分区的后台写入线程实现的。这也启用了负载 shedding。如果后台写入正在进行中,并且当前段已满,则拒绝传入的记录,直到写入清除。
目前,唯一支持的段存储类型是批量索引的 Parquet 文件。
未来工作
plateau 最终将具有可插拔的后端,用于清单和批量段存储。这些可以在使用相同的摄取和查询 API 的同时透明选择。
plateau 还将最终支持复制到批量对象存储(例如 S3)。可能根据需要添加其他类型的复制。
当前设计使用每个分区的线程以保持简单。未来的异步 I/O 系统切换可以启用更高的分区计数。
plateau 目前仅设计为以单个节点运行,以实现速度和简单性。在某个时候,它可能获得冗余的批量存储和高可用性清单插件,从而允许其具有高可用性。
[^1]:平顶山(plateau)以平顶山锯木厂命名,据估计,该锯木厂是加拿大最大的原木加工厂。
依赖项
~63MB
~1M SLoC