5

我在 cassandra 设置中有“commitlog_segment_size_in_mb: 32”,但下面的错误表明最大大小为 16777216,约为 16mb。我是否正在查看修复以下错误的正确设置?

我指的是基于http://mail-archives.apache.org/mod_mbox/cassandra-user/201406.mbox/%3C53A40144.2020808@gmail.com%3E提供的建议的此设置

我正在为 Cassandra 使用 2.1.0-2。

我正在使用 Kairosdb,写入缓冲区的最大大小为 0.5Mb。

WARN  [SharedPool-Worker-1] 2014-10-22 17:31:03,163 AbstractTracingAwareExecutorService.java:167 - Uncaught exception on thread Thread[SharedPool-Worker-1,5,main]: {}
java.lang.IllegalArgumentException: Mutation of 17076203 bytes is too large for the maxiumum size of 16777216
        at org.apache.cassandra.db.commitlog.CommitLog.add(CommitLog.java:216) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.commitlog.CommitLog.add(CommitLog.java:203) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:371) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:351) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Mutation.apply(Mutation.java:214) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.MutationVerbHandler.doVerb(MutationVerbHandler.java:54) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:62) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) ~[na:1.7.0_67]
        at org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:163) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:103) [apache-cassandra-2.1.0.jar:2.1.0]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67]
4

2 回答 2

9

您正在查看 .yaml 中的正确参数。C* 允许的最大写入大小是 commit_log_segment_size_in_mb 的一半,默认为 32mb,因此默认最大大小为 16mb。

背景

commit_log_segment_size_in_mb 代表提交日志归档或时间点备份的块大小。仅当您在 commitlog_archiving.properties 文件中配置了 archive_command 或 restore_command 时,它们才处于活动状态。

于 2014-10-22T18:32:20.217 回答
3

它的设置正确。这意味着 Cassandra 将丢弃此写入,因为它超过了配置的提交日志段大小的 50%。因此,在集群中每个节点的 Cassandra.yaml 中设置参数 commitlog_segment_size_in_mb:64 并重启每个节点以使更改生效。

原因: 根据设计意图,允许的最大段大小是配置的 commit_log_segment_size_in_mb 的 50%。这是为了让 Cassandra 避免编写具有大量空白空间的段。

详细说明; 最多两个 32MB 的段将适合 64MB,但是 40MB 仅在留下大量未使用空间时才适合。

来自datastax的参考链接:

https://support.datastax.com/hc/en-us/articles/207267063-Mutation-of-x-bytes-is-too-large-for-the-maxiumum-size-of-y-

于 2016-06-24T07:17:57.203 回答