Cassandra 修复 - 在启用 Leveled Compaction 的情况下进行增量修复时的大量流式传输

Posted

技术标签:

【中文标题】Cassandra 修复 - 在启用 Leveled Compaction 的情况下进行增量修复时的大量流式传输【英文标题】:Cassandra repair - lots of streaming in case of incremental repair with Leveled Compaction enabled 【发布时间】:2014-08-14 13:42:57 【问题描述】:

我使用 Cassandra 来收集时间序列测量值。为了启用良好的分区,除了 device-id 我添加了 day-from-UTC-beginning 和一个基于书面测量创建的 bucket .时间被添加为集群键。最终的密钥可以写成

((device-id, day-from-UTC-beginning, bucket), measurement-uuid)

在大多数情况下,针对此架构的查询会使用给定的 device-idday-from-UTC-beginning 使用 IN 获取整行> 用于水桶。因为这个查询模式Leveled Compaction 看起来像一个完美的匹配,因为它确保了一行被一个 SSTable 保存的可能性很大。 当附加到表被禁用时,运行增量修复很好。有一次,修复是在写入压力下运行的,涉及大量流。看起来流式传输的数据多于上次修复后追加的数据。

我尝试过使用多张桌子,每天一张。当一天结束并且没有对给定表进行进一步写入时,修复运行顺利。我知道thousands of tables overhead 虽然它看起来只是一个可行的解决方案。

在大量写入场景下,将 Leveled Compaction 与增量修复相结合的正确方法是什么?

【问题讨论】:

【参考方案1】:

当您的写入工作量很大时,分级压缩不是一个好主意。当读取延迟很重要时,它更适合读/写混合工作负载。此外,如果您的集群已经迫于 I/O,切换到分级压缩几乎肯定只会使问题恶化。因此,请确保您拥有 SSD。 此时,大小分层是写入繁重工作负载的更好选择。不过 2.1 对此进行了一些改进。

【讨论】:

正如我所提到的,重读访问模式是扫描整行。我测试了大小分层压缩,它带来了很多开销。迁移到 Leveled 使读取延迟降至我的场景所需的最低限度。据我所知,磁盘 IO 不是问题,我已经安装了 JBOD,它可以很好地处理压力。问题是,当密钥空间处于写入压力之下时,为什么在修复期间会发生如此多的流式传输?是压实相关的东西吗?

以上是关于Cassandra 修复 - 在启用 Leveled Compaction 的情况下进行增量修复时的大量流式传输的主要内容,如果未能解决你的问题,请参考以下文章

如何修复cassandra节点

在进行节点工具修复时向 cassandra 发送数据

Cassandra:挂节点工具修复

如何在 Cassandra 4.0 Docker 容器上启用完整查询日志记录?

如果在 cassandra.yaml 中启用了 auto_snapshot,那么这些快照啥时候会被删除

Cassandra 占用大量 CPU