cassandra中的高读取延迟

时间:2016-07-15 05:46:57

标签: cassandra datastax cassandra-2.0 datastax-enterprise

我在三台机器的集群上使用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 Moverover,如上所述,列系列的空闲分区键应该是每天1GB的增量数据。

1 个答案:

答案 0 :(得分:3)

你发布了你认为是单一问题的内容,但它可能涉及更多 - 可能存在许多不同的问题,都表现为高延迟。

最可能的解释是由于数据模型不佳导致的高垃圾收集。但是,你给我们的经历很少。

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