【问题标题】:Python cassandra driver ReadtimeoutPython cassandra 驱动程序 Readtimeout
【发布时间】:2018-11-10 20:06:31
【问题描述】:

每次我尝试使用 cassandra python 驱动程序获取查询时,都会收到这样的异常:

**File "something.py", line 32, in <module>
    rows = session.execute('some query execution', timeout=None)
  File "C:\Anaconda2\lib\site-packages\cassandra\cluster.py", line 2141, in execute
    return self.execute_async(query, parameters, trace, custom_payload, timeout, execution_profile, paging_state).result()
  File "C:\Anaconda2\lib\site-packages\cassandra\cluster.py", line 4033, in result
    raise self._final_exception
cassandra.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': 'LOCAL_ONE'}**

为了避免这个异常,我已经尝试将默认超时设置为无,例如:

cluster.default_timeout = None
session.default_timeout = None
session.execute('some query execution', timeout=None)

但是,它们从未真正改变 Readtimeout 期限。

需要注意的一点是,这个查询命令我在 Squrriel 中执行的时间并不长,大约 1.5 秒。

有谁知道如何解决这个问题?谢谢!

【问题讨论】:

  • 我也试过将那三行设置为360.0,但仍然出现超时异常。
  • 你解决了吗?
  • 不幸的是我没有,但我改变了一个方法。

标签: python cassandra cql cql3 cassandra-driver


【解决方案1】:

这里的关键信息是Coordinator node timed out waiting for replica nodes' responses - 这意味着超时发生在 Cassandra 内部。在您的情况下,请求不会直接发送到拥有数据的节点,而是发送到充当Coordinator 的节点之一,然后该节点将请求重新发送到拥有数据的节点,并且不会在分配的时间内无法从它那里得到答案。

我记不太清楚了,但是 Python 驱动程序应该使用所谓的TokenAware 负载平衡策略,这将使驱动程序直接向拥有数据的节点发送请求 - 你需要检查你是否使用了这个策略。

此外,您需要检查 Cassandra 节点上的日志以找出它们超时的原因,并在必要时调整这些节点上的超时。

【讨论】:

  • 谢谢!让我试试看。
  • 你知道我应该使用哪个儿童政策吗?
  • 你只需要使用默认策略——不要改变任何东西,那么它将使用TokenAware:github.com/datastax/python-driver/blob/master/cassandra/…
  • 谢谢,但我认为这是我的数据库的问题。它经常超时,需要改进。
  • 也可能是这样 - 如果您有非常大的分区,那么它可能是超时的原因......
猜你喜欢
  • 2018-06-15
  • 2015-04-12
  • 2017-11-26
  • 2016-10-02
  • 1970-01-01
  • 2017-08-07
  • 2015-03-26
  • 2017-11-15
  • 2017-05-31
相关资源
最近更新 更多