#事件日志 #分区 #记录 #事件 #聚合器 #并行 #分组

app plateau

轻量级的事件和日志聚合器

1 个不稳定版本

0.1.0 2021年10月29日

#7 in #分组

MIT 许可证

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