我已经从 Thrift
更改了整个代码库至 CQL
使用 datastax java driver 1.0.1
和 cassandra 1.2.6..
有了节俭,我从一开始就经常超时,我无法继续……采用 CQL,按照我成功设计的表格和更少的超时……
有了它,我就可以插入无法使用 thrift 的大量数据......但是在一个阶段之后,数据文件夹大约为 3.5GB。我经常收到写入超时异常。即使我再次执行相同的早期工作用例,现在也抛出超时异常。即使在重新设置后,它的随机一次工作也不再工作。
CASSADNRA 服务器日志
这是 cassandra 服务器部分日志 Debug模式,当时我收到错误:
http://pastebin.com/rW0B4MD0
客户端异常是:
Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency ONE (1 replica were required but only 0 acknowledged the write)
at com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:54)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
at com.datastax.driver.core.Session.execute(Session.java:107)
at com.datastax.driver.core.Session.execute(Session.java:76)
基础设施:
16GB 机器和 8GB 堆分配给 cassandra,i7 处理器。
我正在使用单节点 cassandra,这个 yaml 调整超时,其他一切都是默认的:
用例:
我正在运行一个用例,它在 cassandra 中存储组合(我的项目术语)……目前正在测试存储 250 000 个组合和 100 个并行线程……每个线程存储一个组合……实际情况我需要支持数千万但那将需要不同的硬件和多节点集群......
在存储一个组合大约需要 2 秒,涉及:
100个并行线程并行存储100个组合。
我发现 WRITE TIMEOUTS 的行为是随机的,它可以工作到 200 000 然后抛出超时,有时甚至对于 10k 组合也不起作用。随机行为。
最佳答案
我发现在一些 cassandra-stress 读取操作期间,如果我将线程设置得太高,我会得到那个 CL 错误。考虑在测试期间将线程数量降低到您的池可以承受的水平,以击败
在我看来,在 cassandra.yaml 中修改它并不总是一个好主意。考虑您的机器使用的硬件资源。
鸡蛋:
cassandra-stress read n=100000 cl=ONE -rate threads=200 -node N1
会给我错误,而
cassandra-stress read n=100000 cl=ONE -rate threads=121 -node N1
将顺利完成工作。
希望可以帮到大家。
附言当您进行读取测试时,尝试使用“-pop dist=UNIFORM(1..1000000)”或您想要的数量在数据上传播读取。
关于timeout - Cassandra 频繁读写超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18101839/