Telemetry 架构
Telemetry 校验传入的 JSON,将接受的事件放入缓冲区,再以 Parquet 文件存储到 S3。SQL 查询会合并缓冲区和已存储的数据,因此无需等待下一次上传就能查询新事件。
查询合并实时缓冲区与已存储的 Parquet 文件。
数据摄取和缓冲
Rust 服务检查每个传入的 JSON 事件是否符合目标表的架构,并将兼容的事件加入缓冲区。缓冲区在经过 15 分钟或达到 10,000 行时上传到 S3。
实时查询
查询同时读取缓冲区中的事件以及存储在 S3 或磁盘缓存中的数据。事件无需等待缓冲区刷新就能出现在结果中。
架构演进
Telemetry 随事件到达将新字段加入表架构。现有行在这些字段上没有值。添加字段与更改字段类型是不同的操作。迁移规则和示例见架构演进。
容错和缓冲区管理
服务在正常关闭时刷新缓冲区。死信队列保存无法处理或刷新的数据,以便恢复。这些恢复路径不能保证所有故障都不丢数据。对于不能丢失的事件,应用仍应定义重试行为并验证投递结果。
文件合并
文件合并将小型 Parquet 文件合为更大的文件。这减少了查询需要打开的文件数量,也让 Parquet 能对更多行一起压缩。
选择查询文件
Telemetry 将 SQL 解析为抽象语法树,以确定表、时间范围和筛选条件。它使用文件元数据选择查询所需的文件,并从 S3 获取这些文件。
磁盘缓存和查询路由
Telemetry 按文件内容在磁盘上缓存文件,并将租户查询路由到可能已缓存相关文件的服务器。命中缓存就无需从 S3 下载。查询延迟仍取决于扫描的数据、查询本身和所需文件是否在缓存中。
执行查询
Apache DataFusion 对选定文件执行 SQL 并返回结果。支持的查询写法见 DataFusion SQL 参考。