如何解决CAS 写入查询期间的 Cassandra WriteTimeoutException
我们有两个 CAS 查询。每个区域有 2 个容器,它工作得很好。我们将容器从 2 个增加到 3 个,然后我们开始看到 WriteTimeoutException。与正常营业时间相比,流量相同甚至更少。 Cassandra 位于 3 个区域,每个集群有 3 个主机。
不确定这些错误的原因是什么,但更改是在应用程序容器中增加了一个。感谢这里是否有任何帮助以进一步调试。
UPDATE order_sequences USING TTL 10 set instance_name = ? where id_name = ? IF instance_name = null",ConsistencyLevel.QUORUM)
UPDATE order_sequences SET next_id= ? where id_name= ? IF next_id= ? AND instance_name = ?",ConsistencyLevel.QUORUM),
错误堆栈:
com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during CAS write query at consistency SERIAL (7 replica were required but only 0 acknowledged the write) at
com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:85) at
com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:23) at
com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:35) at
com.datastax.driver.core.ChainedResultSetFuture.getUninterruptibly(ChainedResultSetFuture.java:59) at
com.datastax.driver.core.NewRelicChainedResultSetFuture.getUninterruptibly(NewRelicChainedResultSetFuture.java:11) at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:58) at
解决方法
CAS 写入是一个专门的指标,在进行比较和设置时会触发。 LWT 事务称为比较和设置 (CAS);比较副本数据,并将发现的任何过期数据设置为最一致的值。
在Cassandra中,流程将Paxos协议与正常的读写操作结合起来,完成比较和设置操作。
Paxos 协议实现为一系列阶段:
• 准备/承诺 • 读取/结果 • 提议/接受 • 提交/确认
这四个阶段需要在提出轻量级事务的节点和事务中涉及的任何集群副本之间进行四次往返。性能会受到影响。因此,为必须考虑并发性的情况保留轻量级事务。
例如,以下一系列操作可能会失败:
删除... 插入 .... 如果不存在 选择....
以下一系列操作将起作用:
删除...如果存在 插入 .... 如果不存在 选择.....
强烈建议您检查“CAS 写入延迟”统计信息 “nodetool proxyhistograms”命令,它提供命令执行时的网络统计直方图。
如果您仍然遇到此错误,请告诉我吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。