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 參考。