我有一个风暴拓扑,将数据插入卡桑德拉柜台表中。该表有6个分区键,4个主键和5个计数器。
当数据开始插入时,我可以正确查询计数器,但是几分钟用数千个事件更新表格后,我每次尝试从表中读取一排时都会收到一个阅读时间(最频繁更新的行(。我可以快速阅读的其他行。另外,如果我运行" 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;
我假设您的一个节点死了,但是您有活节点。因此,查询来自死节点的数据的查询失败,但其余查询成功。
您可以使用以下命令检查群集的状态:
nodetool status
您还可以检查哪个节点包含具有命令
的特定分区密钥的实际数据nodetool getendpoints my_keyspace my_table pk1:pk2:pk3:pk4:pk5:pk6
(my_keyspace,my_table和pk1..pk6代表实际值(
谢谢您的帮助。
我已将集群更新为Cassandra 3.11.1,并且柜台表最终正常工作。
我只能假设我是3.6