timeout - Cassandra 频繁读写超时

标签 timeout cassandra datastax-java-driver

我已经从 Thrift 更改了整个代码库至 CQL使用 datastax java driver 1.0.1cassandra 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 调整超时,其他一切都是默认的:
  • read_request_timeout_in_ms: 30000
  • range_request_timeout_in_ms: 30000
  • write_request_timeout_in_ms: 30000
  • truncate_request_timeout_in_ms: 60000
  • request_timeout_in_ms: 30000

  • 用例:
    我正在运行一个用例,它在 cassandra 中存储组合(我的项目术语)……目前正在测试存储 250 000 个组合和 100 个并行线程……每个线程存储一个组合……实际情况我需要支持数千万但那将需要不同的硬件和多节点集群......

    在存储一个组合大约需要 2 秒,涉及:
  • 527 INSERT INTO 查询
  • 506 更新查询
  • 954 SELECT 查询

  • 100个并行线程并行存储100个组合。

    我发现 WRITE TIMEOUTS 的行为是随机的,它可以工作到 200 000 然后抛出超时,有时甚至对于 10k 组合也不起作用。随机行为。

    最佳答案

    我发现在一些 cassandra-stress 读取操作期间,如果我将线程设置得太高,我会得到那个 CL 错误。考虑在测试期间将线程数量降低到您的池可以承受的水平,以击败

  • read_request_timeout_in_ms

  • 在我看来,在 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/

    相关文章:

    java - Hystrix 忽略运行超时

    ruby-on-rails - Heroku 上的 H12 超时错误

    mongodb - 选择一个数据库来存储 Report Json

    cassandra - 选择 Cassandra 中的所有性能

    cassandra - Cassandra 中的原子批处理

    java - InvalidQueryException 未配置的 Columnfamily Spring Data Cassandra DataStax Enterprise

    Cassandra 不一致,尽管 QUORUM 一致性级别与复制因子 3

    java - Tomcat 期望从页面返回响应是否有最大时间限制?

    angular - HTTP 心跳以避免长时间运行的 http 调用的连接断开

    cassandra - 如何使用 hector 从 cassandra 中获取反柱的值?