频繁的Compaction和Memtable Flushing是否会影响群集的写入延迟?
在我们的实现中,我们有一堆计数器列系列[大约30],它们会非常积极地更新.对我们系统的每个请求都会进行大约15-20次更新[所有差异CF].
我们能够在交通繁忙的cassandra系统日志中经常发现Compaction和Flushing发生的情况.当我们在负责密钥的节点上遇到高负载时[日时间戳,分钟时间戳,小时时间戳]和群集的写入延迟比平时增加[0.6 ms到26 ms]
我们没有触及cassandra的任何默认设置,我们运行cassandra的机器配置相当不错[32G ram和16 Core] 4G到cassandra
我们尝试禁用durable_writes来知道它是否有帮助,但它没有像我们预期的那样做得那么好
简短版本:如果在与数据目录不同的磁盘上将Cassandra配置为与commitlog一起使用,那么flush和compaction应该具有可忽略的影响.
注意事项:
更新主要受CPU限制,压缩占用大量CPU.如果您在少于4个内核的计算机或虚拟机上运行[不是您的情况,但为了完整性],您可能希望减少compaction_throughput_mb_per_sec以降低其速度.
如果你有足够的CF同时刷新(这听起来可能是每次请求更新2/3 CF的情况),那么Cassandra可能会暂时阻止写入以确保它不会接受写入速度超过它的速度冲洗它们(否则最终会导致内存耗尽和死亡).对于跨多个CF的高容量插入,4 GB是一个相对较小的堆; 我建议将其增加到8.同样值得启用JVM GC日志记录以查看JVM必须工作的难度 - 示例设置在cassandra-env.sh中.
最后,您没有提到您正在使用的Cassandra版本,但每个主要版本的性能都得到了可靠的提升.特别是如果你使用的是0.8以上的东西,我建议升级.