我们有这个Cassandra集群,想知道当前的性能是否正常,我们可以做些什么来改善它。
集群由位于同一数据中心的3个节点组成,每个节点的总容量为465GB,堆容量为2GB。每个节点有8个内核和8GB或RAM。不同组件的版本为cqlsh 5.0.1 | Cassandra 2.1.11.872 | DSE 4.7.4 | CQL规范3.2.1 |本机协议v3
工作量描述如下:
写操作来自基于NodeJS的API服务器。使用Datastax提供的Nodejs驱动程序(最近从2.1.1更新到3.2.0的版本)。负责执行写请求的代码将根据主键对写操作进行分组,此外,它还将每个请求的请求大小限制为500个INSERT。写操作作为BATCH执行。明确设置的唯一选项是准备:真,记录:假
。
OpsCenter反映了去年使用此设置每秒不到一个请求的历史水平(每个写请求是一批多达500个操作,指向同一个表和同一个分区)。几乎全年,90%的请求的写请求延迟为1.6毫秒,但最近,90%的请求的写请求延迟增加到2.6毫秒以上。操作系统负载一直低于2.0,磁盘利用率大部分时间都低于5%,很少有峰值达到7%。全年的平均堆使用率为1.3GB,峰值为1.6GB,尽管当前峰值在上个月还在上升。
这种设置的问题是,API性能一整年都在下降。目前,批处理操作可能需要300毫秒到12秒以上(导致操作超时)。在某些情况下,NodeJS驱动程序会报告所有Cassandra驱动程序关闭,即使OpsCenter报告所有节点都正常运行。
压缩统计在每个节点上始终显示 0,节点工具 tpstats
显示如下内容:
Pool Name Active Pending Completed Blocked All time blocked
CounterMutationStage 0 0 10554 0 0
ReadStage 0 0 687567 0 0
RequestResponseStage 0 0 767898 0 0
MutationStage 0 0 393407 0 0
ReadRepairStage 0 0 411 0 0
GossipStage 0 0 1314414 0 0
CacheCleanupExecutor 0 0 48 0 0
MigrationStage 0 0 0 0 0
ValidationExecutor 0 0 126 0 0
Sampler 0 0 0 0 0
MemtableReclaimMemory 0 0 497 0 0
InternalResponseStage 0 0 126 0 0
AntiEntropyStage 0 0 630 0 0
MiscStage 0 0 0 0 0
CommitLogArchiver 0 0 0 0 0
MemtableFlushWriter 0 0 485 0 0
PendingRangeCalculator 0 0 4 0 0
MemtablePostFlush 0 0 7879 0 0
CompactionExecutor 0 0 263599 0 0
AntiEntropySessions 0 0 3 0 0
HintedHandoff 0 0 8 0 0
Message type Dropped
RANGE_SLICE 0
READ_REPAIR 0
PAGED_RANGE 0
BINARY 0
READ 0
MUTATION 0
_TRACE 0
REQUEST_RESPONSE 0
COUNTER_MUTATION 0
对这个问题的任何帮助或建议都将深表感谢。如果你需要分析它,请随时索取任何其他信息。
此致敬意
我会尝试找到一个重现器,并在启用跟踪的情况下运行重现器——希望这将有助于理解问题所在(尤其是当您将其与延迟良好的跟踪进行比较时)。
有一个关于如何启用查询跟踪并通过nodejs驱动程序示例检索输出的示例retrieve-query-trace.js(可以在https://github.com/datastax/nodejs-driver找到)
您的请求数量保持不变,还是工作量在增加?
服务器似乎过载(可能是网络)。
我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为
我们运行的cassandra集群有3个节点,复制因子为2。 我们的nodejs服务器是查询这个集群的唯一地方。 是否有其他任何地方的参数设置可能导致不一致的查询? cassandra v2.2.4 nodejs驱动程序v3.0.0 编辑-添加我正在做的事情的示例: 1)检查用户名是否被占用 2)创建用户
我们一直在使用Spark RDD API(Spark 2.0)来处理在Cassandra.Note中建模的数据,这些数据在Cassandra中建模以实现高效的读写。 然而,现在还有SparkSQLAPI,Spark DataFrame API,它也是一种替代的数据访问方法-http://spark.apache.org/docs/latest/sql-programming-guide.html
有人可以帮助我了解如何使用POJO类插入卡桑德拉UDT数据吗? 我创建了一个POJO类来映射Cassandra的表,并为Cassandra UDT创建了另一个类,但是当我插入映射Cassandra表的主POJO类时,它无法识别另一个POJO类(映射Cassandra的UDT)。我还在每个类和每个类对象上编写了注释。 这是我的一个POJO类:- 另一个POJO类:-
我用Spring Data Cassandra 2.2.1开发了一个新的应用程序,想在Cassandra 2.1.9服务器上运行它(旧的,我知道)。但是我们得到了错误 Spring数据卡桑德拉手册声称Spring数据2.2.1至少需要卡桑德拉2.1,所以这应该有效,但它没有。我们包含的唯一特定于卡桑德拉的依赖项是 我怎样才能让这个工作?