您可以尝试降低cassandra.yaml 中的commitlog_total_space_in_mb 设置。对于 64 位系统,默认值为 8192MB(它应该在您的 .yaml 文件中被注释掉...您必须在设置时取消注释它)。在调整磁盘大小时,通常最好对此进行计划。
您可以通过在您的提交日志目录上运行 du 来验证这一点:
$ du -d 1 -h ./commitlog
8.1G ./commitlog
虽然,较小的提交日志空间会导致更频繁的刷新(增加磁盘 I/O),因此您需要密切关注这一点。
编辑 20190318
刚刚有一个相关的想法(关于我 4 岁的答案)。我看到它最近受到了一些关注,并想确保那里有正确的信息。
请务必注意,有时提交日志会以“失控”的方式增长。本质上,这可能是因为节点上的写入负载超出了 Cassandra 跟上刷新 memtables 的能力(因此,删除了旧的 commitlog 文件)。如果您发现一个节点包含数十个提交日志文件,并且数量似乎在不断增长,这可能是您的问题。
基本上,您的memtable_cleanup_threshold 可能太低了。尽管此属性已被弃用,但您仍然可以通过减少 memtable_flush_writers 的数量来控制它的计算方式。
memtable_cleanup_threshold = 1 / (memtable_flush_writers + 1)
文档从 3.x 开始更新了,但是以前是这样说的:
# memtable_flush_writers defaults to the smaller of (number of disks,
# number of cores), with a minimum of 2 and a maximum of 8.
#
# If your data directories are backed by SSD, you should increase this
# to the number of cores.
#memtable_flush_writers: 8
...这(我觉得)导致许多人将此值设置得太高WAY。
假设值为 8,memtable_cleanup_threshold 就是.111。当所有 memtable 的占用量超过可用总内存的比例时,就会发生刷新。太多的刷新(阻塞)写入器可以方便地防止这种情况发生。对于单个 /data 目录,我建议将此值设置为 2。