変更データキャプチャ
概要
変更データキャプチャ(CDC)は、特定のテーブルをアーカイブ対象としてフラグを立てるメカニズムと、CDCログの構成可能なディスク上のサイズに達すると、それらのテーブルへの書き込みを拒否するメカニズムを提供します。オペレーターは、テーブルプロパティ cdc=true
を設定することにより(テーブルの作成時
またはテーブルの変更時
のいずれか)、テーブルでCDCを有効にできます。CommitLogSegmentの作成時に、セグメントへのハードリンクがcassandra.yaml
で指定されたディレクトリに作成されます。セグメントのディスクへのfsync時に、セグメント内のどこかにCDCデータが存在する場合、元のセグメント内のどの程度のデータがディスクに永続化されるかの整数オフセットを持つ <segment_name>_cdc.idx ファイルも作成されます。最終セグメントフラッシュ時に、Cassandraがファイルでのすべての処理を完了したことを示す、人間が読める単語「COMPLETED」を含む2行目が_cdc.idxファイルに追加されます。
メモリマップされたハンドルからログをリアルタイムで解析するようにクライアントを推奨するのではなく、インデックスファイルを使用します。これは、データがまだディスクに永続化されていないカーネルバッファに反映される可能性があるためです。_cdc.idxファイルにリストされているオフセットまでのみ解析することで、永続化されたデータのCDCデータのみを解析することが保証されます。
まれなケース、たとえばディスクが遅い場合、ファイルの切り捨て、ファイルへの書き込みによって更新が完了するため、コンシューマーが_cdc.idxファイルから空の値を読み取る可能性があることに注意してください。このような場合、コンシューマーはインデックスファイルの読み取りを再試行する必要があります。
許可される合計ディスク容量のしきい値がyamlで指定され、その時点で、コンシューマーが指定されたcdc_rawディレクトリからファイルを解析して削除するまで、新しく割り当てられたCommitLogSegmentではCDCデータが許可されません。
設定
テーブルでの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パラメータ
CDCには、次のcassandra.yamlオプションが利用可能です。
cdc_enabled
(デフォルト:false)-
ノード全体のCDC操作を有効または無効にします。
cdc_raw_directory
(デフォルト:$CASSANDRA_HOME/data/cdc_raw
)-
対応するすべてのmemtableがフラッシュされた後、CommitLogSegmentを移動する宛先。
cdc_total_space
:(デフォルト:4096MiBと1/8ボリュームスペースの小さい方)-
CDCを許可するすべてのアクティブなCommitLogSegmentの合計として計算されます
cdc_raw_directory
内のすべてのフラッシュされたCDCセグメント。 cdc_free_space_check_interval
(デフォルト:250ms)-
容量に達すると、
cdc_raw_directory
で消費されるスペースを再計算する頻度を制限し、不要なCPUサイクルを消費しないようにします。デフォルトでは、1秒あたり4回チェックします。
CommitLogSegmentの読み取り
CommitLogReader.javaを使用します。使い方は非常に簡単で、さまざまなシグネチャを利用できます。ディスクから読み取られたミューテーションを処理するために、CommitLogReadHandlerを実装します。