Cassandra 5 CDC提交日志解析问题:自定义Keyspace变更未显示
Cassandra 5 CDC提交日志仅显示系统KeySpace问题排查与解决
问题描述
尝试用CommitLogReader解析Cassandra 5的CDC提交日志时,仅能看到system和system_schema Keyspace的变更,自定义demo Keyspace下test_table的插入操作未出现在日志中。已执行的操作包括:
- 修改
/etc/cassandra/cassandra.yaml配置:cdc_enabled: true cdc_block_writes: true cdc_on_repair_enabled: true cdc_raw_directory: /var/lib/cassandra/cdc_raw commitlog_directory: /var/lib/cassandra/commitlog - 创建带CDC的KeySpace和表并插入数据:
CREATE KEYSPACE IF NOT EXISTS demo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}; CREATE TABLE IF NOT EXISTS demo.test_table( uuid UUID PRIMARY KEY, name text ) WITH cdc=true; -- 插入数据 INSERT INTO demo.test_table ("uuid", "name") VALUES (f26381e4-6c99-4f82-b60c-b90773418a9d, 'test'); INSERT INTO demo.test_table ("uuid", "name") VALUES (1e1b0e16-706e-421c-977a-81dd43162ef5, 'test2'); INSERT INTO demo.test_table ("uuid", "name") VALUES (5d7cc223-a22f-491d-856e-1639a5b35b52, 'test3'); - 使用Kotlin结合依赖
org.apache.cassandra:cassandra-all:5.0.3编写解析代码,仅输出系统KeySpace的mutation。手动执行nodetool flush demo也未解决问题。
排查与解决步骤
1. 调整全局CDC阻塞配置
Cassandra中,cdc_block_writes: true的作用是当CDC目录异常时阻止写入,但该参数开启后会直接阻止非系统表的写操作被记录到CDC日志。将cassandra.yaml中的该参数改为:
cdc_block_writes: false
修改后重启Cassandra服务,重新插入数据测试。
2. 检查解析代码的过滤逻辑
确认你的Kotlin解析代码是否存在过滤非系统KeySpace的逻辑,比如类似以下的判断:
if (mutation.keyspace == "system" || mutation.keyspace == "system_schema") { // 输出日志 }
如果有此类过滤,需移除或添加demo KeySpace的匹配条件。同时要确认代码读取的是最新的commitlog文件,可在代码中打印读取的文件名列表,验证是否覆盖了数据插入后生成的文件。
3. 验证CDC目录的权限与状态
- 检查
/var/lib/cassandra/cdc_raw目录的权限,确保Cassandra进程(通常为cassandra用户)拥有读写权限:
权限不足时执行:ls -ld /var/lib/cassandra/cdc_rawchown -R cassandra:cassandra /var/lib/cassandra/cdc_raw chmod 700 /var/lib/cassandra/cdc_raw - 确认CDC目录所在磁盘空间充足:
df -h /var/lib/cassandra/cdc_raw
4. 确认表的CDC属性生效
执行CQL命令验证表的CDC配置:
SELECT table_name, cdc FROM system_schema.tables WHERE keyspace_name = 'demo';
若返回的cdc值为false,重新启用表的CDC属性:
ALTER TABLE demo.test_table WITH cdc=true;
内容的提问来源于stack exchange,提问作者zorzmol17
相关产品推荐
相关产品推荐

