我有几个Cassandra表,在这些表上不断地运行tombstone压缩,我相信这是Cassandra进程高CPU使用率背后的原因。
设置包括:
compaction = {'tombstone_threshold': '0.01',
'tombstone_compaction_interval': '1', 'class':
'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
default_time_to_live = 1728000
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
在其中一个表中,我每分钟向它写入数据。因为设置了TTL,所以每分钟也会有一组行的过期。
是由于tombstone_threshold和tombstone_compaction_interval ?
谁能详细解释一下tombstone_threshold和tombstone_compaction_intervalCassandra的文件没有很好地解释这一点。
所以墓碑压缩可以在SSTable至少与压缩间隔一样老的情况下启动。sstable是在事物被压缩时创建的。阈值是在仅针对墓碑而不是连接sstable进行压缩之前,有多少sstable是墓碑。
您正在使用水平式,并且看起来有20天的生存期。你需要做大量的压缩和墓碑压缩来跟上进度。Leveled将是最好的,以确保您没有旧的墓碑占用默认压缩器的磁盘空间。
如果这个数据是时间序列,听起来像是,你可能要考虑使用TWCS代替。这将创建"bucket",每个bucket在被压缩后都是一个sstable,所以一旦该表中数据的ttl过期,压缩器可以删除整个sstable,这样效率更高。
TWCS是一个jar,你需要添加到2.1的类路径中,我们目前在生产中使用它。它已被添加到3。