当前位置: 首页 > 知识库问答 >
问题:

在生产中改变Cassandra压缩最佳实践,nodetool升级表是首选吗?

袁阿苏
2023-03-14

我们有一个cassandra keyspace,它有两个正在生产的表。我们已将其压缩策略从<code>LZ4Compressor</code>(默认)更改为<code>DeflateCompressor>/code

使用< code >更改表“Keyspace”。" TableName " WITH compression = { ' class ':' reduce compressor ' };

因为我的cassandra 5节点集群的每个节点中都有大约300 GB的数据,复制因子为2。nodetool升级稳定是否推荐或不作为最佳实践。

从我们读过的所有资料来看

如果有必要的话

我可以使用nodetool upgradesstables命令。但我想知道,就我们生产中的数据而言,最佳实践是什么?

来源:

向现有列族添加压缩时,磁盘上的现有表不会立即被压缩。在正常的Cassandra压缩过程中,任何新创建的表都将被压缩,任何现有的表都将被压缩。如有必要,您可以使用node tool upgrades tables(Cassandra 1 . 0 . 4或更高版本)或nodetool scrub强制重写和压缩现有的SSTables

在所有节点完成< code > upgrades tables 后,我的cassandra日志中出现了大量异常

更新 - 运行升级表后,现在我的集群抛出了很多错误

示例 '

错误 [读取重新修久阶段:74899] 2018-04-08 14:50:09,779 卡桑德拉守护进程.java:229 - 线程中的异常[读取修改阶段:74899,5,main] 组织.apache.cassandra.exceptions.ReadTimeout异常:操作超时 - 仅收到 0 个响应。at org.apache.cassandra.service.DataResolver$RepairMergeListener.close(DataResolver.java:171) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.db.partitions.Unfired分区iterators$2.close(未过滤分区迭代器.java:182) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.db.transform.BaseIterator.close(BaseIterator.java:82) ~[apache-cassandra-3.10.jar:3.10] 在 org.apache.cassandra.service.DataResolver.compareResponses(DataResolver.java:89) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.AsyncRepairCallback$1.runMayThrow(异步对对Callback.java:50) ~[apache-cassandra-3.10.jar:3.10] 在组织.apache.cassandra.utils.wrappedrunable.run(包装可运行.java:28) ~[apache-cassandra-3.10.jar:3.10] 在 java.util.concurrent.并发.ThreadPoolExcutor.runWorker(线程池攻击者.java:1149) ~[na:1.8.0_144] 在 java.util.util.并发.线程池检测器运行(线程池检测器.java:1149) ~[na:1.8.0_144] 在 java.pool.并发.线程挖掘者.run(线程池检测器.java:624) ~[na:1.8.0_144] 在组织.apache.cassandra.concurrent.namedThreadFactory.lambda$线程本地定位器$0(命名ThreadFactory.java:79) ~[apache-cassandra-3.10.jar:3.10] 在 java.lang.Thread.run(线程.java:748) ~[na:1.8.0_144] EBUG [读取重新调整阶段:74889] 2018-04-08 14:50:07,777 ReadCallback.java:242 - 摘要不匹配: org.apache.cassandra.service.摘要不匹配:关键修饰键不匹配(1013727261649388230,715cb15cc5624c5a930ddfce290a690b) (d728e9a275616b0e05a0cd1b03bd9ef6 vs d41d8cd98f00b204e9800998ecf8427e) at org.apache.cassandra.service.DigestResolver.compareResponses(DigestResolver.java:92) ~[apache-cassandra-3 .10.jar:3.10] 在组织.apache.cassandra.service.ReadCallback$异步重新修整修运行(读取回溯.java:233) ~[apache-cassandra-3.10.jar:3.10] 在 java.util.concurrent.线程池检测器.runworker(线程池专家.java:1149) [na:1.8.0_144] 在java.util.concurrent.ThreadPoolExecutor$Worker.run(线程池专家.java:624) [na:1.8.0_144] at org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDealdelocator$0(NamedThreadFactory.java:79) [apache-cassandra-3.10.jar:3.10] at java.lang.Thread.run(Thread.java::79) 748) ~[na:1.8.0_144] DEBUG [八卦阶段:1] 2018-04-08 14:50:08,490 FailureDetor.java:457 - 忽略 /10.196.22.208 调试的2000213620间隔时间 [读取重新调整阶段:74899] 2018-04-0814:50:09,778 DataResolver.java:169 - 在收到所有 1 个数据和摘要响应后读取修复时超时 错误 [ReadRepairStage:74899] 2018-04-08 14:50:09,779 CassandraDaemon.java:229 - 线程中的异常[读取修复阶段:74899,5,main] org.apache.cassandra.exceptions.读取超时异常异常: 操作超时 - 仅收到 0 个响应。at org.apache.cassandra.service.DataResolver$RepairMergeListener.close(DataResolver.java:171) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.db.partitions.Unfired分区iterators$2.close(未过滤分区迭代器.java:182) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.db.transform.BaseIterator.close(BaseIterator.java:82) ~[apache-cassandra-3.10.jar:3.10] 在 org.apache.cassandra.service.DataResolver.compareResponses(DataResolver.java:89) ~[阿帕奇-卡桑德拉-3.10.jar:3.10]'

共有1个答案

龚伯寅
2023-03-14

当您使用< code > node tool upgradestables 时,它会使用您指定的新选项从现有的表中写入新的表。这是一个IO密集型过程,可能会影响集群的性能,因此您需要相应地进行规划。您还需要有足够的磁盘空间来执行此操作。该命令也应该以运行Cassandra的同一用户身份运行。

这实际上取决于您的需求 - 如果不是紧急的,您可以简单地等到正常的压缩发生,然后数据将被重新压缩。

 类似资料:
  • 我使用的是Debezium,它制作了Kafka Connect。Kafka Connect公开了几个需要创建的主题: OFFSET_STORAGE_TOPIC运行Kafka Connect服务时需要此环境变量。将此设置为Kafka主题的名称,其中Kafka Connect服务组存储连接器偏移。主题应该有许多分区,高度重复(例如,3倍或更多),并且应该为压缩进行配置。 STATUS_STORAGE_

  • 问题内容: 我正在阅读 http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs- dependency-injection.html ,事实证明,如果您缩小JavaScript的大小,angularjs依赖项注入会出现问题,我想知道是否 你应该使用 总而言之,我认为第二个片段是针对angularjs的旧版本的,但是..

  • 问题内容: 什么是最好的JavaScript压缩器?我正在寻找一种工具: 易于使用 压缩率高 产生可靠的最终结果(不会弄乱代码) 问题答案: 除了去除空格之外,UglifyJS还执行以下操作: 更改局部变量名称(通常更改为单个字符) 加入连续的var声明 避免插入任何不需要的括号,括号和分号 优化IF(在检测到不需要时删除“ else”,并在可能的情况下将IF转换为&&,||或?/:运算符,等等)

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给