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

使用fqltool导出Cassandra全查询日志时遭遇NullPointerException

Cassandra 4.1 使用fqltool dump读取全查询日志触发NullPointerException问题排查

问题场景

环境信息:

  • Cassandra版本:4.1
  • 主机系统:Linux
  • Java版本:11

全查询日志配置(执行nodetool getfullquerylog输出):

$ nodetool getfullquerylog
enabled             true                                
log_dir             /home/fullquerylog
archive_command                                         
roll_cycle          HOURLY                              
block               true                                
max_log_size        17179869184                         
max_queue_weight    268435456                           
max_archive_retries 10  

执行命令:

fqltool dump /home/fullquerylog

报错信息:

INFO  [main] 2023-03-28 17:07:38,441 InternalAnnouncer.java:46 - Process id: 7940
INFO  [main] 2023-03-28 17:07:38,443 InternalAnnouncer.java:59 - :: Chronicle Queue :: (5.20.123)
error: null
-- StackTrace --
java.lang.NullPointerException
    at net.openhft.chronicle.bytes.BytesStore.wrap(BytesStore.java:76)
    at net.openhft.chronicle.bytes.Bytes.wrapForRead(Bytes.java:179)
    at org.apache.cassandra.fqltool.commands.Dump.appendValuesToStringBuilder(Dump.java:222)
    at org.apache.cassandra.fqltool.commands.Dump.dumpQuery(Dump.java:179)
    at org.apache.cassandra.fqltool.commands.Dump.lambda$dump$0(Dump.java:123)
    at net.openhft.chronicle.queue.impl.single.StoreTailer.readDocument(StoreTailer.java:111)
    at org.apache.cassandra.fqltool.commands.Dump.dump(Dump.java:148)
    at org.apache.cassandra.fqltool.commands.Dump.run(Dump.java:68)
    at org.apache.cassandra.fqltool.FullQueryLogTool.main(FullQueryLogTool.java:65)

排查与解决步骤

1. 检查日志文件是否损坏

Chronicle Queue格式的日志文件如果在写入时遭遇Cassandra异常重启、磁盘IO中断,会导致文件结构损坏,读取时触发空指针。

  • 单独测试目录下的单个日志文件(比如以.cq4结尾的文件),定位损坏文件:
    fqltool dump /home/fullquerylog/20230328-1700.cq4
    
  • 确认损坏文件后,可临时移除该文件,或通过--start/--end参数指定时间范围跳过损坏时段:
    fqltool dump /home/fullquerylog --start 2023-03-28T16:00:00 --end 2023-03-28T17:00:00
    

2. 确保使用Cassandra自带的fqltool

系统中若存在其他版本的Chronicle Queue依赖,会和Cassandra自带的库冲突,引发错误。

  • 直接调用Cassandra安装目录下的工具,避免环境变量干扰:
    /path/to/cassandra/bin/fqltool dump /home/fullquerylog
    
  • 临时清空CLASSPATH再执行,排除第三方库影响:
    CLASSPATH= /path/to/cassandra/bin/fqltool dump /home/fullquerylog
    

3. 验证日志文件权限

fqltool无读取权限时,可能返回空字节流触发空指针。

  • 检查目录及文件权限:
    ls -l /home/fullquerylog
    
  • 给执行fqltool的用户(通常是cassandra)添加读权限:
    chown -R cassandra:cassandra /home/fullquerylog
    chmod -R 644 /home/fullquerylog
    

4. 升级Cassandra版本

该NullPointerException是Cassandra 4.1的已知bug,已在4.1.1及后续维护版本、4.2正式版中修复,直接升级即可解决。

内容的提问来源于stack exchange,提问作者Raghav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:53:19