spring-boot - 为什么即使满足一致性级别,cassandra 写入也会失败?
问题描述
我有以下配置的 cassandra 集群设置:-
- 节点:- 3
- 数据中心:- dc1
- 复制因子:-3
- 一致性:- LOCAL_QUORUM
我创建了一个示例 spring boot api,它递归地插入到 keyspace(test) 的 table(testing1) 中。
在执行写入操作之前,我使用 tc 命令在其中一个节点中引入了延迟(2100ms)作为响应,因此当执行写入操作时,我们会得到 writetimeoutexception,因为在 cassandra.yaml 中将 write_request_timeout 设置为 2000ms。Cassandra 仍应成功执行写入操作,因为需要确认满足一致性级别 (2) 的节点正在正常工作,但我收到以下异常:-
com.datastax.driver.core.exceptions.WriteTimeoutException:在一致性 LOCAL_QUORUM 写入查询期间 Cassandra 超时(需要 2 个副本,但只有 1 个确认写入)。
为什么即使 ack(2) 所需的节点已启动并正在运行,写入也会失败?
解决方案
写入必须在超时内完成才能不出现超时异常。无论节点是否已启动。
Cassandra 仍应成功执行写入操作,因为需要节点确认满足一致性级别 (2)
不,它不应该也不会。如果超时已超过节点可能会丢弃突变并依靠提示、读取修复和反熵修复来解决它。突变的状态是未知的并作为错误返回,因此可以重试或至少不假定在仲裁中应用它,这样它就不会破坏一致性合同。
推荐阅读
- java - 如何使 JTextArea 自动滚动
- python - 循环遍历字符串列表并删除记录
- python - Matplotlib 在底部显示网格线而不是脊椎
- r - R-- 提取特定文本和随后的文本/数字
- javascript - TypeError:null 不是对象(评估“prevState.intervalTimer”)
- matplotlib - 大型数据集的置信区间
- javascript - MongoDB 和 Node.js 查询具有权重概率的随机值
- html - 导航栏在反应引导中折叠时如何更改导航栏菜单图标
- python - 使用 re 将隐式乘法转换为显式乘法
- javascript - 在 __mocks__ 文件夹中使用 Jest 模拟 Sendgrid