變更資料擷取
概觀
變更資料擷取 (CDC) 提供一種機制,可將特定表格標記為要封存,並在 CDC 記錄的磁碟大小達到可設定大小後拒絕寫入這些表格。營運人員可以透過設定表格屬性 cdc=true
來啟用表格的 CDC(在 建立表格
或 變更表格
時)。在建立 CommitLogSegment 時,會在 cassandra.yaml
中指定的目錄中建立指向該區段的硬連結。在區段 fsync 到磁碟時,如果在區段中任何地方都有 CDC 資料,也會建立一個 <segment_name>_cdc.idx 檔案,其中包含原始區段中多少資料已儲存在磁碟中的整數偏移量。在最後一個區段快取時,會在 _cdc.idx 檔案中新增第二行,其中包含人類可讀的字詞「已完成」,表示 Cassandra 已完成檔案的所有處理作業。
我們使用索引檔案,而不是只鼓勵客戶端從記憶體對應的控制代碼解析即時記錄,因為資料可能會反映在尚未儲存在磁碟中的核心緩衝區中。只解析 _cdc.idx 檔案中所列偏移量之前的資料,可確保您只解析持久性資料的 CDC 資料。
請注意,在罕見情況下,例如磁碟速度過慢,消費者有可能從 _cdc.idx 檔案讀取到空值,因為更新是先將檔案截斷再寫入檔案。在這種情況下,消費者應重試讀取索引檔案。
yaml 中指定了允許的總磁碟空間閾值,在該閾值時,新配置的 CommitLogSegments 將不允許 CDC 資料,直到消費者解析並從指定的 cdc_raw 目錄中移除檔案。
組態
在表格上啟用或停用 CDC
透過 cdc 表格屬性啟用或停用 CDC,例如
CREATE TABLE foo (a int, b text, PRIMARY KEY(a)) WITH cdc=true;
ALTER TABLE foo WITH cdc=true;
ALTER TABLE foo WITH cdc=false;
cassandra.yaml 參數
以下 cassandra.yaml 選項可供 CDC 使用
cdc_enabled
(預設值:false)-
啟用或停用節點範圍的 CDC 作業。
cdc_raw_directory
(預設值:$CASSANDRA_HOME/data/cdc_raw
)-
在所有對應的記憶表都已快取後,CommitLogSegments 要移動到的目的地。
cdc_total_space
:(預設值:4096MiB 和 1/8th 磁碟空間的最小值)-
計算為允許 CDC 的所有活動 CommitLogSegments 的總和
cdc_raw_directory
中的所有已快取的 CDC 區段。 cdc_free_space_check_interval
(預設值:250ms)-
在容量已滿時,我們會限制重新計算
cdc_raw_directory
佔用空間的頻率,以避免不必要地浪費 CPU 週期。預設值是每秒檢查 4 次。
讀取 CommitLogSegments
使用 CommitLogReader.java。用法 相當簡單,並有 各種簽章可供使用。為了處理從磁碟讀取的變更,請實作 CommitLogReadHandler。