cassandra.yaml 中超过 max_value_size_in_mb 的值出现错误

Getting error for value exceeding max_value_size_in_mb in cassandra.yaml

现在我在我的 Cassandra 系统上观察到一些错误。log/debug.log 和节点在以下错误后突然 DOWN。

CorruptSSTableException 因为值长度超过最大值 287435456,这是通过 max_value_size_in_mb 在 cassandra.yaml

中设置的

在 Cassandra 文档中查看此值时发现:-

max_value_size_in_mb 该选项默认被注释掉。 SSTables 中任何值的最大大小。早期检测 SSTable 损坏的安全措施。任何大于此阈值的值大小都将导致将 SSTable 标记为已损坏。这应该是正数并且小于 2048。 默认值:256

在我的例子中,这个值也是默认值,即 256。但我的问题是:-

1)这个值是什么意思?它是任何 SStables 的最大尺寸吗? 2)为什么节点在超过这个值之后或者这个错误之后就宕机了?

提前致谢!

What does it mean by this value?

您的数据库文件(SSTable 之一)中的一行大于允许的最大大小,或者 SSTable 文件已损坏,因为元数据包含超出合理限制的值(行大小)。

Is it max size of any SStables?

它是 SSTable(table 的一部分)中任何值(行)(单条数据)(Key/Value 对)(元组)的最大允许大小。

注1:SSTable是数据库的一种数据存储格式。它只是对字符串(行)进行排序。通常,一个table由一组包含不同部分数据的sstable文件组成。

注 2:table 行在磁盘上看起来如何? :

Row [ Len: uint64_t, Data: char[Len] ]
Len must be < max_value_size_in_mb (256MB by default)

Why node was down after exceeding this value or after this error ?

我不知道如果节点发现损坏的 ss 是否会关闭 table。它可以将其标记为已损坏并从那时起忽略它。因此,它可能没有关系。

基本上,如果有 1 个 sstables 损坏,那么您要么丢失数据,要么可能看到以前的版本或删除的行。所以,从一致性的角度来看,让client和一个坏掉的table交互并不是一个很好的主意。但行为取决于数据库。