使用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
相关产品推荐
相关产品推荐

