我和Cassandra 2.1.16一起跑步。我需要将查询的数量限制在Cassandra中的特定键空间,因为应用程序正在运行对内存密集型密钥空间的查询。如果足够的这些同时运行,Cassandra将耗尽堆。
使用RoundRobinScheduler似乎是理想的解决方案。所以我在cassandra.yaml中启用了它,并设置了request_scheduler_options。因此,对于下面的示例,我想要一次激活名为mykeyspace的密钥空间不超过2个查询:
request_scheduler: org.apache.cassandra.scheduler.RoundRobinScheduler
request_scheduler_options:
throttle_limit: 80
default_weight: 5
weights: mykeyspace: 2
request_scheduler_id: keyspace
这不起作用,也没有效果。为了调试这个,我下载了Cassandra源代码并将调试日志消息添加到RoundRobinScheduler类中的所有方法。记录的唯一消息来自构造函数。当我运行查询时,我没有看到来自其他方法的日志消息。
使用RoundRobinScheduler有没有运气?也许我误解了这个调度程序的使用。
答案 0 :(得分:0)
我发现查看2.1.16 Cassandra源代码,该查询速率限制机制仅适用于Thrift协议。它不适用于CQL3协议。当我通过Cassandra弃用的命令cli(原始的Thrift解释器)运行查询时,我确实看到了我在RoundRobinScheduler类中检测到的调试消息。
我不知道的是,此查询速率限制机制是否已适应CQL3。我的项目使用的是相对较旧的2.1版本。这些参数仍包含在3.9版本中分发的cassandra.yaml中。有一段时间我必须下载源代码并亲自查看。