我使用的是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?也许我误解了这个调度器的用法。
发布于 2017-02-03 01:49:10
我在查看2.1.16 Cassandra源代码时发现,这种查询速率限制机制只适用于Thrift协议。它不适用于CQL3协议。当我通过Cassandra的废弃命令-cli(这是原始的Thrift解释器)运行查询时,我确实看到了我在RoundRobinScheduler类中插入的调试消息。
我不知道的是,这种查询速率限制机制是否适用于CQL3。我的项目使用的是相对较旧的2.1版本。这些参数仍然包含在3.9版本中分发的cassandra.yaml中。有一段时间,我必须下载源代码,然后自己去看看。
https://stackoverflow.com/questions/41774953
复制相似问题