2

我有几个 Cassandra 表,在这些表上不断运行墓碑压缩,我相信这是 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_thresholdtombstone_compaction_interval导致持续压缩?

  • 有人可以详细解释tombstone_thresholdtombstone_compaction_interval。Cassandra 文档并没有很好地解释它。

4

1 回答 1

2

因此,假设 SSTable 至少与压缩间隔一样旧,则墓碑压缩可以触发。SStables 是在压缩事物时创建的。阈值是 sstable 有多少是墓碑,然后才压缩墓碑而不是加入 sstable。

您正在使用 leveled 并且看起来像 20 天 ttl。为了跟上进度,您将进行大量的压实以及墓碑压实。Leveled 将是确保您没有旧的墓碑占用默认压缩器的磁盘空间的最佳方法。

如果这个数据是时间序列的,这听起来像是你可能想要考虑使用TWCS来代替。这将创建“桶”,一旦被压缩,每个桶都是一个 sstable,因此一旦该表中数据的 ttl 过期,压缩器就可以删除整个 sstable,这样效率更高。

TWCS 作为 jar 包提供,您需要将其添加到 2.1 的类路径中,我们目前在生产中使用它。它也被添加到 Cassandra 的 3.x 系列中。

于 2016-10-01T16:37:28.857 回答