Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

變更資料擷取

概觀

變更資料擷取 (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

警告

不要在沒有任何消費程序的情況下啟用 CDC。

如果在節點上啟用 CDC,然後在表格上啟用 CDC,cdc_free_space_in_mb 將會填滿,然後寫入已啟用 CDC 的表格將會被拒絕,除非有消費程序就緒。

進一步閱讀