变更数据捕获
概述
变更数据捕获(CDC)提供了一种机制来标记特定的表用于存档,一旦数据量达到配置的刷新和未刷新的CDC日志的大小之和,就拒绝对这些表的写入。然后将任何包含启用表(启用CDC)数据的CommitLogSegments移动到cassandra.yaml中指定的目录丢弃。在yaml中指定允许的总磁盘空间的阈值,此时新分配的CommitLogSegments将不允许写入CDC数据,直到消费者解析并从目标存档目录中删除数据。
Configuration
启用或禁用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;
assandra.yaml参数
以下cassandra.yaml中的参数可用于CDC:
- 在节点范围内启用或禁用CDC操作。
- 刷新所有相应的memtables后被移动的CommitLogSegments的目标地址。
-
计算被允许的CDC和
cdc_raw_directory
目录中所有刷新的CDC中的所有活动的CommitLogSegments的总和。 - 限制重新计算cdc_raw_directory所占空间的频率,避免不必要地烧写CPU周期。默认值是每秒检查4次。
cdc_enabled
(默认: false)
cdc_raw_directory
(默认:
$CASSANDRA_HOME/data/cdc_raw
)
cdc_free_space_in_mb
: (默认:
4096和1/8卷空间两者中较小的知)
cdc_free_space_check_interval_ms
(默认: 250)
阅读CommitLogSegments
这个实现包括一个CommitLogReplayer的重构到CommitLogReader.java.Usage中,使用各种签名是相当简单的。为了处理从磁盘读取的突变,实现CommitLogReadHandler。
警告
如果没有某种消费过程,请不要启用CDC。
变更数据捕获的初始实现不包括解析器(请参阅上面的读取CommitLogSegments),因此,如果在节点上启用CDC,然后在表上启用CDC,则cdc_free_space_in_mb将填满,然后写入启用了CDC的表将被拒绝,除非某些消费过程到位。