You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra 5 CDC提交日志解析问题:自定义Keyspace变更未显示

Cassandra 5 CDC提交日志仅显示系统KeySpace问题排查与解决

问题描述

尝试用CommitLogReader解析Cassandra 5的CDC提交日志时,仅能看到system和system_schema Keyspace的变更,自定义demo Keyspace下test_table的插入操作未出现在日志中。已执行的操作包括:

  1. 修改/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
    
  2. 创建带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');
    
  3. 使用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_raw
    
    权限不足时执行:
    chown -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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:38:11