Cassandra计数器readtimeout错误

时间:2018-02-16 18:50:55

标签: cassandra timeout counter cql cassandra-3.0

我有一个风暴拓扑,可以将数据插入到Cassandra计数器表中。该表有6个分区键,4个主键和5个计数器。

当数据开始插入时,我可以正确地查询计数器,但是在用数千个事件更新表几分钟后,每当我尝试从表中读取其中一行时,我会得到一个readtimeout(最常更新) )。其他行我可以快速而精细地阅读。此外,如果我运行“select *”,前几百个会按预期快速返回。

我正在使用Cassandra 3.6

确切错误:

ReadTimeout: Error from server: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}

表格定义:

CREATE TABLE IF NOT EXISTS my_table(
    pk1 bigint,
    pk2 tinyint,
    pk3 int,
    pk4 int,
    pk5 int,
    pk6 int,

    ck1 bigint,
    ck2 boolean,
    ck3 boolean,
    ck4 bigint,

    c1 counter,
    c2 counter,
    c3 counter,
    c4 counter,
    c5 counter,

    PRIMARY KEY ((pk1, pk2, pk3, pk4, pk5, pk6), ck1, ck2, ck3, ck4)
);

查询失败:

select c1
from my_table
where pk1=-1and pk2=0 and pk3=0 and pk4=0
and pk5=0 and pk6=0 and ck1=1518739200000 and ck3=true and ck4=false and ck2=0;

查询有效:

select c1
from my_table
where pk1=720576073523265855 and pk2=0 and pk3=0 and pk4=0
and pk5=0 and pk6=0 and ck1=1518739200000 and ck3=true and ck4=false and ck2=1152930028237901798;

其他有效的查询:

select *
from my_table
limit 500;

2 个答案:

答案 0 :(得分:1)

我假设你的一个节点死了,但你有活节点。因此,从死节点查询数据的查询失败,但其余查询成功。

您可以使用以下命令检查群集的状态:

nodetool status

您还可以使用命令

检查哪个节点包含特定分区键的实际数据
nodetool getendpoints my_keyspace my_table pk1:pk2:pk3:pk4:pk5:pk6

(my_keyspace,my_table和pk1..pk6代表实际值)

答案 1 :(得分:0)

感谢您的帮助。

我已将群集更新为Cassandra 3.11.1,并且计数器表最终正常工作。

我只能假设我是版本3.6的问题