cassandra 中的高读取延迟

High Read Latency in cassandra

我在一个由三台机器组成的集群上使用 cassandra 2.1.12,每台机器都有 32 GB RAM 和 4 个内核(在 Amazon AWS 上)

我正在使用 cassandra 的所有默认配置。

我将它用于我的网站事件分析(时间序列数据),每日数据约为 1 GB,复制因子为 3。

我的数据在每台机器上已经增长到大约 85 GB,现在读取延迟约为 4.5 s (4000 ms)

我的行很少更新所以,我没有使用 LevelOrder Compaction。 我的写入表现良好,延迟约为 .03ms

已编辑:

ColumnFamily 的定义如下:

CREATE TABLE TimeSeriesData(
logyear int,
logmonth int,
logdate int,
logdatetime timestamp,
cookie text,
sessionid text,
...
PRIMARY KEY (logyear, logmonth, logdate, logdatetime, cookie)
) WITH CLUSTERING ORDER BY (logmonth ASC, logdate ASC, logdatetime ASC, cookie ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
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
AND speculative_retry = '99.0PERCENTILE';

使用我的分区键,目前是 logyear。所以,我的整个数据将在一个分区中。话虽如此,分区程序负责在集群中的节点之间分配行组(通过分区键)。

在这种情况下,它是否是一个单节点?

另外,为什么从单个分区读取数据时读取延迟很差?

一个 SSTable 可以有多个分区,反之亦然吗?

我正在使用 org.apache.cassandra.dht.RandomPartitioner
另外,每天1GB增量数据的column family的idle partition key应该是多少。

您发布的是您认为是单个问题的问题,但它可能涉及更多 - 可能有许多不同的问题,所有问题都表现为高延迟。

最可能的解释是数据模型不佳导致垃圾回收率高。但是,您给我们的帮助太少了。

查看 nodetool cfstats - cfstats 中的延迟是否与您看到的延迟匹配?最大分区大小是多少?