Cassandra 文档

版本

您正在查看预发布版本的文档。

变更数据捕获

概述

变更数据捕获 (CDC) 提供了一种机制来标记特定表以进行归档,以及在 CDC 日志达到可配置的磁盘大小后拒绝写入这些表。操作员可以通过设置表属性 cdc=true 来在表上启用 CDC(在 创建表 时或 更改表 时)。在 CommitLogSegment 创建时,会在 cassandra.yaml 中指定的目录中创建对该段的硬链接。在段 fsync 到磁盘时,如果 CDC 数据存在于该段的任何位置,则还会创建一个 <segment_name>_cdc.idx 文件,其中包含原始段中持久化到磁盘的数据量。在最终段刷新时,将在 _cdc.idx 文件中添加第二行,其中包含人类可读的单词“COMPLETED”,表示 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

在所有相应的 memtable 刷新后,CommitLogSegments 将被移动到的目标位置。

cdc_total_space:(默认值:4096MiB 和 1/8 卷空间的最小值)

计算为所有允许 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 的表的写入将被拒绝,除非存在某种消费流程。

进一步阅读