为什么当read_repair_chance = 0.0时,Cassandra会抛出ReadRepairStage错误?

axr492tv  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(131)

大家好,
我们在Cassandra日志中看到一些错误,如:

ERROR [ReadRepairStage:24984] 2022-10-18 10:05:32,622 CassandraDaemon.java:228 - Exception in thread Thread[ReadRepairStage:24984,5,main]

但是,我们已停用读取修复
我们的环境:

  • cassandra :3.11.5
  • 群集复制:带DC1的射频3:1、DC2:1、DC3:1
  • 读取所有表的修复设置:dclocal读取修复机会= 0.0且读取修复机会= 0.0

有人能解释一下吗?谢谢你,弗洛

kb5ga3dv

kb5ga3dv1#

X1 E0 F1 X不仅仅由表的读取修复机会属性触发。
当以下条件为真时,协调器将触发读取修复:
1.读取中涉及多个复制副本(请求一致性高于ONELOCAL_ONE),并且
1.返回的结果摘要不匹配(一个或多个副本已过期)。
例如,对于一致性为LOCAL_QUORUM且复制因子为3的读请求,协调器将:

  • 从复制品之一发送直接读取请求,以及
  • 将DIGEST读取请求(仅散列/校验和,而非实际数据)发送到另一副本服务器。

然后,协调器将对直接读取请求的数据进行散列,并将其与来自其他副本的摘要进行比较。如果它们匹配,则将数据返回到客户端/驱动程序。如果存在摘要不匹配,则协调器触发读取修复以修复不一致的副本,然后将数据返回到客户端/驱动程序。
这种类型的读取修复称为“阻塞”,因为在修复故障副本之前,结果不会返回到客户端。如果存在摘要不匹配,协调器将始终触发这种类型的读取修复。它不依赖于读取修复机会。
有关更多信息,请参阅Read repair in Cassandra。干杯!

相关问题