本文將介紹Fluss的日誌表。
基本概念
日誌表(Log Table)是 Fluss 中的一種表類型,用於按照資料寫入的順序儲存資料。日誌表僅支援追加記錄,不支援更新或刪除操作。通常情況下,日誌表用於儲存高輸送量的日誌資料,類似於 Apache Kafka 的典型應用情境。
日誌表是通過在 CREATE TABLE 語句中不指定PRIMARY KEY子句來建立的。例如,以下 Flink SQL 陳述式將建立一個包含 3 個分桶的日誌表。
CREATE TABLE log_table (
order_id BIGINT,
item_id BIGINT,
amount INT,
address STRING
)
WITH ('bucket.num' = '3')
;其中,'bucket.num' 應該為一個大於 0 的整數。如果不填該值,則系統將採用叢集的預設值(1)作為該表的分桶數量。
桶分配策略
分桶(Bucketing)是 Fluss 中實現並行化和可擴充性的基本單元。Fluss 中的單個表會被劃分為多個桶,每個桶是讀寫操作的最小儲存單位。向日誌表寫入記錄時,Fluss 會根據分桶分配策略將每條記錄分配到特定的桶中。Fluss 提供以下三種分桶分配策略:
黏性桶策略(預設策略)
隨機播放一個桶並持續寫入,直到已經達到了設定的最大容量(如大小或記錄條數限制) ,無法再繼續寫入更多記錄。
輪詢策略
在寫入每條記錄前,按輪詢方式選擇目標桶。
基於雜湊的分桶
將根據指定桶鍵(bucket keys)的雜湊值分配記錄。
更多詳情請參見資料分桶。
本機存放區策略
參數配置: 通過
table.log.ttl參數定義本地日誌資料的保留時間長度。分層機制: 系統會持續監控資料生命週期。超出 TTL 閾值的冷資料將自動從本地磁碟卸載並歸檔至遠程儲存。此機制確保了本地磁碟僅儲存活躍的熱資料,從而有效控制儲存開銷。
資料的消費
Fluss中的日誌表支援即時資料消費,並嚴格保持每個桶內資料的寫入順序。具體規則如下:
同一表且同一桶的兩條資料記錄:先寫入 Fluss 表的資料會優先被消費。
同一表但不同桶的兩條資料記錄:消費順序無法保證,因為不同桶可能由不同的資料消費任務平行處理。