Python cassandra驱动程序Readtimeout

时间:2018-05-31 18:25:59

标签: python cassandra cql3 cassandra-driver

每当我尝试使用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)

但是,他们从未真正改变过读时间段。

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

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

1 个答案:

答案 0 :(得分:0)

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

我不记得了,但是Python驱动程序应该使用所谓的TokenAware负载均衡策略,该策略将使驱动程序直接向拥有数据的节点发送请求 - 您需要检查是否使用此策略

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